在Terraform中没有ELSE的IF条件条件

时间:2018-08-15 11:34:30

标签: terraform

有没有办法对Terraform中的变量内容使用类似于IF的简单修改?

例如:

resource "null_resource" "validation_stg_l" {
  count = "${length(local.dvo)}"

  triggers {
    dvo_stg = "${ contains( split(",", var.hosted_zones_stg), replace(lookup(local.dvo[count.index], "domain_name"), "*.", "") ) ? local.dvo[count.index] : ///without this part\\\ }"
  }
}

以便您可以修改变量的实际内容,并以此方式仅保留所需的内容?

以上示例仅是实现不适用目标的一个想法-条件运算符不能与地图值一起使用(地图值应在几个月后在Terraform版本0.12中更改)。

2 个答案:

答案 0 :(得分:1)

我是否认为您要根据其域名是否在列表中而有条件地对null_resource的某些索引实例设置触发器?

如果我对https://www.terraform.io/docs/providers/null/resource.html的理解是正确的,则可以在条件的错误部分使用任何常量字符串来禁用触发器。空字符串和其他字符串一样好。

文档说trigger部分是

  

任意字符串的映射,当更改这些字符串时,将强制替换空资源,从而重新运行任何关联的供应商。

在您的情况下,如果您不希望替换特定的索引资源,则只需使用不能更改的字符串即可。

另一件事。 dvo_stg应该是一个字符串,但是您尝试将其分配给local.dvo[count.index],它在其他地方用作映射。是吗?

答案 1 :(得分:0)

那可能已经足够了:

data "template_file" "validation_stg_l" {
  count    = "${length(local.dvo)}"
  template = "${contains( split(",", var.hosted_zones_stg), replace(lookup(local.dvo[count.index], "domain_name"), "*.", "") ) ? count.index : 111}"
}

locals {
  tf_validation_stg_l_indxd = "${compact( split(",", replace(join(",", data.template_file.validation_stg_l.*.rendered), "111", "") ) )}"
}

使用{@ 1}}变量的结果,可以在地图中使用如下映射中的地图,在“ local”的“ triggers”中使用

null_resource

地图值将需要单独处理。