Terraform for_each 循环遍历列表

问题描述 投票:0回答:1

帮助理解此 Terraform 循环行为。

我正在使用 Terraform Active Directory Provider 创建组、用户和组成员资格,我正在测试创建 2 个用户和 2 个组并将用户分配到组。这是我的代码:

用户:

resource "ad_user" "user1" {
  principal_name   = "user1"
  .
  .
}

output "user1_id" {
  value = ad_user.user1.id
}

团体:

resource "ad_group" "group1" {
  name             = "group1"
  .
  .
}

variable "group1" {}

output "group1_id" {
  value = ad_group.group1.id
}

resource "ad_group_membership" "group1" {
    for_each = toset(var.group1)
    group_id = ad_group.group1.id
    group_members = [ each.value ]
}

模块:

module "groups" {
  source = ".//modules/groups"

  group1 =  [
    module.users.user1_id,
    module.users.user2_id
  ]
}

我看到的行为是在应用时,它第一次创建并分配给我的 var.group1 中的所有用户 Id,但是如果我再次应用只是为了查看一切是否完成,它会向我显示要删除的分配的更改分配,下一个应用是将其再次分配回来,依此类推。

可能是因为我正在迭代列表,并且必须将这些值更改为地图,但不确定。

谢谢!

foreach terraform active-directory
1个回答
0
投票

基于开放问题#94

这是提供程序中的错误。

与此同时,我必须尝试所描述的解决方法,这解决了我的问题。

    # Create a variable to hold usernames
variable "users" {
  type = list
  default = ["user_name_1","user_name_2"]
}

# Get Group id
data "ad_group" "service_group" {
  group_id = "CN=TestGroup,OU=TestOU,DC=ad,DC=mydomain,DC=tld"
}

# loop through users and get there data
data "ad_user" "user_data" {
  for_each = toset(var.users)
    user_id = each.value
}
# create a local that holds all of the id's
locals {
  add_users = toset([for k, v in data.ad_user.user_data : v.id])
}
# use that list of ID's to add members to a group
resource "ad_group_membership" "app_group_members" {
  group_id = data.ad_group.service_group_app.id
  group_members = local.add_users
}
output "user_id" {
  value = toset([for k, bd in data.ad_user.user_data : bd.id])
}
© www.soinside.com 2019 - 2024. All rights reserved.