Разница между файлом * .tfvars и передачей значений в main.tf в terraform - PullRequest
0 голосов
/ 22 сентября 2019

почему некоторые значения передаются в файле main.tf вместо файлов * .tfvars при вызове модуля.Я понимаю, что variables.tf - это определение переменных вместе со всеми значениями по умолчанию.Файл * .tfvar должен передавать значения для переменных.но они также передают некоторое значение для переменных в main.tf, где мы вызываем этот модуль.почему это так?любая помощь, пожалуйста.

Google не получил удовлетворительный ответ.

main.tf

   module =vpc
   source = ./path/vpc
    cidr_block = 11.0.0.0/16

, но у них также есть файл * .tfvars.Вместо того, чтобы передавать значение, почему здесь необходимо указать

1 Ответ

0 голосов
/ 23 сентября 2019

Разумная аналогия для входных переменных 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, аналогичен: если конкретное выбранное значение не является критическим для вызывающего модуля, мы могли бы просто позволить выбрать значение по умолчанию.Но если наличие явного определения поможет будущему читателю лучше понять намерение, мы можем решить явно определить его.

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