Terraform 地形从地图列表中输出地图值

Terraform 地形从地图列表中输出地图值,terraform,Terraform,我想从Terraform输出的地图列表中获取一个特定的地图元素 例如,如何在properties.json中访问每个映射项的account 并有条件地打印列表作为类型的输出 我尝试了循环和splat表达式,如下所示,但它没有返回准确的值 下面的道具似乎也是一个列表 output "resources_by_name" { description = "Resource name of all machine type resources from

我想从Terraform输出的地图列表中获取一个特定的地图元素

例如,如何在
properties.json
中访问每个映射项的
account
并有条件地打印列表作为
类型的输出

我尝试了
循环和
splat
表达式,如下所示,但它没有返回准确的值

下面的道具似乎也是一个列表

    output "resources_by_name" {
      description = "Resource name of all machine type resources from a vRA deployment"
      value = [
        for props in deployment.deploy[*].resources.*.properties_json:
        jsondecode(props).account
        if jsondecode(props).type == "vsphere"        
        ]
    }
我不知道如何使用嵌套for循环或访问列表中的映射项

properties.json

    [
      [
        {
          "id" = "b5336bf7-07fb-4026-aa3d-479bd974ca45"
          "name" = "test1"
          "properties_json" = "{"account":"test0","constraints":"anothertest4"}"
          "type" = "vsphere"
        },
        {
          "id" = "67a3380b-8008-4f9c-9c13-2a1a935d5820"
          "name" = "test2"
          "properties_json" = "{"account":"test1","constraints":"anothertest3"}"
          "type" = "gcp"
        },
      ],
      [
        {
          "id" = "eeddd127-cba2-4b34-a2d7-e56dda5d2974"
          "name" = "test3"
          "properties_json" = "{"account":"test2","constraints":"anothertest2"}"
          "type" = "aws"
        },
        {
          "id" = "81de1857-c0c9-4c9e-8fbd-d8a1da64fa3c"
          "name" = "test4"
          "properties_json" = "{"account":"test3","constraints":"anothertest1"}"
          "type" = "az"
        },
      ],
    ]

下面是工作的示例。我必须填写您问题中缺少的空格,因此您可能需要修改它以满足您的需要:

locals {
  properties =     [
      [
        {
          "id" = "b5336bf7-07fb-4026-aa3d-479bd974ca45"
          "name" = "test1"
          "properties_json" = "{\"account\":\"test0\",\"constraints\":\"anothertest4\"}"
          "type" = "vsphere"
        },
        {
          "id" = "67a3380b-8008-4f9c-9c13-2a1a935d5820"
          "name" = "test2"
          "properties_json" = "{\"account\":\"test1\",\"constraints\":\"anothertest3\"}"
          "type" = "gcp"
        },
      ],
      [
        {
          "id" = "eeddd127-cba2-4b34-a2d7-e56dda5d2974"
          "name" = "test3"
          "properties_json" = "{\"account\":\"test2\",\"constraints\":\"anothertest2\"}"
          "type" = "aws"
        },
        {
          "id" = "81de1857-c0c9-4c9e-8fbd-d8a1da64fa3c"
          "name" = "test4"
          "properties_json" = "{\"account\":\"test3\",\"constraints\":\"anothertest1\"}"
          "type" = "az"
        },
      ],
    ]
}

output "resources_by_name" {
  value = [for props in flatten(local.properties):
           jsondecode(props.properties_json).account 
             if props.type == "vsphere"   
          ]
}
结果:

resources_by_name = [
  "test0",
]

下面是工作的示例。我必须填写您问题中缺少的空格,因此您可能需要修改它以满足您的需要:

locals {
  properties =     [
      [
        {
          "id" = "b5336bf7-07fb-4026-aa3d-479bd974ca45"
          "name" = "test1"
          "properties_json" = "{\"account\":\"test0\",\"constraints\":\"anothertest4\"}"
          "type" = "vsphere"
        },
        {
          "id" = "67a3380b-8008-4f9c-9c13-2a1a935d5820"
          "name" = "test2"
          "properties_json" = "{\"account\":\"test1\",\"constraints\":\"anothertest3\"}"
          "type" = "gcp"
        },
      ],
      [
        {
          "id" = "eeddd127-cba2-4b34-a2d7-e56dda5d2974"
          "name" = "test3"
          "properties_json" = "{\"account\":\"test2\",\"constraints\":\"anothertest2\"}"
          "type" = "aws"
        },
        {
          "id" = "81de1857-c0c9-4c9e-8fbd-d8a1da64fa3c"
          "name" = "test4"
          "properties_json" = "{\"account\":\"test3\",\"constraints\":\"anothertest1\"}"
          "type" = "az"
        },
      ],
    ]
}

output "resources_by_name" {
  value = [for props in flatten(local.properties):
           jsondecode(props.properties_json).account 
             if props.type == "vsphere"   
          ]
}
结果:

resources_by_name = [
  "test0",
]

您的
properties.json
不是有效的json。您是否可以再次检查此项或提供有效的示例?现在更新。应该可以。您的
properties.json
不是有效的json。您是否可以再次检查此项或提供有效的示例?现在更新。这应该可以。