# Variables # ===================== variable "tenant" { description = "Tenant informations" type = any default = {} } variable "deploy" { description = "Deployments configuration" type = map default = {} } variable "catalog" { description = "Cloud informations" type = any default = {} } variable "deployment" { description = "Deployment options" type = any default = {} } # Resources # ===================== locals { def_deploy = { deployment_name = "default" pools = false volumes = false networks = false instances = false images = false } def_deployment = { # Default values (always obj) // os = {} pool = {} image = {} // flavor = {} volume = {} network = {} instance = {} # Deployment config oses = {} pools = {} images = {} flavors = {} volumes = [] # List of volumes networks = {} instances = [] # List of instances } deploy = merge ( local.def_deploy, var.deploy ) deployment = merge ( local.def_deployment, var.deployment ) catalog = merge ( local.def_deployment, var.catalog ) merged_catalog = {for name, item in local.def_deployment: # Merge only dicts, skip lists ... name => try( merge( local.catalog[name], local.deployment[name], ), [] ) } } # Modules # ===================== module "cloud_pools" { source = "../../modules_libvirt/virt_pools" count = local.deploy.pools ? 1: 0 pools = local.deployment.pools pools_defaults = local.deployment.pool } module "cloud_images" { source = "../virt_images" count = local.deploy.images ? 1: 0 depends_on = [module.cloud_pools] images = local.deployment.images images_defaults = local.deployment.image } module "cloud_volumes" { source = "../virt_volumes" count = local.deploy.volumes ? 1: 0 depends_on = [module.cloud_pools] tenant = var.tenant volumes = local.deployment.volumes volumes_defaults = local.deployment.volume } module "cloud_networks" { source = "../virt_networks" count = local.deploy.networks ? 1: 0 tenant = var.tenant networks = local.deployment.networks networks_defaults = local.deployment.network } module "cloud_instances" { source = "../cloud_instances" count = local.deploy.instances ? 1: 0 depends_on = [module.cloud_networks, module.cloud_images, module.cloud_volumes] tenant = var.tenant instance_defaults = local.deployment.instance catalog = local.merged_catalog // networks_catalog = local.deployment.networks // images_catalog = local.deployment.images // oses_catalog = local.deployment.oses // flavors_catalog = local.deployment.flavors instances = local.deployment.instances } # Dump Config # ===================== resource "local_file" "config_cloud" { content = yamlencode(var.catalog) filename = "out/ns-${local.deploy.deployment_name}-catalog.yml" } resource "local_file" "config_deployment" { content = yamlencode(var.deployment) filename = "out/ns-${local.deploy.deployment_name}-deployment.yml" } # 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.deployment // }