使用第三方模块时,terraform init 无法获取来自 terraform 提供者镜像的模块

约安

我正在使用此指令预取我的提供程序:

terraform providers mirror  /usr/share/terraform/providers

mirrors.tf看起来像这样

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>2.27"
    }
    kubernetes = {
      source = "hashicorp/kubernetes"
      version = "~>1.13"
    }
    okta = {
      source  = "okta/okta"
      version = "~> 3.22"
    }

之后,我将自己定位在一个 terraform 文件夹中,我打算在该文件夹中初始化 okta 模块,该模块应该像这样在之前预取:

terraform {
  cloud {
    organization = "my-organization"

    workspaces {
      name = "my-workspace"
    }
  }
}

provider "okta"  {
  org_name    = "org_name"
  base_url    = "base_url"
  client_id   = "client_id"
  scopes      = [ "scope1" ]
  private_key = "private_key"
}

当对 hashcorp 模块做同样的事情时,它工作得很好。但是 oktaterraform init的结果是:

Initializing provider plugins...
- Finding latest version of hashicorp/okta...
╷
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider hashicorp/okta: provider registry.terraform.io/hashicorp/okta was not found in any of the search locations
│
│   - /usr/share/terraform/providers

查看 /usr/share/terraform/providers 时,我发现 terraform 有一个 okta/okta 文件夹和一个 hashcorp/kubernetes。

我怎么能告诉 terraform 在 okta/okta 而不是 hashcorp/okta 中寻找 okta 提供者?

谢谢

马丁阿特金斯

您显示的mirrors.tf文件包含一组提供程序要求okta/okta,其中包括对镜像命令为您请求的提供程序的引用。

为了在其他 Terraform 模块中使用这些相同的提供程序,您应该将相同required_providers的块放在terraform将使用提供程序的每个模块的块内okta/okta然后,Terraform 将理解,在该模块中,您打算将短名称“okta”表示为okta/okta,而不是默认的hashicorp/okta.

Terraform 默认假定hashicorp/命名空间中的提供程序是为了向后兼容最初为 Terraform v0.12 或更早版本编写的模块,这些模块尚不支持像这样的第三方提供程序的自动安装。但是,如果您使用的是当前的 Terraform 版本(在我写这篇文章时 v1.1 是最新的,但一直到 v0.13 都是如此),那么您通常应该required_providers在您编写的每个模块中包含一个块为了明确说明模块依赖于哪些提供程序,除非您需要您的模块与 Terraform v0.12 保持兼容

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章