我以前在我的TF代码中使用过此代码:
count = "${var.whatever == "true" ? 1 : 0}"
对于我想使用的东西来说效果很好。但是,我正在考虑如何最好地使用类似的说法,如果var.whatever
等于true
,则计数等于length(var.whatever)
。
这项工作可以吗?
count = "${var.whatever == "true" ? ${length(var.whatever) : 0}"
只是我一直对TF印象深刻,无法嵌套插值。
此外,这种情况使我引出了另一个有趣的问题..你们用什么来测试语法?我不是要抹去TF代码,而是要对代码运行以测试类似的东西?我不想只是部署到开发人员,只是为了测试我的TF代码的输出。我想知道是否存在像shell这样的东西,我可以像bash
一样直接测试这些东西。有什么想法吗?
答案 0 :(得分:1)
您的原始想法无效,因为如果var.whatever
是一个列表,那么它也不能是字符串(即 =“ true” )。
但是,好消息是可以在通用三元运算符内部使用插值。
所以您可以拥有类似的东西:
count = "${var.bool == "true" ? length(var.whatever) : 0}"
在将插值放入最终代码之前测试插值的一种好方法是使用Terraform's console feature(即terraform console
)。
在没有任何其他TF代码的目录中说console.tf
的文件中设置您的var。
variable "whatever" {
type = "list"
default = ["1", "2", "foo", "bar" ]
}
variable "bool" {
default = "true"
}
现在从命令行运行terraform console
。
$ terraform console
> var.whatever
[
"1",
"2",
"foo",
"bar",
]
> length(var.whatever)
4
> "${var.bool == "true" ? length(var.whatever) : 0}"
4
> exit
$
您可以看到Terraform进行了插值,然后对这些评估值运行三元运算符。