首页 > 解决方案 > Terraform 'for in' 以展平嵌套地图结构

问题描述

我有一些用于以嵌套方式管理我们的 gitlab 子组的 terraform 代码。我得到的输出如下所示,在当地人中,并且想将其展平。所有键名都是唯一的,并且在每个 sub_group 级别可能有 1 个或多个映射。

基本上我有这样的东西:

locals {
  groups = {
    group1 = {
      id = 1
      sub_group_1 = {
        group2 = {
          id = 2
        }
        group3 = {
          id = 3
          sub_group_2 = {
            group4 = {
              id = 4
              sub_group_3 = {
                group5 = {
                  id = 5
                  sub_group_4 = {
                    group6 = {
                      id = 6
                      sub_group_5 = {
                        group7 = {
                          id = 7
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

for in嵌套时,我仍在努力获取该方法。这是我到目前为止所拥有的,但它不起作用。

output "Test" {
  value = {
    for k1, v1 in local.test.groups : {
      for k2, v2 in v1.sub_group_1 : {
        for k3, v3 in v2.sub_group_2 : {
          for k4, v4 in v3.sub_group_3 : {
            for k5, v5 in v4.sub_group_4 : {
              for k6, v6 in v5.sub_group_5 : {
                k6 => v6.id
              }
            }
          }
        }
      }
    }
  }
}

我想让它看起来像这样:

groups = {
  group1 = 1
  group2 = 2
  group3 = 3
  group4 = 4
  group5 = 5
  group6 = 6
  group7 = 7
}

然后我可以很容易地添加 gitlab 项目并让用户传入 group_name,我可以提取 gitlab_project 资源所需的 ID。

目前,我们有两个步骤来创建组,然后用户从 gitlab 站点手动获取 ID 并使用组 ID 配置项目。

这是我得到的错误:

Error: Missing key/value separator 

on main.tf line 63, in output "Test":
62:               for k6, v6 in v5["sub_group_5"] : {
63:                 k6 => v6

Expected an equals sign ("=") to mark the beginning of the attribute value.

标签: terraform

解决方案


推荐阅读