Шаблон для шаблонных аргументов для существующих ресурсов 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