Шаблон для шаблонных аргументов для существующих ресурсов Terraform - PullRequest
0 голосов
/ 29 мая 2020

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

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

например,

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

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

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
}

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

1 Ответ

3 голосов
/ 31 мая 2020

Мы создали самоуверенный модуль (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#defaults -object-attributes

...