Предоставление Teams в GitHub с использованием Terraform — иерархия команд

Я пытаюсь использовать поставщика github terraform, чтобы упростить управление командами в нашей организации GitHub. Чтобы уменьшить количество изменений в коде Terraform, я хотел использовать такое решение, как https://learn.hashicorp.com/tutorials/terraform/github-user-teams , где участникам нужно было бы только изменить значения в файле csv.

Пример не включает решение, позволяющее командам быть членами команд. Глядя на документацию поставщика https://registry.terraform.io/providers/integrations/github/latest/docs/resources/team , требуется указать parent_team_id .

Мой текущий подход состоит в том, чтобы иметь два файла CSV, один с именем родительской команды и один без него, и построить локальное сопоставление. Проблема в том, что когда я подаю заявку, я получаю сообщение об ошибке

Значение «for_each» зависит от атрибутов ресурсов, которые нельзя определить до применения, поэтому Terraform не может предсказать, сколько экземпляров будет создано. Чтобы обойти это, используйте аргумент -target, чтобы сначала применить только те ресурсы, от которых зависит for_each.

Может кто-нибудь указать, где я ошибаюсь, это будет что-то простое, но я не вижу, что.

ПРИМЕЧАНИЕ. Я знаю (после публикации), что на самом деле я не использую parent_team_id во втором командном ресурсе, это простое исправление, когда я получаю локальную работу.

Ресурсы

      resource "github_team" "l0" {
  for_each = {
    for team in csvdecode(file("teams.csv")) :
    team.name => team
  }

  name                      = each.value.name
  description               = each.value.description
  privacy                   = each.value.privacy
  create_default_maintainer = true
}

resource "github_team" "l1" {
  for_each = {
    for team in local.l1_mapping : team.name => team
  }

  name                      = each.value.name
  description               = each.value.description
  privacy                   = each.value.privacy
  create_default_maintainer = true
  depends_on = [
    github_team.l0
  ]
}

Местные жители

      # Create local values to retrieve items from CSVs
locals {

  l1_team_plus = {
      for file2 in csvdecode(file("l1_teams.csv")) :
      file2.name => file2
  }

  l1_mapping = flatten([
    for team2 in local.l1_team_plus : [
      for t in github_team.l0 : {
        id      = t.id
        slug    = t.slug
        team2 = team2
      } if t.slug == team2.name
    ]
  ])

}

0 ответов

Другие вопросы по тегам