地形:计数==真

时间:2018-12-07 10:08:25

标签: terraform

我以前在我的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一样直接测试这些东西。有什么想法吗?

1 个答案:

答案 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进行了插值,然后对这些评估值运行三元运算符。