Reputation: 13
I am working module creation for AD Group and Group assignments and need help with assigning the group_ids with other member_ids where both values are passed inside the module.
In environment: var.tf
variable "azuread_group_name" {
type = map(object({
display_name = string
description = string
}))
default = {
"Group1" = {
display_name = "Group1"
description = ""
}
"Group2" = {
display_name = "Group2"
description = ""
}
"Group3" = {
display_name = "Group3"
description = "Desc of group 3"
}
"Group4" = {
display_name = "Group4"
description = "Desc of group 4"
}
"Group5" = {
display_name = "Group5"
description = "Desc of group5"
}
}
}
In module: main.tf
resource "azuread_group" "azuread_group_name" {
for_each = var.azuread_group_name
display_name = each.value.display_name
description = each.value.description
}
#Need help here to get values back
resource "azuread_group_member" "example" {
for_each: something to loop through local.project
group_object_id = read each value of azuread_group_object_id
member_object_id = read each value of azuread_member_object_id
}
Saving the output of the each Group created above: output.tf
output adgroup_id {
value = azuread_group.azuread_group_name
}
Able to read the output values of each object id but struggling with group assignment in module/main.tf:
resource "azuread_group_member" "example" {
group_object_id = azuread_group.example.id
member_object_id = data.azuread_user.example.id
}
Basically: I will have a list something like this in local.tf:
project = {
first = {
"azuread_group_object_id" = [
module.main.adgroup_id["Group1"].id
],
"azuread_member_object_id" = [
module.main.adgroup_id["Group2"].id,
module.main.adgroup_id["Group3"].id,
module.main.adgroup_id["Group4"].id,
]
}
second = {
"azuread_group_object_id" = [
module.main.adgroup_id["Group2"].id,
module.main.adgroup_id["Group3"].id,
],
"azuread_member_object_id" = [
module.main.adgroup_id["Group4"].id
module.main.adgroup_id["Group5"].id
]
}
}
And need to pass individual id so it could assign group_object_id with member_object_id Example: Take all possible options in first and then all possible option in second.
For First:
1. group_object_id -> module.main.adgroup_id["Group1"].id
member_object_id -> module.main.adgroup_id["Group2"].id
2. group_object_id -> module.main.adgroup_id["Group1"].id
member_object_id -> module.main.adgroup_id["Group3"].id
3. group_object_id -> module.main.adgroup_id["Group1"].id
member_object_id -> module.main.adgroup_id["Group4"].id
For Second:
4. group_object_id -> module.main.adgroup_id["Group2"].id
member_object_id -> module.main.adgroup_id["Group4"].id
5. group_object_id -> module.main.adgroup_id["Group2"].id
member_object_id -> module.main.adgroup_id["Group5"].id
6. group_object_id -> module.main.adgroup_id["Group3"].id
member_object_id -> module.main.adgroup_id["Group4"].id
7. group_object_id -> module.main.adgroup_id["Group3"].id
member_object_id -> module.main.adgroup_id["Group5"].id
Could someone help please
Upvotes: 1
Views: 2607
Reputation: 238847
You can do this as follows (I made your module variables strings, so that I can run the code):
locals {
project = {
first = {
"azuread_group_object_id" = [
"module.main.adgroup_id[Group1].id"
],
"azuread_member_object_id" = [
"module.main.adgroup_id[Group2].id",
"module.main.adgroup_id[Group3].id",
"module.main.adgroup_id[Group4].id"
]
}
second = {
"azuread_group_object_id" = [
"module.main.adgroup_id[Group2].id",
"module.main.adgroup_id[Group3].id",
],
"azuread_member_object_id" = [
"module.main.adgroup_id[Group4].id",
"module.main.adgroup_id[Group5].id"
]
}
}
reshaped = {
for k,v in local.project:
k => setproduct(v["azuread_group_object_id"], v["azuread_member_object_id"])
}
}
output "test" {
value = local.reshaped
}
gives:
test = {
"first" = tolist([
[
"module.main.adgroup_id[Group1].id",
"module.main.adgroup_id[Group2].id",
],
[
"module.main.adgroup_id[Group1].id",
"module.main.adgroup_id[Group3].id",
],
[
"module.main.adgroup_id[Group1].id",
"module.main.adgroup_id[Group4].id",
],
])
"second" = tolist([
[
"module.main.adgroup_id[Group2].id",
"module.main.adgroup_id[Group4].id",
],
[
"module.main.adgroup_id[Group2].id",
"module.main.adgroup_id[Group5].id",
],
[
"module.main.adgroup_id[Group3].id",
"module.main.adgroup_id[Group4].id",
],
[
"module.main.adgroup_id[Group3].id",
"module.main.adgroup_id[Group5].id",
],
])
}
Or if you want to concatenate everything (dots are important, don't remove them):
output "test" {
value = concat(values(local.reshaped)...)
}
which gives:
test = tolist([
[
"module.main.adgroup_id[Group1].id",
"module.main.adgroup_id[Group2].id",
],
[
"module.main.adgroup_id[Group1].id",
"module.main.adgroup_id[Group3].id",
],
[
"module.main.adgroup_id[Group1].id",
"module.main.adgroup_id[Group4].id",
],
[
"module.main.adgroup_id[Group2].id",
"module.main.adgroup_id[Group4].id",
],
[
"module.main.adgroup_id[Group2].id",
"module.main.adgroup_id[Group5].id",
],
[
"module.main.adgroup_id[Group3].id",
"module.main.adgroup_id[Group4].id",
],
[
"module.main.adgroup_id[Group3].id",
"module.main.adgroup_id[Group5].id",
],
])
Upvotes: 2