#azure #azure-active-directory #terraform #terraform-provider-azure
Вопрос:
Я никоим образом не эксперт по терраформированию, так что это может быть технически невозможно.
Мой вариант использования: у меня есть файловая система adls gen2, и мне нужно создать каталоги в этой файловой системе. Каталоги, очевидно, будут иметь короткое имя, и к каждому из них должен быть применен блок ace (acl). Я хочу каким-то образом связать имя каталога с группой azure ad, где я могу затем выполнить поиск группы с помощью источника данных azuread_group и получить идентификатор объекта группы, чтобы применить его к новому каталогу.
Я попытаюсь описать, что я пытаюсь сделать:
dir_group_assoc = {
"folder_name_1": "Azure AD Group 1",
"folder_name_2": "Azure AD Group 2"
}
data "azuread_group" "group-name" {
display_name = "Azure AD Group *" <-- replaced with the value from above K/V pair.
}
resource "azurerm_storage_data_lake_gen2_path" "sftp-root-subdirs" {
for_each = toset(["keys from K/V pair above"])
path = each.key
filesystem_name = azurerm_storage_data_lake_gen2_filesystem.sftp-root.name
storage_account_id = azurerm_storage_account.working-storage_account.id
resource = "directory"
ace {
scope = "access"
type = "group"
permissions = "rwx"
id = data.azurerm_client_config.current_client_config.object_id["value from K/V pair above"]
}
}
Я не знаю, как лучше всего, если вообще можно так поступить. Я бы хотел получить несколько предложений.
Ответ №1:
Вот что я, наконец, придумал, что, похоже, работает. Я открыт для предложений, если это не лучший метод, но он привел меня туда, где я должен был быть.
variable "folder-ad-group" {
type = map(string)
default = {
"folder_name_1" = "Azure AD Group 1",
"folder_name_2" = "Azure AD Group 2"
}
}
data "azuread_group" "ad-group-lookup" {
for_each = var.folder-ad-group
display_name = lookup(var.folder-ad-group, each.key)
}
resource "azurerm_storage_data_lake_gen2_filesystem" "data-lake-sftp-path" {
for_each = data.azuread_group.ad-group-lookup
name = each.key
storage_account_id = azurerm_storage_account.working-storage_account.id
ace {
scope = "access"
type = "group"
id = lookup(data.azuread_group.ad-group-lookup, each.key).object_id
permissions = "rwx"
}
}
И мой результат был именно таким, как вы и ожидали. Блоки ТУЗА выглядели так:
# azurerm_storage_data_lake_gen2_filesystem.data-lake-sftp-path["folder_name_1"] will be created
resource "azurerm_storage_data_lake_gen2_filesystem" "data-lake-sftp-path" {
id = (known after apply)
name = "folder_name_1"
storage_account_id = "super subscription"
ace {
id = "object_id_of_azure_ad_group_1"
permissions = "rwx"
scope = "access"
type = "group"
}
}
# azurerm_storage_data_lake_gen2_filesystem.data-lake-sftp-path["folder_name_2"] will be created
resource "azurerm_storage_data_lake_gen2_filesystem" "data-lake-sftp-path" {
id = (known after apply)
name = "folder_name_2"
storage_account_id = "super subscription"
ace {
id = "object_id_of_azure_ad_group_2"
permissions = "rwx"
scope = "access"
type = "group"
}
}