我有一个代码,用于检查循环中的键是否包含单词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".
不确定为什么
答案 0 :(得分:1)
在Terraform中,提供商选择不允许是动态的。如果您共享更多脚本,我们也许可以为您提供一种针对您正在构建的解决方案的解决方法。
提供者选择不能像这样动态。尽管它不会在Terraform 0.11中产生错误,但也无法正常工作:Terraform 0.11只是忽略了该错误,并将其视为文字字符串,就像terraform 0.12upgrade工具所示。 Terraform 0.12对其进行了明确的验证检查,可以为您提供更好的反馈,使其不受支持。
资源与其提供者之间的连接太早发生,以至于Terraform不能在该上下文中评估表达式,因为必须知道提供者才能理解该块的其他内容。