Terraform v0.11.xx «null_resource» не всегда работает как утверждение - PullRequest
0 голосов
/ 08 мая 2019

Мне нужно вызвать исключение, если мой динамически созданный список не пуст, после чего следует https://github.com/hashicorp/terraform/issues/15469 Я создал код ниже, он должен завершиться ошибкой, если список не пустой, как вы видите список, построенный из список null_resource, и он всегда выбрасывает утверждение:

resource "null_resource" "empty_string" {
  count = "10"
  triggers = {
    value  = ""
  }
}

locals {
  compacted_list_length = "${length(compact(null_resource.empty_string.*.triggers.value))}"
}

resource "null_resource" "is_array_empty" {
  count = "${local.compacted_list_length}"
  "Lsit is not empty" = true
}


output "compacted_list_length" {
  value = "${local.compacted_list_length}"
}

Если вы прокомментируете следующее, вывод покажет 0

resource "null_resource" "is_array_empty" {
      count = "${local.compacted_list_length}"
      "Lsit is not empty" = true
}

Нет подтверждения, если мы установим для местных жителей значение:

locals {
  compacted_list_length = 0
}

Даже этот код будет работать нормально:

locals {
  empty_list = ["", "", ""]
  compacted_list_length = "${length(compact(local.empty_list))}"
}

resource "null_resource" "is_array_empty" {
  count = "${local.compacted_list_length}"
  "Lsit is not empty" = true
}

output "compacted_list_length" {
  value = "${local.compacted_list_length}"
}

Где моя ошибка?

1 Ответ

0 голосов
/ 10 мая 2019

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

Этот обходной путь утверждения хорош для проверки значений переменных, как предложено в обоих примерах в документации . Обратите внимание, что в обоих случаях значение счетчика основано только на значениях переменных. Они доступны на этапе проверки, в отличие от динамических значений, которых нет.

resource "null_resource" "is_environment_name_valid" {
  count = "${contains(var.environment_list, var.env) == true ? 0 : 1}"
  "ERROR: The env value can only be: dev, qa or prod" = true
}
resource "null_resource" "is_array_length_correct" {
  count = "${length(var.array1) == length(var.array2) ? 0 : 1}"
  "array1 and array2 must be the same length" = true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...