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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:30:34