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 中解释数据类型的“真实性”。如果您有文档或博客文章可以分享,我们将不胜感激!
A)。在 Terraform 中,数值的字符串表示形式会自动转换为数字。来自文档:
\n\n\nTerraform 会在需要时自动将数字和布尔值转换为字符串。它还会将字符串转换为数字或布尔值,只要字符串包含数字或布尔值的有效表示形式即可。
\n\n
\n- \n
true转换为"true",反之亦然- \n
false转换为"false",反之亦然- \n
15转换为"15",反之亦然
这是有效的:
\nresource "aws_s3_bucket" "s3" {\n bucket = "bucket-name"\n count = "1"\n}\nRun Code Online (Sandbox Code Playgroud)\n这也是有效的:
\nresource "aws_s3_bucket" "s3" {\n bucket = "bucket-name"\n count = 1\n}\nRun Code Online (Sandbox Code Playgroud)\nb). 在 Terraform 中,布尔值不被视为数值。数字不会自动转换为布尔值,这意味着这是无效的:
\nresource "aws_s3_bucket" "s3" {\n bucket = "asd"\n count = false\n}\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n