Terraform 连接子列表
Terraform concatenate sublists
我想从对象列表的子列表中获取组合列表。
我有一个像这样的列表对象:
users: [
{
name: "a"
cars: [
"z1",
"z2"
]
},
{
name: "b"
cars: [
"x1",
"x2"
]
}
]
结果应该是:
cars = ["z1", "z2", "x1", "x2"]
主要原因是我需要在每个元素上执行resource:
resource "some_resource" "some_resource_name" {
for_each = var.cars
car_name = each.value
}
要是能直接在资源里做就完美了。或者,如果我需要在本地人中预先构建列表,那也不是问题。
我该怎么做?
local {
cars = flatten([
for user, cars in var.users : [
for car in cars: {
user = user
car = car
}
]
])
}
不会产生完美的结果,但它是一个可行的解决方案
结果将是:
[
{
user = "a",
car = "z1"
},
{
user = "a",
car = "z2"
},
{
user = "b",
car = "x1"
},
{
user = "b",
car = "x2"
}
]
这可以通过组合 splat
expression with flatten
函数轻松实现:
locals {
cars = flatten([
var.users[*].cars
])
}
其他解决方案是使用 for
表达式:
locals {
cars = flatten([
for user in var.users: user.cars
])
}
在这两种情况下 cars
的结果将是:
cars = [
"z1",
"z2",
"x1",
"x2",
]
我想从对象列表的子列表中获取组合列表。
我有一个像这样的列表对象:
users: [
{
name: "a"
cars: [
"z1",
"z2"
]
},
{
name: "b"
cars: [
"x1",
"x2"
]
}
]
结果应该是:
cars = ["z1", "z2", "x1", "x2"]
主要原因是我需要在每个元素上执行resource:
resource "some_resource" "some_resource_name" {
for_each = var.cars
car_name = each.value
}
要是能直接在资源里做就完美了。或者,如果我需要在本地人中预先构建列表,那也不是问题。 我该怎么做?
local {
cars = flatten([
for user, cars in var.users : [
for car in cars: {
user = user
car = car
}
]
])
}
不会产生完美的结果,但它是一个可行的解决方案 结果将是:
[
{
user = "a",
car = "z1"
},
{
user = "a",
car = "z2"
},
{
user = "b",
car = "x1"
},
{
user = "b",
car = "x2"
}
]
这可以通过组合 splat
expression with flatten
函数轻松实现:
locals {
cars = flatten([
var.users[*].cars
])
}
其他解决方案是使用 for
表达式:
locals {
cars = flatten([
for user in var.users: user.cars
])
}
在这两种情况下 cars
的结果将是:
cars = [
"z1",
"z2",
"x1",
"x2",
]