Terraform 地形v0.11.xx“;空“U资源”;不总是作为断言

Terraform 地形v0.11.xx“;空“U资源”;不总是作为断言,terraform,Terraform,如果动态创建的列表不是空的,我需要引发异常,然后是下面我创建的代码,如果列表不是空的,它应该会失败并出错,正如您看到的从null_资源列表构造的列表,并且它总是抛出断言: resource "null_resource" "empty_string" { count = "10" triggers = { value = "" } } locals { compacted_list_length = "${length(compact(null_resource.em

如果动态创建的列表不是空的,我需要引发异常,然后是下面我创建的代码,如果列表不是空的,它应该会失败并出错,正如您看到的从null_资源列表构造的列表,并且它总是抛出断言:

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}"
}

我的错误在哪里?

此断言解决方案不适用于动态值,因为它在验证阶段工作。在此阶段,地形不计算动态值

此断言解决方案很好地验证了中两个示例中建议的变量值。请注意,在这两种情况下,计数值仅基于变量值。这些值在验证阶段可用,而动态值不可用

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
}

我看不出
null\u资源
如何适合这里。似乎应该用其他东西来代替它,但不清楚这里的目标是什么。@MattSchuchard该问题建议使用
本地exec
provisioner,这对我来说也更有意义。
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
}