Terraform 地形-展平嵌套地图
我目前有一个terraform对象声明如下:Terraform 地形-展平嵌套地图,terraform,devops,terraform-provider-gcp,Terraform,Devops,Terraform Provider Gcp,我目前有一个terraform对象声明如下: locals { x = { a = [ { p0 = "j" p1 = "test-1" p2 = 0 }, { p0 = "k" p1
locals {
x = {
a = [
{
p0 = "j"
p1 = "test-1"
p2 = 0
},
{
p0 = "k"
p1 = "test-2"
p2 = 0
}
]
b = [
{
p0 = "j"
p1 = "test-1"
p2 = 1
},
{
p0 = "k"
p1 = "test-3"
p2 = 0
}
]
}
}
locals {
y = {
a-j {
p0 = "j"
p1 = "test-1"
p2 = 0
}
a-k {
p0 = "k"
p1 = "test-2"
p2 = 0
}
b-j {
p0 = "j"
p1 = "test-1"
p2 = 1
}
b-k {
p0 = "k"
p1 = "test-3"
p2 = 0
}
}
}
我想做的是使结构变平,但我不知道这在地形中是否可行。在我的例子中,我知道p0在它自己的数组中是唯一的,所以我应该能够为每个记录构造唯一的键。我期望的输出如下:
locals {
x = {
a = [
{
p0 = "j"
p1 = "test-1"
p2 = 0
},
{
p0 = "k"
p1 = "test-2"
p2 = 0
}
]
b = [
{
p0 = "j"
p1 = "test-1"
p2 = 1
},
{
p0 = "k"
p1 = "test-3"
p2 = 0
}
]
}
}
locals {
y = {
a-j {
p0 = "j"
p1 = "test-1"
p2 = 0
}
a-k {
p0 = "k"
p1 = "test-2"
p2 = 0
}
b-j {
p0 = "j"
p1 = "test-1"
p2 = 1
}
b-k {
p0 = "k"
p1 = "test-3"
p2 = 0
}
}
}
我通过将所有内容转换为列表、将其展平并使用count来实现这一点,但我希望保留这些键,以防以后顺序发生变化,从而防止不必要地删除资源。谢谢你的帮助 我认为以下几点应该满足您的要求:
locals {
x = {
a = [
{
p0 = "j"
p1 = "test-1"
p2 = 0
},
{
p0 = "k"
p1 = "test-2"
p2 = 0
}
]
b = [
{
p0 = "j"
p1 = "test-1"
p2 = 1
},
{
p0 = "k"
p1 = "test-3"
p2 = 0
}
]
}
flat = merge([
for k1, v1 in local.x:
{
for v2 in v1:
"${k1}-${v2.p0}" => v2
}
]...)
}
这将导致flat
为:
{
"a-j" = {
"p0" = "j"
"p1" = "test-1"
"p2" = 0
}
"a-k" = {
"p0" = "k"
"p1" = "test-2"
"p2" = 0
}
"b-j" = {
"p0" = "j"
"p1" = "test-1"
"p2" = 1
}
"b-k" = {
"p0" = "k"
"p1" = "test-3"
"p2" = 0
}
}
太好了,谢谢你的帮助