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

Terraform嵌套映射列表解析异常:仅生成group1资源怎么修复?

问题原因

你的var.team_namespace是嵌套结构:顶层以命名空间为键,值是该命名空间下的组列表。但模块调用时使用for_each = var.team_namespace,只会遍历两个命名空间条目,每个each.value对应一个组列表。此时each.value.group_name会默认取列表的第一个元素,导致每个命名空间只处理第一个组,最终只生成部分组的资源。

解决方案

需要先把嵌套结构扁平化,将每个「命名空间-组」的组合作为独立条目,再用这个扁平化后的集合作为for_each的遍历对象。

  1. 定义局部变量处理扁平化:
locals {
  flattened_team_policies = merge([
    # 外层遍历每个命名空间
    for namespace, groups in var.team_namespace : {
      # 内层遍历该命名空间下的每个组
      for group in groups :
      # 生成唯一键:命名空间-组名,避免重复
      "${namespace}-${group.group_name}" => {
        team_namespace = namespace
        group_name     = group.group_name
        team_policy    = group.team_policy
      }
    }
  ]...)
}
  1. 修改模块调用的for_each参数:
module "vault_policies" {
  for_each       = local.flattened_team_policies
  source         = "./../../modules/vault-policies"
  team_name      = each.value.group_name
  team_namespace = each.value.team_namespace
  team_policy    = file(format("./policies/%s", each.value.team_policy))
  depends_on     = [module.vault_namespace]
}

这样for_each会遍历所有4个组条目,每个组都会生成对应的模块资源,实现每个命名空间下多个AD组分配对应策略的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:08:10