How to merge two dynamically generated maps

I have a map like this:

vault_secrets:
  path1:
    - audit_db_service
    - sys_admin_role
  path2:
    - mis
    - jml_snow_service

and from there, I like to have a resultant map, like:

{
  "path1/audit_db_service" = "auditdb"
  "path1/sys_admin_role" = "sysadmin"
  "path2/mis" = "mis"
  ....
}

I came up with this:

[
   for K1,V1 in var.vault_secrets : merge({
      for v2 in V1 : "${K1}/${v2}" => join(
        "", slice(split("_",v2),0,length(
          split("_",v2))>1 ? (length(split("_",v2))-1) : 1
        )
      )
   })
]

which, gives me this result:

 [
  {
    "path1/audit_db_service" = "auditdb"
    "path1/sys_admin_role" = "sysadmin"
  },
  {
    "path2/jml_snow_service" = "jmlsnow"
    "path2/mis" = "mis"
  },
]

and that’s where I got stuck. Can anyone give me a git of hands pls?
Also, any idea why that merge(...) in my code doesn’t work?

-S

try this with your input variable:

locals {
  myres = [
    for K1, V1 in var.vault_secrets : merge({
      for v2 in V1 : "${K1}/${v2}" => join(
        "", slice(split("_", v2), 0, length(
          split("_", v2)) > 1 ? (length(split("_", v2)) - 1) : 1
        )
      )
    })
  ]


  myres2 = merge([for k1, v1 in var.vault_secrets : { for k2 in v1 : "${k1}/${k2}" => join(
    "", slice(split("_", k2), 0, length(
      split("_", k2)) > 1 ? (length(split("_", k2)) - 1) : 1
  )) }]...)


}

variable "vault_secrets" {
  type    = map(list(string))
  default = { path1 = ["audit1", "sys_admin"], path2 = ["mis", "jml_snow"] }
}

output "result" {
  value = local.myres
}
output "result2" {
  value = local.myres2
}

1 Like
% terraform plan

Changes to Outputs:
  + result  = [
      + {
          + path1/audit1    = "audit1"
          + path1/sys_admin = "sys"
        },
      + {
          + path2/jml_snow = "jml"
          + path2/mis      = "mis"
        },
    ]
  + result2 = {
      + path1/audit1    = "audit1"
      + path1/sys_admin = "sys"
      + path2/jml_snow  = "jml"
      + path2/mis       = "mis"
    }


thanks @tbugfinder !!
Looks like that’s all what I wanted but let me try and confirm.