首页 > 解决方案 > 地形版本.tf

问题描述

你好我使用 terraform 的 v13 版本,因为这个版本的发布我们被迫通过带有 required_providers 块的 version.tf 系统。CF https://www.terraform.io/docs/configuration/provider-requirements.html

我有一个调用子模块 terraform 的 main.tf 脚本。像下面

module "wab_device" {
  
  source        = "./wab-device"
  domain        = "aws.eu-west-1.example.com"
  os            = "Linux"
  hostnames     = { "JTUFFZ06TEST" : { "vm_name" : "JTUFFZ06TEST" } }
  description   = "Test description use module wab tfv13"
  support_group = "Support group"
}

我有我的version.tf,如下所示

terraform {
  required_providers {
    wab = {
      source  = "private-registry.example.com/org/wab"
      version = "1.3.2"
    }
    vault = {
      source = "hashicorp/vault"
    }
  }
  required_version = ">= 0.13"
}

到目前为止,一切都很好

我启动了我的 terraform13 init 我遇到了以下问题

错误:无法安装提供程序

安装 hashcorp/wab 时出错:提供程序注册表 registry.terraform.io 没有名为 registry.terraform.io/hashicorp/wab 的提供程序

terraform 在我的模块内的私有注册表中找不到提供程序。我尝试从 Internet 下载,所以我将 version.tf 复制粘贴到目录 ./wab-device

它的工作就像一个魅力。

但理论上是可以的。在实践中,我无法修改我的模块 wab-device,因为它是一个 git repo,我不是所有者,我必须对其他 5 个 repos 做同样的事情......

我们如何在不指定 submodule 中的 version.tf 的情况下使用模块。我可以改用别名吗?或 .terraformrc

谢谢你的建议我会帮助我

问候

标签: terraformprovider

解决方案


在 Terraform 中,每个模块都负责声明自己的依赖项。这类似于在大多数其他编程语言生态系统中,库如何声明它依赖的其他库。

出于这个原因,不可能强制一个模块依赖一个它还没有依赖的新提供者。您需要要求该模块的维护者添加必要的依赖项声明,或者分叉模块并将声明添加到您的副本中。

由于这个“wab”模块不是 HashiCorp 本身在 Terraform v0.13 之前分发的提供商之一,因此您尝试使用的模块很可能是为 Terraform v0.12 而不是为 Terraform v0.13 设计的。在这种情况下,另一种方法是将 Terraform v0.12 也用于您的配置,并保持在该版本上,直到您所依赖的所有模块都更新为与 Terraform v0.13 兼容。


推荐阅读