这是我的变量定义:
variable "assets" {
type = map(object({
car = object({
name = string
tires = list(string)
})
house = object({
rooms = list(object({
name = string
furnitures = list(string)
}))
})
}
如果我输入以下内容:
assets {
car = {
name = "bmw"
tires = ["1", "2", "3", "4"]
}
house = {
rooms = [
{
name = "living_room"
furnitures = ["chair, table"]
},
{
name = "bed_room"
furnitures = ["bed, pillow"]
}
]
}
}
在资源中,我遍历了资产值:
resource "test" "test" {
for_each = {
for asset in assets : asset.key => asset
}
}
我想将包含对象列表( each.value.house.rooms )的对象提取到以下两个列表(在资源中):
room_names = ["living_room", "bed_room"]
room_furnitures = [["chair","table"], ["bed", "pillow"]]
我能想到的伪代码应该是:
room_names = for room in each.value.house.rooms: room.name
room_furnitures = for room in each.value.house.rooms: room.furnitures
答案 0 :(得分:0)
不确定我是否正确理解了这个问题,但是您可以按照以下方式获得两个列表:
variable "house" {
default = {
rooms = [
{
name = "living_room"
furnitures = ["chair, table"]
},
{
name = "bed_room"
furnitures = ["bed, pillow"]
}
]
}
}
locals {
room_names = [for room in var.house.rooms : room["name"]]
room_furnitures = [for room in var.house.rooms : room["furnitures"]]
}
output "room_names" {
value = local.room_names
}
output "room_furnitures" {
value = local.room_furnitures
}
输出为:
oom_furnitures = [
[
"chair, table",
],
[
"bed, pillow",
],
]
room_names = [
"living_room",
"bed_room",
]
resource "test" "test" {
for_each = {for idx, room in local.room_names : idx => room }
}