[英]Terraform: Convert a list of maps into a revised list of maps
我的输入是:
input = [
{
x = "X1"
y = "Y1"
},
{
x = "X2"
y = "Y2"
},
{
x = "X3"
y = "Y3"
},
]
我想要的 output 是:
output = [
{
val = "X1",
description = "This is a value of X"
},
{
val = "Y1",
description = "This is a value of Y"
},
{
val = "X2",
description = "This is a value of X"
},
{
val = "Y2",
description = "This is a value of Y"
},
{
val = "X3",
description = "This is a value of X"
},
{
val = "Y3",
description = "This is a value of Y"
},
]
如何在 Terraform 中实现这一点?
为此,我能够在 terraform 中使用flatten()
function :
flatten([
for a_map in var.input : [
{ val = a_map.x, description = "This is a value of X" },
{ val = a_map.y, description = "This is a value of Y" },
]
])
这种方法的一个优点是它将保持值的顺序。
所以 output 将是:
[
{
"description" = "This is a value of X"
"val" = "X1"
},
{
"description" = "This is a value of Y"
"val" = "Y1"
},
{
"description" = "This is a value of X"
"val" = "X2"
},
{
"description" = "This is a value of Y"
"val" = "Y2"
},
{
"description" = "This is a value of X"
"val" = "X3"
},
{
"description" = "This is a value of Y"
"val" = "Y3"
},
]
下面产生这样的 output:
variable "input" {
default = [
{
x = "X1"
y = "Y1"
},
{
x = "X2"
y = "Y2"
},
{
x = "X3"
y = "Y3"
},
]
}
locals {
part1 = [for v in var.input:
{
"val" = v.x,
"description" = "This is a value of X"
}]
part2 = [for v in var.input:
{
"val" = v.y,
"description" = "This is a value of Y"
}]
}
output "output" {
value = concat(local.part1, local.part2)
}
我的测试中的 output:
utput = [
{
"description" = "This is a value of X"
"val" = "X1"
},
{
"description" = "This is a value of X"
"val" = "X2"
},
{
"description" = "This is a value of X"
"val" = "X3"
},
{
"description" = "This is a value of Y"
"val" = "Y1"
},
{
"description" = "This is a value of Y"
"val" = "Y2"
},
{
"description" = "This is a value of Y"
"val" = "Y3"
},
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.