mirror of
https://gitea.fenix-dev.com/fenix-gitea-admin/iac-opentofu-private.git
synced 2025-10-27 15:53:06 +00:00
56 lines
1.6 KiB
HCL
56 lines
1.6 KiB
HCL
locals {
|
|
# Lê o ficheiro base (que está no mesmo módulo)
|
|
base_cloudinit = yamldecode(file("${path.module}/cloud-init-base.yaml"))
|
|
|
|
# Renderiza cada ficheiro por VM
|
|
vm_cloudinits = {
|
|
for vm in var.proxmox_k8s_vms : vm.name => yamldecode(
|
|
templatefile("${path.module}/cloud-init-vm.yaml.tftpl", {
|
|
extra_packages = try(vm.extra_packages, [])
|
|
extra_users = try(vm.extra_users, [])
|
|
extra_runcmd = try(vm.extra_runcmd, [])
|
|
})
|
|
)
|
|
}
|
|
|
|
# Função recursiva para deep merge
|
|
deep_merge = function("deep_merge", [any, any], any, <<EOT
|
|
base, override = args
|
|
result = {}
|
|
for k in setunion(keys(base), keys(override)) {
|
|
if can(base[k]) && can(override[k]) {
|
|
if type(base[k]) == list && type(override[k]) == list {
|
|
result[k] = concat(base[k], override[k])
|
|
} else if type(base[k]) == map && type(override[k]) == map {
|
|
result[k] = deep_merge(base[k], override[k])
|
|
} else {
|
|
result[k] = override[k]
|
|
}
|
|
} else if can(override[k]) {
|
|
result[k] = override[k]
|
|
} else {
|
|
result[k] = base[k]
|
|
}
|
|
}
|
|
return result
|
|
EOT
|
|
)
|
|
|
|
# Resultado final = deep merge do base + vm
|
|
merged_cloudinit = {
|
|
for vm_name, vm_cfg in local.vm_cloudinits : vm_name => local.deep_merge(local.base_cloudinit, vm_cfg)
|
|
}
|
|
}
|
|
|
|
resource "proxmox_virtual_environment_file" "vm_user_data" {
|
|
for_each = local.merged_cloudinit
|
|
|
|
node_name = "fenix"
|
|
datastore_id = "local-snippets"
|
|
content_type = "snippets"
|
|
|
|
source_raw {
|
|
file_name = "cloud-init-iac-k8s-${each.key}.yaml"
|
|
data = yamlencode(each.value)
|
|
}
|
|
} |