Terraform:计数 == true

jon*_*mix 2 terraform

我之前在我的 TF 代码中使用过这个:

count   = "${var.whatever == "true" ? 1 : 0}"
Run Code Online (Sandbox Code Playgroud)

这非常适合我想要使用的东西。但是,我正在考虑如何最好地使用类似的东西,如果var.whatever等于true,则计数等于length(var.whatever)

这行得通吗?

count = "${var.whatever == "true" ? ${length(var.whatever) : 0}"

只是我对 TF 的印象一直是不能嵌套插值。

另外,这让我想到了另一个有趣的问题……你们用什么来测试语法?我并不是要检查 TF 代码,我的意思是运行代码来测试这样的事情?我不想只是部署到开发人员,只是为了测试我的 TF 代码的输出。我想知道是否有某种东西,像贝壳一样,我可以按原样测试这些东西bash或其他东西。有什么想法吗?

KJH*_*KJH 7

你最初的想法行不通,因为 ifvar.whatever是一个列表,那么它不能也是一个字符串(即= "true")。

然而,好消息是插值可以在通用三元运算符内部使用。

所以你可以有类似的东西:

count = "${var.bool == "true" ? length(var.whatever) : 0}"
Run Code Online (Sandbox Code Playgroud)

在将插值放入最终代码之前测试插值的一个好方法是使用Terraform 的控制台功能(即terraform console)。

在文件中设置变量,例如console.tf在没有任何其他 TF 代码的目录中。

variable "whatever" {
  type = "list"
  default = ["1", "2", "foo", "bar" ]
}

variable "bool" {
  default = "true"
}
Run Code Online (Sandbox Code Playgroud)

现在从命令行运行terraform console.

$ terraform console
>  var.whatever
[
  "1",
  "2",
  "foo",
  "bar",
]
> length(var.whatever)
4
> "${var.bool == "true" ? length(var.whatever) : 0}"
4
> exit
$ 
Run Code Online (Sandbox Code Playgroud)

您可以看到 Terraform 执行插值,然后对这些评估值运行三元运算符。