Шаблон для шаблонных аргументов для существующих ресурсов Terraform

Я использую поставщика Terraform GitHub для определения репозиториев GitHub для внутреннего экземпляра GitHub Enterprise (хотя вопрос не зависит от поставщика).

Существующий github_repository ресурс работает нормально, но я хотел бы иметь возможность устанавливать нестандартные значения по умолчанию для некоторых из его аргументов и легко группировать другие аргументы в один новый аргумент.

например

  • github_repositoryс private значение по умолчанию false но я бы хотел по умолчанию true
  • Многие репозитории захотят разрешить только сквош-слияния, поэтому наличие squash_merge_only параметр, который устанавливает allow_squash_merge = true, allow_rebase_merge = false, allow_merge_commit = false

Есть и другие случаи, но они иллюстрируют суть. Цель состоит в том, чтобы упростить пользователям правильную настройку новых репозиториев и избежать повторения большого количества конфигураций в каждом репо.

Я могу добиться этого, передав переменные в настраиваемый модуль, например что-то вроде:

Foo/custom_repo/main.tf:

resource "github_repository" "custom_repo" {
  name                 = ${var.repo_name}
  private              = true
  allow_squash_merge   = true
  allow_merge_commit   = ${var.squash_merge_only ? false : true}
  allow_rebase_merge   = ${var.squash_merge_only ? false : true}
} 

Foo/main.tf:

provider "github" {
 ...
}

module "MyRepo_module" {
  source            = "./custom_repo"
  repo_name         = "MyRepo"
  squash_merge_only = true
}

Это немного чушь, так как мне нужно добавить переменную для каждого другого аргумента в github_repository что люди используют custom_repo модуль может захотеть установить (это в основном все они - я не пытаюсь ограничивать то, что людям разрешено делать) - см. name а также repo_nameна примере. Затем все это необходимо документировать отдельно, что также является позором, учитывая, что для существующего провайдера есть хорошие документы.

Есть ли лучший шаблон для повторного использования существующих ресурсов, подобных этому, но с некоторым контролем над тем, как им передаются аргументы?

1 ответ

Решение

Мы создали для этого самоуверенный модуль (terraform 0.12+) на https://github.com/mineiros-io/terraform-github-repository

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

Интересный факт... желаемые значения по умолчанию уже являются настройками модуля по умолчанию сразу, но чтобы было ясно, как их явно установить, вот пример (непроверенный):

locals {
  my_defaults = {
     # actually already the modules default to create private repositories
     private = true

     # also the modules default already and 
     # all other strategies are disabled by default
     allow_squash_merge = true
  }
}


module "repository" {
  source  = "mineiros-io/repository/github"
  version = "0.4.0"

  name = "my_new_repository"

  defaults = local.my_defaults
}

пока не все аргументы поддерживаются по умолчанию, но большинство из них: https://github.com/mineiros-io/terraform-github-repository

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