Terraform locals - 将地图列表转换为对象地图

问题描述 投票:0回答:1

我想知道是否有人可以帮我处理一些地形数据 :) 我正在查询一个 API,一旦我通过 jsonencode 传递它,就会得到这样的响应:


api_response = [
    {
        description   = "vnet-01"
        site = {
          id      = 24
          name    = "Azure - northeu"
        }
        id            = 2291
        prefix        = "10.10.160.0/24"
    },
    {
        description   = "vnet-01"
        site = {
          id      = 24
          name    = "Azure - northeu"
        }
        id            = 2311
        prefix        = "10.10.161.0/24"
    },
    {
        description   = "vnet-02"
        site = {
          id      = 24
          name    = "Azure - westeu"
        }
        id            = 2310
        prefix        = "10.20.168.0/21"
    },
]

所以基本上,我得到一个列表(地图(对象))。

我在这里真正想做的是获取 API 响应并将其解析为更易于处理的本地数据,因为我将使用这些数据来创建资源并进行进一步的 API 调用。我基本上想创建类似下面这种地图(对象)格式的东西:

prefix_info = {
  "vnet-01" = {
      address_space = ["10.180.160.0/24","10.180.161.0/24"]
      site_name     = "Azure - northeu"
  }
  "vnet-02" = {
      address_space = ["10.180.168.0/21"]
      site_name     = "Azure - westeu"
  }
}

拥有单个对象映射会更好,但如果有必要,可以将其拆分为多个本地对象(例如,我不知道,但在前缀列表中添加一个新前缀可能是一个挑战,同时还要保持网站一致?)

我已经阅读了有关 for_each / dynamics 等的各种内容,并且之前在创建资源时也使用过它们,但是在尝试分配本地人时(至少据我所知),这些结构对我来说并不真正可用。

loops for-loop terraform local-variables
1个回答
0
投票
locals {
  prefix_info = {for response in local.api_response: response["description"] => { "address_space": [response["prefix"]], "site_name": response["site"]["name"] }}

}
© www.soinside.com 2019 - 2024. All rights reserved.