как использовать ноль с другим значением вместо значения по умолчанию - PullRequest
0 голосов
/ 07 февраля 2020

Я знаю, что null можно использовать для установки поведения по умолчанию, если переменная не указана:

variable "override_private_ip" {
  type    = string
  default = null
}

resource "aws_instance" "example" {
  # ... (other aws_instance arguments) ...
  private_ip = var.override_private_ip
}

Но я хочу установить собственное поведение по умолчанию, если оно не указано.

Я делаю это:

#### if user sets an id use that but if not get id from data source
resource "aws_instance" "myserver" {
  ami = var.ami_id != null ? var.ami_id : data.aws_ami.getami.id

это похоже на работу, но это правильный путь? Я хочу убедиться, что я не пропустил функцию для этого. Я пытался просто var.ami_id ? var.ami_id : data.aws_ami.getami.id, но ноль не преобразуется в bool, поэтому не работал

1 Ответ

0 голосов
/ 11 февраля 2020

Условное выражение, подобное тому, которое вы показали, действительно является правильным способом express в Terraform. Как вы видели, Terraform не считает null логическим значением false.


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

variable "ami_id" {
  type    = string
  default = null
}

data "aws_ami" "example" {
  count = var.ami_id == null ? 1 : 0

  # ...
}

locals {
  ami_id = var.ami_id != null ? var.ami_id : data.aws_ami.example[0].id
}

resource "aws_instance" "example" {
  # ... (other aws_instance arguments) ...
  ami = local.ami_id
}

Затем вы можете использовать local.ami_id много раз в модуле, не дублируя логи c, которые обрабатывают поиск значений по умолчанию.

...