#azure #terraform #terraform-provider-azure
Вопрос:
Я работаю над созданием модуля для групп объявлений и назначений групп, и мне нужна помощь в назначении идентификаторов групп с другими идентификаторами участников, где оба значения передаются внутри модуля.
В окружающей среде: 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"
}
}
}
В модуле:
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
}
Сохранение выходных данных каждой группы, созданной выше:
output.tf
output adgroup_id {
value = azuread_group.azuread_group_name
}
Способен считывать выходные значения каждого идентификатора объекта, но борется с назначением группы в модуле/main.tf:
resource "azuread_group_member" "example" {
group_object_id = azuread_group.example.id
member_object_id = data.azuread_user.example.id
}
В основном:
У меня будет список примерно такой в 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
]
}
}
И нужно передать индивидуальный идентификатор, чтобы он мог назначить идентификатор group_object_id с идентификатором member_object_id
Пример:
Возьмите все возможные варианты в первом, а затем все возможные варианты во втором.
Для Первого:
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
Для Второго:
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
Не мог бы кто-нибудь помочь, пожалуйста
Комментарии:
1. Теперь все ясно! Спасибо за помощь, Марчин!
Ответ №1:
Вы можете сделать это следующим образом (я сделал строки переменных вашего модуля строками, чтобы я мог запустить код):
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
}
дает:
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",
],
])
}
Или, если вы хотите объединить все (точки важны, не удаляйте их):
output "test" {
value = concat(values(local.reshaped)...)
}
что дает:
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",
],
])
Комментарии:
1. Спасибо! это помогло. Теперь я могу изменить порядок списка и использовать setproduct и смог получить ожидаемый результат