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

Terraform配置:为Azure AD组添加CSV中的自定义描述

解决Terraform从CSV读取组描述创建Azure AD组的问题

你当前的问题出在本地变量只提取了组名字段,生成的是纯字符串数组,导致for_each遍历的时候只能拿到组名字符串,自然没有description属性可以调用。要解决这个问题,需要调整本地变量的定义,保留CSV中每条记录的完整信息,或者将其转换为以组名为键、描述为值的映射表。

方案一:使用映射表(Map)存储组名与描述

修改本地变量,直接将CSV数据转换为键值对结构,键是组名,值是对应的描述:

locals {
  # 将CSV数据转换为map,键为droits_groups,值为description
  Right_Groups_Map = { for g in csvdecode(file("${path.module}/_RightGroups.csv")) : g.droits_groups => g.description }
}

然后修改Azure AD组的资源定义,遍历这个映射表:

resource "azuread_group" "Terra-Aad-Group-Right" {
  # 遍历映射表,each.key是组名,each.value是描述
  for_each = local.Right_Groups_Map

  display_name     = lower(each.key)
  security_enabled = true
  description      = each.value # 直接取映射表中的描述值
}

方案二:保留完整的CSV记录对象

如果需要保留每条记录的所有字段(比如后续可能用到其他字段),可以直接存储CSV的原始解析结果,再通过for表达式构建用于for_each的映射:

locals {
  # 保留CSV的完整解析结果
  Right_Groups = csvdecode(file("${path.module}/_RightGroups.csv"))
}

资源定义调整为:

resource "azuread_group" "Terra-Aad-Group-Right" {
  # 以组名为键,映射到完整的记录对象
  for_each = { for g in local.Right_Groups : g.droits_groups => g }

  display_name     = lower(each.key)
  security_enabled = true
  description      = each.value.description # 从对象中提取描述字段
}

为什么原代码失败?

原本地变量Right_Groups是通过[for x in csvdecode(...) : x.droits_groups]生成的字符串数组,使用toset转换后,each.value只是单个组名字符串,而非包含description属性的对象,因此调用each.value.description会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:39:26