有没有办法对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中更改)。
答案 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
地图值将需要单独处理。