地图列表中的terraform输出地图值

时间:2020-08-27 18:13:45

标签: terraform

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

例如,对于每个地图项,我将如何访问account中的properties.json 并同时有条件地为type打印一个列表作为输出。

我尝试了for循环和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"        
        ]
    }

我不确定如何使用嵌套循环或访问列表中的地图项。

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"
        },
      ],
    ]

1 个答案:

答案 0 :(得分:0)

这是有效示例。我必须填写您的问题中遗漏的空格,因此您可能需要对其进行修改以适合您的需求:

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",
]