遍历包含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 }

}