# Variables # ===================== variable "cloud" { description = "Cloud informations" type = any default = {} } variable "tenant" { description = "Tenant informations" type = any default = {} } variable "deploy" { description = "Deployments configuration" type = map default = {} } variable "stack" { description = "Deployment options" type = any default = {} } # Resources # ===================== locals { def_deploy = { stack = "main" pools = false volumes = false networks = false instances = false images = false } base_stack = { pool = {} image = {} volume = {} network = {} instance = {} pools = {} images = {} volumes = [] networks = {} instances = [] } deploy = merge ( local.def_deploy, var.deploy ) stack = { for k, v in local.base_stack: k => try( merge ( local.base_stack[k], var.cloud[k], var.stack[k] ), var.stack[k], var.cloud[k] ,local.base_stack[k] ) } } # Modules # ===================== module "cloud_pools" { source = "../virt_pools" count = local.deploy.pools ? 1: 0 pools = local.stack.pools pools_defaults = local.stack.pool } module "cloud_images" { source = "../virt_images" count = local.deploy.images ? 1: 0 depends_on = [module.cloud_pools] images = local.stack.images images_defaults = local.stack.image } module "cloud_volumes" { source = "../virt_volumes" count = local.deploy.volumes ? 1: 0 depends_on = [module.cloud_pools] tenant = var.tenant volumes = local.stack.volumes volumes_defaults = local.stack.volume } module "cloud_networks" { source = "../virt_networks" count = local.deploy.networks ? 1: 0 tenant = var.tenant networks = local.stack.networks networks_defaults = local.stack.network } module "cloud_instances" { source = "../virt_instances" count = local.deploy.instances ? 1: 0 depends_on = [module.cloud_networks, module.cloud_images, module.cloud_volumes] tenant = var.tenant networks = local.stack.networks instances = local.stack.instances instances_defaults = local.stack.instance } # Output # ===================== output "cloud_pools" { value = module.cloud_pools } output "cloud_images" { value = module.cloud_images } output "cloud_volumes" { value = module.cloud_volumes } output "cloud_networks" { value = module.cloud_networks } output "cloud_instances" { value = module.cloud_instances } # output "DEBUG" { # value = local.stack # }