Терраформ для каждого l oop или для l oop не работает - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь установить роль для azure реестра контейнеров для нескольких участников службы

variable "custom_role_list" {

  type        = list(object ({ service_principal_id = string, role = string }) )

} 

Когда я пытаюсь установить его из модуля ресурсов, я не уверен, что это правильный путь?

resource "azurerm_role_assignment" "ad_sp_role_assignment" {

  scope                = azurerm_container_registry.acr.id
  for_each = var.custom_role_list
  role_definition_name           = each.value.role
  principal_id = each.value.service_principal_id

}

По сути, я пытаюсь настроить реестр контейнера azure для работы с несколькими субъектами службы с указанными c ролями доступа.

Ниже приведено определение var.

custom_role_list = [
    {
        service_principal_id = aserviceprincipal.id
        role = "Contributor"
    },

    {
        service_principal_id = bserviceprincipal.id
        role = "Contributor"
    }


]

Когда я выполняю его, я получаю следующую ошибку.

Error: Invalid for_each argument

  on ../modules/az-acr/main.tf line 46, in resource "azurerm_role_assignment" "ad_sp_role_assignment":
  46:   for_each = var.custom_role_list

The given "for_each" argument value is unsuitable: the "for_each" argument
must be a map, or set of strings, and you have provided a value of type list
of object.

Пожалуйста, если кто-то может помочь, будет очень полезен. спасибо!

1 Ответ

1 голос
/ 31 марта 2020

Как показывает ошибка, for_each поддерживает карты и наборы только при использовании с ресурсом. Вы пытаетесь использовать список объектов.

Вместо этого, возможно, ваша переменная может быть просто типа map, где каждый принцип обслуживания является ключом, а его соответствующая роль - значением. Например:

variable "custom_role_list" {
  type        = map
}

Определение переменной:

custom_role_map = {
  aserviceprincipal.id = "Contributor"
  bserviceprincipal.id = "Contributor"
}

И, наконец, используйте for_each:

resource "azurerm_role_assignment" "ad_sp_role_assignment" {
  for_each = var.custom_role_map

  scope                    = azurerm_container_registry.acr.id
  role_definition_name     = each.value
  principal_id             = each.key
}

Вы можете найти этот пост в блоге , чтобы помочь вам с использованием циклов и условных выражений с Terraform.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...