I’m trying to perform a merge of default values into a map object, that itself is an object in a map object:
variable “user_pools” {
default = {
api-pool = {
mfa_configuration = true
domain_name = false
app_clients = {
api-app = {
generate_secret = false
}
}
web-pool = {
mfa_configuratin = true
domain_name = false
app_clients = {
web-app = {}
}
}
}
}
locals {
merge_app_client = {
generate_secret = true
}
}
Output I’m looking to achieve is:
{
api-pool = {
api-app = {
generate_secret = false
}
}
web-pool = {
web-app = {
generate_secret = true
}
}
}
Using a for
command I can extract the “pool” and “app” names, but cannot appear to merge the local value into the map:
{ for k, v in var.user_pools : k => v.app_clients }
results, as expected, in:
{
"api-pool" = {
"api-app" = {
"generate_secret" = false
}
}
"web-pool" = {
"web-app" = {}
}
}
but cannot workout the syntax to merge local.merge_app_client
in to the right map, i.e.
{ for k, v in var.user_pools : k => merge(local.merge_app_client, v).app_clients }
results in:
{
"api-pool" = {
"mfa_configuration" = true
"domain_name" = false
"generate_secret" = true
"api-app" = {
"generate_secret = false
}
}
"web-pool" = {
"mfa_configuration" = true
"domain_name" = false
"generate_secret" = true
"web-app" = {}
}
}
How do I merge into “api-app” and “web-app”?
TIA.