Terraform .12 вложенный цикл

#terraform #terraform0.12

#terraform #terraform0.12

Вопрос:

variables.tf

 variable "teams" {
  type        = map(any)
  default     = {}
}
  

входное значение:

 teams = {
    {
      team_id    = "abc"
      role_names = ["owner"]
    },
    {
      team_id    = "bcd"
      role_names = ["read", "write"]
    }
  }
}
  

main.tf:

 resource "mongodbatlas_project" "project" {
  name   = "testing"
  org_id = "123456"
    dynamic "teams" {
        for_each = var.teams
    
        content {
          id    = teams.value.team_id
          names = [teams.value.role_names]
        }
      }
}
  

Я пробовал приведенный выше код, и он не работает. Есть ли более простой способ присвоить переменной значение вложенной команды?

Ответ №1:

teams Переменная не кажется мне правильной, и есть синтаксические ошибки (например, extra } в teams ). Я думаю, что это должно быть list , а не map :

 variable "teams" {
  type        = list(any)
  default     = []
}
  

и затем

 teams = [
    {
      team_id    = "abc"
      role_names = ["owner"]
    },
    {
      team_id    = "bcd"
      role_names = ["read", "write"]
    }
  ]
  

Тогда ваш ресурс может быть:

 resource "mongodbatlas_project" "project" {

  name   = "testing"
  org_id = "123456"

  dynamic "teams" {
    for_each = toset(var.teams)
    
    content {
       id    = teams.value.team_id
       names = teams.value.role_names
    }
 }

}
  

При использовании динамических блоков итератор вызывается так же, как имя блока.