Terraform:合并地图列表并从重复的键中连接它们的值
Terraform : merge list of maps and concatenate their value from duplicate keys
我想连接共享同一键的地图列表的值。
我有一个看起来像这样的地图列表:
tags = [
{
key = "env"
value = "dev"
},
{
key = "project"
value = "tata"
},
{
key = "env"
value = "prod"
},
{
key = "project"
value = "tata"
},
{
key = "project"
value = "titi"
}
]
我想用下面的方式转换它。
tags = [
{
key = "env"
value = ["dev", "prod"]
},
{
key = "project"
value = ["tata", "titi"]
}
]
或者更好的是,像这样:
tags = {
env = ["dev", "prod"]
project = ["tata", "titi"]
}
This post 看起来像我的问题,但我无法适应我的情况。
感谢您的帮助。
您可以按如下方式进行:
variable "tags" {
default = [
{
key = "env"
value = "dev"
},
{
key = "project"
value = "tata"
},
{
key = "env"
value = "prod"
},
{
key = "project"
value = "tata"
},
{
key = "project"
value = "titi"
}
]
}
locals {
keys_available = distinct([for tag in var.tags: tag["key"]])
# with duplicate values
helper_map = merge([for key in local.keys_available:
{for tag in var.tags:
key => tag["value"]... if tag["key"] == key
}
]...)
# duplicates removed
final_map = {for k,v in local.helper_map: k => distinct(v)}
}
output "test" {
value = local.final_map
}
给出:
test = {
"env" = tolist([
"dev",
"prod",
])
"project" = tolist([
"tata",
"titi",
])
}
我想连接共享同一键的地图列表的值。 我有一个看起来像这样的地图列表:
tags = [
{
key = "env"
value = "dev"
},
{
key = "project"
value = "tata"
},
{
key = "env"
value = "prod"
},
{
key = "project"
value = "tata"
},
{
key = "project"
value = "titi"
}
]
我想用下面的方式转换它。
tags = [
{
key = "env"
value = ["dev", "prod"]
},
{
key = "project"
value = ["tata", "titi"]
}
]
或者更好的是,像这样:
tags = {
env = ["dev", "prod"]
project = ["tata", "titi"]
}
This post 看起来像我的问题,但我无法适应我的情况。
感谢您的帮助。
您可以按如下方式进行:
variable "tags" {
default = [
{
key = "env"
value = "dev"
},
{
key = "project"
value = "tata"
},
{
key = "env"
value = "prod"
},
{
key = "project"
value = "tata"
},
{
key = "project"
value = "titi"
}
]
}
locals {
keys_available = distinct([for tag in var.tags: tag["key"]])
# with duplicate values
helper_map = merge([for key in local.keys_available:
{for tag in var.tags:
key => tag["value"]... if tag["key"] == key
}
]...)
# duplicates removed
final_map = {for k,v in local.helper_map: k => distinct(v)}
}
output "test" {
value = local.final_map
}
给出:
test = {
"env" = tolist([
"dev",
"prod",
])
"project" = tolist([
"tata",
"titi",
])
}