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
相关产品推荐
相关产品推荐

