Terraform 0.11传递列表类型变量提示should be a list解决求助
Terraform 0.11 传递列表类型变量报错变通方案
问题核心
该报错是Terraform 0.11的已知类型推断缺陷,传递list(map)结构的变量时,模块内部会误判变量类型,该问题在0.12版本已原生修复,0.11版本可通过以下方案绕过:
可用变通方案
- 方案1:模块内强制类型转换
修改cf-app.tf中service_binding的赋值逻辑,用list()函数强制声明返回类型为列表,绕过类型推断bug:
resource "cloudfoundry_app" "my-app" { service_binding = "${list(var.service-bindings)}" }
- 方案2:用flatten函数强制返回列表
如果方案1不生效,可以用flatten()函数处理变量,该函数的返回值固定为列表类型,同样可以绕过校验问题:
resource "cloudfoundry_app" "my-app" { service_binding = "${flatten(var.service-bindings)}" }
- 方案3:模块调用时显式构造列表和映射
如果上述两个方案都无效,可在deployment.tf调用模块时,用list()和map()显式构造变量值,避免隐式类型推断出错:
module "nested-module" { source = "../my-app" service-bindings = "${list( map("service_instance", "dummy1"), map("service_instance", "dummy2") )}" }
以上方案均为Terraform 0.11版本的兼容处理方案,不需要升级版本即可解决service_binding should be a list的报错。
内容的提问来源于stack exchange,提问作者Salhi Fadhel
相关产品推荐
相关产品推荐

