在 terraform locals 中解析 json

Parsing json in terraform locals

我还有一个关于 JSON 解析的问题。想象一下我有这个 JSON:

{
    "all_dogs" :[
        {
            "name": "foo", 
            "groups": ["morning", "evening"]
        }, 
        {
            "name": "bar",
            "groups": ["evening", "saturday"]
        }, 
        {
            "name": "feet", 
            "groups": ["afternoon"]
        }
    ]
}

我可以像这样提取所有组:

locals {
  all_dogs = jsondecode(file("${path.module}/dogs.json"))

  all_groups = toset(flatten(local.all_dogs.all_dogs[*].groups))
}

现在,我正在尝试创建 MAP。每个组都是地图的键,地图的值是该组中的不同狗。 所以我想创建一个这样的地图:

afternoon = [feet] evening= [foo, bar] morning= [foo] saturday= [bar]

我正在尝试类似的东西,我尝试了几个选项...但我无法让它工作。

output "ex" {
  value = flatten([
    for group in local.all_groups: [
      for dog in local.all_dogs : {
        group = group 
        dog = dog 
      }
    ]
    ]
  )
}

稍后,我想使用该地图提供一些资源。这最终可能吗?

locals {
  all_dogs = jsondecode(file("${path.module}/dogs.json"))

  groups = flatten([for d in local.all_dogs.all_dogs : [for g in d.groups : { key : g, value : d.name }]])
}

local groups 的值将是一个元组列表,它看起来像这样:

groups = [
  {
    "key" = "morning"
    "value" = "foo"
  },
  {
    "key" = "evening"
    "value" = "foo"
  },
  {
    "key" = "evening"
    "value" = "bar"
  },
  {
    "key" = "saturday"
    "value" = "bar"
  },
  {
    "key" = "afternoon"
    "value" = "feet"
  },
]

现在我们必须从这个列表中创建一个 map:

output "my_map" {
  value = {
    for g in local.groups : g.key => g.value...
  }
}

这将产生以下输出:

my_map= {
  "afternoon" = [
    "feet",
  ]
  "evening" = [
    "foo",
    "bar",
  ]
  "morning" = [
    "foo",
  ]
  "saturday" = [
    "bar",
  ]