帮助理解此 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,但是如果我再次应用只是为了查看一切是否完成,它会向我显示要删除的分配的更改分配,下一个应用是将其再次分配回来,依此类推。
可能是因为我正在迭代列表,并且必须将这些值更改为地图,但不确定。
谢谢!
基于开放问题#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])
}