使用 bool 进行 Terraform 计数?

cod*_*des 1 syntax if-statement terraform

count是能够在 Terraform 中有条件地供应资源的一个很好的元论点。根据我以前的经验,我们做了类似的事情my_var = "1"并使用它以编程方式控制资源创建count

因为count在这种情况下接受一个 string "1",但也可以解释一个number类型(例如1),我想知道:

a) Terraformcount在幕后做什么;它首先将字符串解析为数字吗?
b) 它还可以接受其他数据类型,例如bool

我希望有一个其中.tfvars有 a my_var = true,然后将其传递到count受影响资源的元参数中,例如count = var.my_var。这可能吗?


我还恳请一些信息,这些信息通常涉及如何在 Terraform 中解释数据类型的“真实性”。如果您有文档或博客文章可以分享,我们将不胜感激!

Erv*_*gyi 7

A)。在 Terraform 中,数值的字符串表示形式会自动转换为数字。来自文档

\n
\n

Terraform 会在需要时自动将数字和布尔值转换为字符串。它还会将字符串转换为数字或布尔值,只要字符串包含数字或布尔值的有效表示形式即可。

\n
    \n
  • true转换为"true",反之亦然
  • \n
  • false转换为"false",反之亦然
  • \n
  • 15转换为"15",反之亦然
  • \n
\n
\n

这是有效的:

\n
resource "aws_s3_bucket" "s3" {\n  bucket = "bucket-name"\n  count = "1"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这也是有效的:

\n
resource "aws_s3_bucket" "s3" {\n  bucket = "bucket-name"\n  count = 1\n}\n
Run Code Online (Sandbox Code Playgroud)\n

b). 在 Terraform 中,布尔值不被视为数值。数字不会自动转换为布尔值,这意味着这是无效的:

\n
resource "aws_s3_bucket" "s3" {\n  bucket = "asd"\n  count = false\n}\n
Run Code Online (Sandbox Code Playgroud)\n

它会抛出以下错误:

\n
\xe2\x95\xb7\n\xe2\x94\x82 Error: Incorrect value type\n\xe2\x94\x82\n\xe2\x94\x82   on main.tf line 9, in resource "aws_s3_bucket" "s3":\n\xe2\x94\x82    9:   count = false\n\xe2\x94\x82\n\xe2\x94\x82 Invalid expression value: number required.\n\xe2\x95\xb5\n
Run Code Online (Sandbox Code Playgroud)\n