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



    age     = 42

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

    enabled = true

  }

}

Выше создается входная переменная, которая требует, чтобы значение было объектом с ключами name (строка), age (число), tags (список строк) и enabled (булево значение). Если попытаться присвоить такой переменной значение, которое не соответствует этому типу, Terraform немедленно вернет ошибку типизации. В следующем примере демонстрируется попытка присвоить enabled строку вместо булева значения:

variable "object_example_with_error" {

  description = "An example of a structural type in Terraform with an error"

  type        = object({

    name    = string

    age     = number

    tags    = list(string)

    enabled = bool

  })

  default   = {

    name    = "value1"

    age     = 42

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

    enabled = "invalid"

  }

}

Вы получите следующую ошибку:

$ terraform apply

Error: Invalid default value for variable

  on variables.tf line 78, in variable "object_example_with_error":

  78:   default   = {

  79:     name    = "value1"

  80:     age     = 42

  81:     tags    = ["a", "b", "c"]

  82:     enabled = "invalid"

  83:   }

This default value is not compatible with the variable's type constraint: a bool is required.

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

variable "server_port" {

  description = "The port the server will use for HTTP requests"

  type        = number

}

Обратите внимание, что у входной переменной server_port нет поля default, поэтому, если выполнить команду apply прямо сейчас, Terraform сразу же попросит ввести значение для server_port и покажет вам описание description:

$ terraform apply

var.server_port

  The port the server will use for HTTP requests

  Enter a value:

Если вы не хотите иметь дело с интерактивной строкой ввода, можете предоставить значение переменной с помощью параметра командной строки -var:

$ terraform plan -var "server_port=8080"

То же самое можно сделать, добавив переменную среды вида TF_VAR_, где name — имя переменной, которую вы хотите установить:

$ export TF_VAR_server_port=8080

$ terraform plan

Если же вы не хотите держать в голове дополнительные аргументы командной строки при каждом выполнении команды plan или apply, можете указать значение по умолчанию:

variable "server_port" {

  description = "The port the server will use for HTTP requests"

  type        = number

  default     = 8080

}

Чтобы использовать значение входной переменной в коде Terraform, следует воспользоваться выражением типа