我正在尝试构建Terraform Provider,并且外部API中有一个字段可以返回列表或字符串的类型。用这种行为为API定义架构的最佳方法是什么。
我阅读了Terraform Provider文档:https://www.terraform.io/docs/extend/schemas/schema-types.html,但找不到解决该问题的方法。
答案 0 :(得分:0)
在撰写本文时,无法使用Terraform SDK来实现。为了保持0.11的兼容性,该SDK当前支持Terraform 0.11和0.12的通用功能,并且由于仅在Terraform 0.12中引入了动态类型,因此该功能在SDK中尚不可用。
目前,提供程序的一种常见解决方法是将相关属性定义为字符串,并在名称末尾添加_json
,然后让提供程序将JSON编码的值写入属性。然后,调用配置可以使用jsondecode
来提取值。
此处带有_json
后缀的原因是,它计划在将来的SDK修订版中支持这种动态类型(一旦放弃了Terraform 0.11兼容性),因此今天有了类似foo_json
的名称名称foo
可在以后的弃用周期中从foo_json
开始使用。
内部Terraform 0.12的提供程序协议已经通过将特定属性标记为具有动态类型来支持这种可能性。由于上述原因,SDK只是没有选择接口。因此,原则上可以直接针对the raw protocol编写提供程序,该提供程序仅支持Terraform 0.12并且可以使用动态类型,但是这需要大量工作,并且迄今为止在原型和实验之外都是空前的。我不建议这样做,而只是出于完整性而提及它。