MoS*_*ikh 2 terraform devops terraform-provider-gcp
我目前有一个 terraform 对象声明如下:
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
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是压平结构,但我不知道这在地形中是否可行。就我而言,我知道 p0 在其自己的数组中将是唯一的,因此我应该能够为每个记录构造唯一的键。我想要的输出如下:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我通过将所有内容转换为列表、展平它并使用计数来实现此目的,但我想保留键,以防顺序稍后发生变化,以防止不必要地删除资源。感谢您的帮助!
我认为以下内容应该满足您的要求:
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
}
]...)
}
Run Code Online (Sandbox Code Playgroud)
这将导致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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7780 次 |
| 最近记录: |