给定一个像这样的模块
\nmodule us-west-2 {\n count = "${local.environments[terraform.workspace] == "logging" ? true : false}"\n source = "./modules/flow_log"\n providers = {\n aws = aws.us-west-2\n }\n log_destination = module.nf_cis_benchmark.aws_s3_bucket_vpc_flow_log\n log_destination_type = "s3"\n traffic_type = "REJECT"\n depends_on = [ module.nf_cis_benchmark.raws_s3_bucket_vpc_flow_log_arn ]\n aws_vpc_ids = data.aws_vpcs.us-west-2.ids\n}\n\nRun Code Online (Sandbox Code Playgroud)\n我们如何根据返回值有条件地创建这个模块local.environments[terraform.workspace]?
预期:\n当用户运行时,terraform apply将根据所选工作区有条件地创建资源。
实际的:
\n330: count = length("${local.environments[terraform.workspace] == "logging" ? true : false}")\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82 \xe2\x94\x82 local.environments is object with 9 attributes\n\xe2\x94\x82 \xe2\x94\x82 terraform.workspace is "nf-logging"\n\xe2\x94\x82 \n\xe2\x94\x82 Call to function "length" failed: argument must be a string, a collection type, or a structural type.\nRun Code Online (Sandbox Code Playgroud)\n
您的错误消息有一个length()调用,但您发布的代码没有。当您发布这样的问题时,请发布生成错误的实际代码。
我不知道为什么您尝试将计数表达式用双引号引起来,或者为什么您尝试返回 true 或 false,然后获取这些字符串的字符串长度来创建计数值。您使用的是非常旧版本的 Terraform 吗?我认为如果您使用 Terraform 0.12 或更高版本,您尝试做的事情实际上看起来像这样:
count = local.environments[terraform.workspace] == "logging" ? 1 : 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9213 次 |
| 最近记录: |