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_
$ 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, следует воспользоваться выражением типа