184 lines
3.4 KiB
HCL
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
|
|
// }
|