【问题标题】:Terraform : cannot apply a version constraint to module "kms" because it has a relative local pathTerraform:无法将版本约束应用于模块“kms”,因为它具有相对本地路径
【发布时间】:2020-03-01 16:07:08
【问题描述】:

我正在尝试使用 Terraform 创建 google KMS 资源

module "kms" {
  source = "./modules/kms"
  version = "~> 0.1"
  providers = {
    google = google.impersonated
  }
  project_id = var.project_id
  location = "global"
  keyring_name = "${var.environment}-keyring"
  key_name = "${var.environment}-key"
}

kms 模块内的资源定义

resource "google_kms_key_ring" "key_ring" {
  name = var.keyring_name
  project = var.project_id
  location = var.location
}

resource "google_kms_crypto_key" "key" {
  name = var.key_name
  location = var.location
  key_ring = google_kms_key_ring.key_ring.self_link
}

运行 Terraform init 会引发错误:

Cannot apply a version constraint to module "kms" (at main.tf:165) because it has a relative local path.

目录结构

|--Terraform
   |-- main.tf
   |-- variable.tf
   |-- output.tf
   |-- ...
   |-- modules
       |-- kms
           |-- main.tf
           |-- variable.tf
           |-- output.tf

Terraform 版本为~> 0.12.15

如何解决这个错误?

【问题讨论】:

  • 不要对模块设置版本约束。这仅用于 Terraform 注册表中的模块,而不是本地模块。
  • 谢谢。删除版本解决了问题

标签: terraform terraform-provider-gcp


【解决方案1】:

在我的例子中,我从 terraform 注册表中克隆了一个 sql-db 模块,但没有删除模块块中的版本。

这是预期的模块块

module "sql-db" {
  source  = "GoogleCloudPlatform/sql-db/google//modules/mssql"
  version = "4.0.0"
}

这就是我所拥有的(导致此错误)

module "sql-db" {
  //Replaced registry uri with a relative path and hence the error.
  source  = "./modules/mssql"
  version = "4.0.0"
}

所以解决方案可能是两种方法之一

  1. 保留注册表 uri 路径并保留版本
module "sql-db" {
  source  = "GoogleCloudPlatform/sql-db/google//modules/mssql"
  version = "4.0.0"
}

  1. 保留相对路径并删除版本
module "sql-db" {
  //Replaced registry uri with a relative path and hence the error.
  source  = "./modules/mssql"
}

【讨论】:

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