首页 > 解决方案 > Terraform 替换功能在条件下不起作用

问题描述

我有一个代码,它检查循环中的键是否具有单词 Ops,如果是,则将值分配给提供者 aws.peer 或 aws.default。

provider = "${replace(each.key, "Ops", "") != each.key ? "aws.peer" : "aws.default"}"

我运行它后它返回:

Error: Invalid provider reference

On ../../modules/Stack/Peering/main.tf line 13: Provider argument requires a provider name followed by an optional alias, like "aws.foo".

不知道为什么

标签: terraform

解决方案


在 Terraform 中,提供者选择不允许是动态的。如果您共享更多脚本,我们可能会为您提供特定于您正在构建的解决方案的解决方法。

提供者选择不能像这样动态。尽管它在 Terraform 0.11 中没有产生错误,但它也不起作用:Terraform 0.11 只是忽略了它并将其视为文字字符串,就像 terraform 0.12upgrade 工具显示的那样。Terraform 0.12 对其进行了明确的验证检查,以便为您提供更好的反馈,表明它不受支持。

资源与其提供者之间的连接发生得太早,Terraform 无法在该上下文中评估表达式,因为必须知道提供者才能理解块的其他内容。

具有可能解决方法的资源: https ://discuss.hashicorp.com/t/defining-provider-aliases-with-string-interpolation-not-working-in-terraform-0-12/1569/4


推荐阅读