Terraform: Как получить логическое значение от интерполяции? - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу использовать интерполированное значение для мета-параметра prevent_destroy

Когда я кодирую

lifecycle {
   # never destroy the IP address of the production stage,
   prevent_destroy = "${var.stage_name == "global" ? true : false }"
}

Я получаю

* cannot parse 'prevent_destroy' as bool: strconv.ParseBool: parsing "${var.stage_name == \"global\" ? true : false }": invalid syntax

Эквивалентная ошибка для

lifecycle {
    prevent_destroy = "${var.stage_name == "global" ? 1 : 0 }"
}

Когда я определяю локальное, определение

locals  {
  booltest = "${var.stage_name == "global" ? true : false }"
}

, кажется, проходит, но обращение к локальному

lifecycle {
    prevent_destroy = "${var.booltest}"
}

дает мне

* cannot parse 'prevent_destroy' as bool: strconv.ParseBool: parsing "${var.booltest}": invalid syntax

(также пробовали с 0 и 1)

Как это можно закодировать?Моя версия Terraform v0.11.10

1 Ответ

0 голосов
/ 11 декабря 2018

К сожалению, атрибуты жизненного цикла не поддерживают интерполяцию:

https://github.com/hashicorp/terraform/issues/3116 https://github.com/hashicorp/terraform/issues/17294

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

resource "aws_instance" "indestructible" {
  count = "${var.prevent_destroy ? "1" : "0"}"
  lifecycle {
    prevent_destroy = "true"
  }
  ...
}

resource "aws_instance" "destructible" {
  count = "${var.prevent_destroy ? "0" : "1"}"
  lifecycle {
    prevent_destroy = "false"
  }

  ...
}

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

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