Разумная аналогия для входных переменных Terraform заключается в функционировании параметров на языке программирования общего назначения.Как и в случае с параметрами функции, входные переменные Terraform состоят из двух частей: объявления и определения.
В объявлении говорится, что переменная существует, задает для нее тип и, при необходимости, задает для нее значение по умолчанию (которое,если установлено, делает переменную необязательной):
variable "cidr_block" {
type = string
default = "10.0.0.0/16"
}
Определение присваивает ей конкретное значение.В случае Terraform для корневого модуля это -var
аргументы командной строки и .tfvars
файлы, которые определяют переменные.Для дочернего модуля это пары ключ / значение внутри блока module
, который вызвал модуль.
Примером языка программирования общего назначения, который имеет концепцию значений по умолчанию для параметров, является Python.Таким образом, пример Python может быть полезной аналогией для тех, кто знаком с ним:
def example(cidr_block="10.0.0.0/16"):
pass
Подобно Terraform, мы можем выбрать вызов этой функции как example()
и позволить применить значение по умолчанию.Мы также можем вызвать example("11.0.0.0/16")
, чтобы переопределить это значение по умолчанию.Третья возможность заключается в том, что мы вызываем example("10.0.0.0/16")
и заменяем значение по умолчанию на то же значение .
С точки зрения Python, функциональная разница между вызовами * 1024 отсутствует* и вызывая example("10.0.0.0/16")
здесь, но как авторы вызывающей стороны мы можем использовать это, чтобы выразить тонкое намерение: если мы оставим его неустановленным, то мы говорим: «Я доволен тем, что выберет функция; точное значение не имеет значения»в то время как если мы явно устанавливаем аргумент в то же значение, что и значение по умолчанию, мы говорим: «Для этого вызывающего абонента важно, чтобы мы всегда выбирали "10.0.0.0/16"
здесь, независимо от того, каким может быть значение по умолчанию».
Процесс принятия решения о том, следует ли явно определять входную переменную Terraform, аналогичен: если конкретное выбранное значение не является критическим для вызывающего модуля, мы могли бы просто позволить выбрать значение по умолчанию.Но если наличие явного определения поможет будущему читателю лучше понять намерение, мы можем решить явно определить его.