From d1304f045faae3021ff515a4f89c0b005b534f9d Mon Sep 17 00:00:00 2001 From: fenix-gitea-admin Date: Tue, 26 Aug 2025 18:23:57 +0000 Subject: [PATCH] Update proxmox.tf --- proxmox.tf | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/proxmox.tf b/proxmox.tf index b6400d1..c337d10 100644 --- a/proxmox.tf +++ b/proxmox.tf @@ -64,32 +64,32 @@ locals { }) ) } - - # 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] + + # Função recursiva para merge de mapas/listas + deep_merge = { + merge = function(any, any) any => ( + local._deep_merge_impl(args[0], args[1]) + ) + _deep_merge_impl = function(any, any) any => ( + let base = args[0] + let override = args[1] + let result = {} + in merge( + result, + { for k in setunion(keys(base), keys(override)) : + k => ( + contains([list, map], type(base[k])) && contains([list, map], type(override[k])) ? + (type(base[k]) == list ? concat(base[k], override[k]) : local.deep_merge._deep_merge_impl(base[k], override[k])) + : + can(override[k]) ? override[k] : base[k] + ) } - } else if can(override[k]) { - result[k] = override[k] - } else { - result[k] = base[k] - } - } - return result - EOT - ) + ) + ) + } + + merged_cloudinit = { for vm_name, vm_cfg in local.vm_cloudinits : vm_name => local.deep_merge._deep_merge_impl(local.base_cloudinit, vm_cfg) } - # 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) } }