Terraform: инфраструктура на уровне кода | страница 50



. Для этого предусмотрен следующий синтаксис:

variable "NAME" {

  [CONFIG ...]

}

Тело объявления переменной может содержать три необязательных параметра.

•description. Этот параметр всегда желательно указывать для документирования того, как используется переменная. Ваши коллеги смогут просмотреть это описание не только при чтении кода, но и во время выполнения команд plan или apply (пример этого показан чуть ниже).

• default. Вы можете присвоить значение переменной несколькими способами, в том числе через командную строку (с помощью параметра -var), файл (указывая параметр -var-file) или переменную среды (Terraform ищет переменные среды вида TF_VAR_<имя_переменной>). Если переменная не инициализирована, ей присваивается значение по умолчанию. Если такого нет, Terraform запросит его у пользователя в интерактивном режиме.

•type. Позволяет применить к переменным, которые передает пользователь, ограничения типов. Terraform поддерживает ряд ограничений для таких типов, как string, number, bool, list, map, set, object, tuple и any. Если тип не указан, Terraform воспринимает значение как any.

Вот пример входной переменной, которая проверяет, является ли передаваемое значение числом:

variable "number_example" {

  description = "An example of a number variable in Terraform"

  type        = number

  default     = 42

}

А вот пример переменной, которая проверяет, является ли значение списком:

variable "list_example" {

  description = "An example of a list in Terraform"

  type        = list

  default     = ["a", "b", "c"]

}

Ограничения типов можно сочетать. Например, вот входная переменная, которая принимает список и требует, чтобы все значения этого списка были числовыми:

variable "list_numeric_example" {

  description = "An example of a numeric list in Terraform"

  type        = list(number)

  default     = [1, 2, 3]

}

А вот ассоциативный массив, который требует, чтобы все значения были строковыми:

variable "map_example" {

  description = "An example of a map in Terraform"

  type        = map(string)

  default = {

    key1 = "value1"

    key2 = "value2"

    key3 = "value3"

  }

}

Вы также можете создавать более сложные структурные типы, используя ограничения object и tuple:

variable "object_example" {

  description = "An example of a structural type in Terraform"

  type        = object({

    name    = string

    age     = number

    tags    = list(string)

    enabled = bool

  })

  default   = {

    name    = "value1"