函数调用中的 Terraform OCI 错误 "map" 函数在 Terraform 中已弃用?

Terraform OCI Error in function call the "map" function was deprecated in Terraform?

为什么会出现以下错误?

使用 Terraform 并遵循官方发布的指南 here 我正在尝试在 OCI 上创建一个简单的隔间并收到以下错误:

│ Error: Error in function call │ │ on .terraform/modules/iam_compartment/modules/iam-compartment/main.tf line 36, in locals: │ 36: parent_compartment_ids = concat(flatten(data.oci_identity_compartments.this.*.compartments), list(map("compartment_id", ""))) │ │ Call to function "map" failed: the "map" function was deprecated in Terraform v0.12 and is no longer available; use tomap({ ... }) syntax to write a literal map.

我的地形 main.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
}

版本:

Terraform v1.1.3 on darwin_amd64

  • provider registry.terraform.io/hashicorp/oci v4.59.0
  • provider registry.terraform.io/hashicorp/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", "")))
}

此外,针对此问题有一个 issue 报告,最近没有任何 activity。

因为这个模块来自第三方,你可以做的是在 GitHub 上分叉它,并将 map 函数更改为 tomap。有可能,您可以使用修复程序创建拉取请求。

其他选择是去掉这个模块,自己构建它的功能。