Terraform替换功能在条件下不起作用

时间:2019-10-09 10:21:00

标签: 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".

不确定为什么

1 个答案:

答案 0 :(得分:1)

在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