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

Terraform如何使用嵌套for循环处理YAML数据实现for_each遍历

实现方案

你可以通过嵌套for循环先将YAML中的数据结构化处理为符合for_each要求的扁平Map格式,每个键对应唯一员工,值为你需要的details转换后的KV数组结构。

步骤1:处理YAML数据到目标结构

修改你的locals配置如下:

locals {
  ou_config = yamldecode(file("employees.yaml"))

  # 生成可直接用于for_each的Map,键为员工name(全局唯一),值为要求的details KV数组
  employee_detail_map = merge([
    # 第一层遍历Department数组
    for dept_item in local.ou_config.Employees[0].Department : {
      # 第二层遍历部门(Dev/Ops)键值对
      for dept_name, emp_list in dept_item : {
        # 第三层遍历单个部门下的所有员工
        for emp in emp_list : emp.name => [
          # 转换员工details为要求的KV对象数组
          for k, v in emp.details : {
            key = k
            value = v
          }
        ]
      }
    }
  ]...) # 展开数组后用merge合并为单级Map
}

如果存在不同部门员工重名的情况,可将上述代码中的键emp.name替换为"${dept_name}_${emp.name}"保证全局唯一。

步骤2:在for_each中使用处理后的数据

直接将上述local.employee_detail_map作为for_each的输入即可,每个迭代的each.value就是你需要的结构:

# 示例资源,替换为你实际使用的资源类型
resource "example_resource" "emp_attr" {
  for_each = local.employee_detail_map

  # 假设资源需要动态配置属性,用dynamic块遍历each.value
  dynamic "attribute" {
    for_each = each.value
    content {
      key   = attribute.value.key
      value = attribute.value.value
    }
  }
}

遍历顺序会按照员工在YAML中的顺序排列:第一位是danielf的details数组、第二位是johnb的details数组,后续依次是benol、pauld的对应结构。


内容的提问来源于stack exchange,提问作者Dani Wol.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:06