我尝试传递一个list类型的变量,如下所示:
在cf-app.tf文件中:
resource "cloudfoundry_app" "my-app" {
service_binding = "${var.service-bindings}"
}在variables.tf文件中:
variable "service-bindings" {
type = "list"
default = []
}在deployment.tf文件中:
module "nested-module" {
source = "../my-app"
service-bindings = [
{
service_instance = "dummy1"
},
{
service_instance = "dummy2"
}
]
}但是我得到了下面的错误,这是一个已知的terraform 11问题,已经在terraform 12中修复了。
Error: module.nested-module.cloudfoundry_app.myapp: service_binding: should be a list我关注了this issue,但我的挑战是使用元素字符串...
我目前使用的是terraform version 11。
有没有人能帮我解决这个问题?
提前谢谢你!
发布于 2021-07-22 01:02:13
Terraform v0.11的类型系统不支持这种嵌套数据结构。它只支持字符串、字符串列表和字符串映射。
因此,这里的示例组合了Terraform v0.11不太适合支持的各种功能,而正是这种限制促使Terraform v0.12重写了Terraform语言。
对于您的情况,我最好的建议是放弃将resource "cloudfoundry_app" "my-app"分解到共享模块中的想法,而是将其直接编写为内联资源,其中包含您需要在其中直接指定的设置:
resource "cloudfoundry_app" "my-app" {
service_binding {
service_instance = "dummy1"
}
service_binding {
service_instance = "dummy2"
}
}一旦您准备好升级到更新版本的Terraform,您可以将其重写为一个dynamic块,以根据您的输入变量生成多个service_binding块,然后在您可以使用表现力足够强的Terraform语言版本之后,考虑将其分解到一个单独的模块中:
# This configuration is only for Terraform v0.12 or later
variable "service_bindings" {
type = list(object({
service_instance = string
params_json = string
}))
}
resource "cloudfoundry_app" "my-app" {
dynamic "service_binding" {
for_each = var.service_bindings
content {
service_instance = service_binding.value.service_instance
params_json = service_binding.value.params_json
}
}
}发布于 2021-07-20 07:05:07
为什么你会有:
service_binding = "${var.service-bindings}"当var.service-bindings是一个列表而service_binding输入需要一个列表时?这不应该是:
service_binding = var.service-bindings我还没有安装Terraform v0.11,我也不打算安装它来测试它,但是你可以试试:
type = "list"。如果您不要求它验证类型是否正确,它仍会抛出此错误吗?jsonencode函数?如果是这样,请尝试:resource "cloudfoundry_app" "my-app" {
service_binding = jsondecode(var.service-bindings)
}
variable "service-bindings" {
type = "string"
default = "[]"
}module "nested-module" {
source = "../my-app"
service-bindings = jsonencode([
{
service_instance = "dummy1"
},
{
service_instance = "dummy2"
}
])
}https://stackoverflow.com/questions/68447559
复制相似问题