为什么会出现以下错误?
使用Terraform并遵循官方发布的指南,我试图在OCI上创建一个简单的隔间,并得到以下错误:
│错误:函数调用出错│ │在…上.terraform/modules/iam_compartment/modules/iam compartment/main.tf第36行,当地语:│36:pparent_compartment_ids=concat(flatten(data.oci_identity_compartments.this.*.compartments(,list(map("compartment_id","((│ │调用函数";地图";失败:";地图";函数在Terraform v0.12中已弃用,现在不再使用可获得的使用tomap({…}(语法来编写文字映射。
我的地形主.tf文件:
module "iam_compartment" {
source = "oracle-terraform-modules/iam/oci//modules/iam-compartment"
version = "2.0.1"
tenancy_ocid = var.provider.tenancy_id
compartment_id = var.provider.tenancy_id
compartment_name = "tf_example_compartment"
compartment_description = "compartment created by terraform"
compartment_create = true
enable_delete = true
}
版本:
darwin_amd64 上的Terraform v1.1.3
- 提供者registry.terraform.io/hashicorp/oci v4.59.0
- provider registry.terraform.io/hasicorp/template v2.2.0
重新创建的步骤
- 地形初始化
- 地形平面图
您使用的模块不是最新的Terraform版本。此外,它包含的代码是不向前兼容的。
正如错误所说,Terraform中的map
函数被弃用,取而代之的是tomap
函数。如果我们看一下GitHub上模块的源代码,它使用的是map
函数:
locals {
compartment_ids = concat(flatten(data.oci_identity_compartments.this.*.compartments), list(map("id", "")))
parent_compartment_ids = concat(flatten(data.oci_identity_compartments.this.*.compartments), list(map("compartment_id", "")))
}
此外,该问题报告了一个问题,但最近没有任何活动。
由于该模块来自第三方,所以您可以在GitHub上分叉它,并将map
函数修改为tomap
。有可能,您可以使用修复程序创建pull请求。
另一种选择是去掉这个模块,自己构建它的功能。