2023-10-23 10:44:10 -04:00

184 lines
3.4 KiB
HCL

# 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
// }