遍历包含Terraform中对象列表的对象
这是我的变量定义:遍历包含Terraform中对象列表的对象,terraform,Terraform,这是我的变量定义: variable "assets" { type = map(object({ car = object({ name = string tires = list(string) }) house = object({ rooms = list(object({ name = string furnitures = list(string) }))
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 = for room in each.value.house.rooms: room.name
room_furnitures = for room in each.value.house.rooms: room.furnitures
不确定我是否正确理解了这个问题,但您可以得到如下两个列表:
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",
]
在资源示例中
生成的
映射(列表(字符串))
是涉及单个资产
,还是聚合多个资产
?基于类型规范,我必须假设每个资产都有一个房屋
。是的,输出就是我需要的。但我们能在资源(而不是输出)中拥有它吗?@我添加了一个新的例子。如果可以,您可以检查它,因为我已经使用for_each值来迭代“assets”变量。所以我不能那样做。您可以看到我在问题中迭代“assets”变量的方式。我的问题是,在我遍历资源中的“资产”变量之后。我怎样才能遍历每个.value.house.rooms?我不知道什么是资产
。您还没有提供任何资产变量的示例。您列出的唯一内容是house
。您可以看到我的第一段代码,在“house”周围有一个变量“assets”
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 }
}