You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Terraform中反转YAML节点关联生成成员-组映射是否可行?

实现成员与所属组的映射转换

问题描述

假设有如下YAML输入文件:

admins:
  members:
    - john@gmail.com
    - peter@gmail.com
viewers:
  members:
    - maria@gmail.com
    - john@gmail.com

该文件通过yamldecode解析后存入变量var.memberships,需要将其转换为以成员邮箱为键、对应所属组列表为值的结构,目标示例如下:

{
  "maria@gmail.com" = {
    groups = ["viewers"]
  },
  "john@gmail.com" = {
    groups = ["admins", "viewers"]
  },
  "peter@gmail.com" = {
    groups = ["admins"]
  }
}

解决方案

可以通过Terraform的for表达式结合merge函数实现该转换,具体代码如下:

1. 变量定义

首先定义存储解析后数据的变量:

variable "memberships" {
  type = map(object({
    members = list(string)
  }))
  description = "解析后的成员分组数据"
}

2. 转换逻辑

通过locals块实现转换:

locals {
  member_groups = merge([
    for group_name, group_data in var.memberships : {
      for member in group_data.members : member => {
        groups = concat(
          lookup(local.member_groups, member, { groups = [] }).groups,
          [group_name]
        )
      }
    }
  ]...)
}

3. 验证输出

可以通过output块查看转换结果:

output "member_groups" {
  value = local.member_groups
}

代码说明

  • 外层for循环遍历每个组(admins、viewers),获取组名和对应的成员列表
  • 内层for循环遍历当前组的每个成员,为成员构建包含所属组的对象
  • 使用merge函数将所有成员的分组信息合并为一个完整的映射,自动处理同一成员属于多个组的情况,将组名追加到groups列表中

内容的提问来源于stack exchange,提问作者pkaramol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:02:13