Предоставление 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
]
])
}