【问题标题】:Terraform OCI Error in function call the "map" function was deprecated in Terraform?Terraform OCI 函数调用中的错误“地图”函数在 Terraform 中已弃用?
【发布时间】:2022-01-16 22:57:09
【问题描述】:

为什么会出现以下错误?

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

│ 错误:函数调用出错│ │ on .terraform/modules/iam_compartment/modules/iam-compartment/main.tf 第 36 行,在本地:│ 36:parent_compartment_ids = 连接(扁平化(data.oci_identity_compartments.this.*.compartments), list(map("compartment_id", ""))) │ │ 调用函数“map”失败: “地图”功能在 Terraform v0.12 中已弃用,不再是 可用的;使用 tomap({ ... }) 语法编写文字映射。

我的 terraform 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
}

版本:

darwin_amd64 上的 Terraform v1.1.3

  • 提供者 registry.terraform.io/hashicorp/oci v4.59.0
  • 提供者 registry.terraform.io/hashicorp/template v2.2.0

重建步骤

  • 地形初始化
  • 地形规划

【问题讨论】:

    标签: terraform


    【解决方案1】:

    您使用的模块不是最新的 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报告了这个问题,最近没有任何活动。

    由于此模块来自第三方,您可以在 GitHub 上 fork 并将 map 函数更改为 tomap。潜在地,您可以使用修复创建拉取请求。

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

    【讨论】:

      猜你喜欢
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      相关资源
      最近更新 更多