Terraform实现包含object_id与display_name的AD组变量
解决方案
问题出在你误用了azuread_groups数据源的顶层属性(display_names/object_ids),实际上该数据源和azuread_users一样,提供了groups列表字段,每个元素包含完整的组对象属性(包括object_id、display_name等)。
1. 正确使用azuread_groups数据源的groups属性
数据源配置无需修改,但要改用groups字段来获取完整的组信息:
data "azuread_groups" "allowed_groups" { display_names = var.ad_groups_displaynames security_enabled = true }
2. 构建包含双属性的本地变量(可选)
如果需要整理成特定结构(比如以组名作为键的映射),可以这样定义本地变量:
locals { ad_groups = { for group in data.azuread_groups.allowed_groups.groups : group.display_name => { object_id = group.object_id display_name = group.display_name } } }
如果不需要额外整理,也可以直接使用data.azuread_groups.allowed_groups.groups这个列表,无需定义本地变量。
3. 在动态块中循环使用
无论是用本地变量还是直接用数据源的groups列表,都可以像用户场景那样在动态块中使用:
# 使用本地变量的情况 dynamic "allowed_adgroups" { for_each = local.ad_groups content { id = allowed_adgroups.value.object_id description = allowed_adgroups.value.display_name } } # 直接使用数据源groups列表的情况(数组遍历) dynamic "allowed_adgroups" { for_each = data.azuread_groups.allowed_groups.groups content { id = allowed_adgroups.value.object_id description = allowed_adgroups.value.display_name } }
为什么之前的尝试失败?
你之前遍历的是data.azuread_groups.allowed_groups.display_names,这是一个字符串列表,每个元素只是组名,自然没有object_id属性。而groups字段返回的是对象列表,每个对象包含该组的所有属性,这才是和azuread_users的users字段对应的结构。
内容的提问来源于stack exchange,提问作者kr0me
相关产品推荐
相关产品推荐

