Как пропустить цикл for_each, если ключ не существует в terraform

Моя формулировка проблемы проста, но я не могу найти решение нигде в Интернете.

У меня есть список пользователей как:

      // users

locals {
  allUsers = {

    dev_user_1 = {
      Name   = "user1"
      Email  = "user1@abc.com"
      GitHub = "user1" # github username
      Team   = "Dev"
    }

    devops_user_2 = {
      Name   = "user2"
      Email  = "user2@abc.com"
      GitHub = "user2" # github username
      Team   = "DevOps"
    }

    product_user_3 = {
      Name   = "user3"
      Email  = "user3@abc.com"
      Team   = "Product"
    }
  }
}

Эти localтеги, которые используются для создания доступа к внутренним инструментам, таким как Github, инструменты мониторинга и т. д.

Теперь для 2 пользователей, принадлежащих Devа также DevOpsteam, им нужен доступ к Github ORG, в то время как пользователю продукта нужен доступ только к некоторым панелям, но не к Github, поэтому тег отсутствует.

Как я могу перебрать ресурс terraform github_membershipчтобы пропустить этого пользователя продукта (или просто любого, у кого нет тега GitHub?)

Я пытаюсь использовать следующий код, но не повезло

      // Send GitHub invite
resource "github_membership" "xyzTeam" {
  for_each = local.allUsers
  username = each.value.GitHub
  role     = "member"
}

Ошибки:

      ╷
│ Error: Unsupported attribute
│
│   on users.tf line 12, in resource "github_membership" "xyzTeam":
│   12:   username = each.value.GitHub
│     ├────────────────
│     │ each.value is object with 3 attributes
│
│ This object does not have an attribute named "GitHub".

Что я сделал, чтобы решить эту проблему?

  1. Установить GitHub keyдля всех, но это valueв качестве null. Ошибка:
      ╷
│ Error: "username": required field is not set
│
│   with github_membership.xyzTeam["user3"],
│   on users.tf line 10, in resource "github_membership" "xyzTeam":
│   10: resource "github_membership" "devops" {
│
╵
  1. Если я оставил значение пустым, ошибки:
      Error: PATCH https://api.github.com/user/memberships/orgs/XYZ: 422 You can only update an organization membership's state to 'active'. []
  1. for k, v in local.allUsers : k => v if v != ""Та же ошибка, потому что он пытается создать пользователя с пустым значением и в конечном итоге терпит неудачу.

Я не могу думать ни о чем другом. Если кто-то может помочь создать отдельный из этих существующих , который создает список localsчто grep GitHubзначения, этот хак был бы очень полезен.

0 ответов

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