diff --git a/proxmox.tf b/proxmox.tf index 677e46c..c4badc8 100644 --- a/proxmox.tf +++ b/proxmox.tf @@ -47,43 +47,27 @@ resource "proxmox_virtual_environment_file" "vm_user_data" { source_raw { file_name = "cloud-init-iac-k8s-${each.key}.yaml" data = yamlencode( - local.deep_merge( - [ - yamldecode(file("${path.module}/cloud-init-base.yaml")), - yamldecode(templatefile("${path.module}/cloud-init-vm.yaml.tftpl", { - extra_packages = try(each.value.extra_packages, []), - extra_users = try(each.value.extra_users, []), - extra_runcmd = try(each.value.extra_runcmd, []), - })) - ] + merge( + yamldecode(file("${path.module}/cloud-init-base.yaml")), + { + packages = concat( + try(yamldecode(file("${path.module}/cloud-init-base.yaml")).packages, []), + try(each.value.extra_packages, []) + ), + users = concat( + try(yamldecode(file("${path.module}/cloud-init-base.yaml")).users, []), + try(each.value.extra_users, []) + ), + runcmd = concat( + try(yamldecode(file("${path.module}/cloud-init-base.yaml")).runcmd, []), + try(each.value.extra_runcmd, []) + ) + } ) ) - } + } -locals { - 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 - ) -} resource "proxmox_virtual_environment_vm" "proxmox-kubernetes-VM-template" {