使用第三方模块时,terraform init 无法获取来自 terraform 提供者镜像的模块
terraform init unable to fetch modules coming from terraform providers mirror when using third party modules
我正在使用此指令预取我的提供商:
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"
}
当对 hashicorp 模块执行相同操作时,效果很好。但是使用 okta terraform 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 文件夹和一个 hashicorp/kubernetes.
我如何告诉 terraform 在 okta/okta 而不是 hashicorp/okta 中寻找 okta 提供者?
谢谢
您显示的 mirrors.tf
文件包含一组 provider requirements,其中包括镜像命令为您请求的 okta/okta
提供程序的引用。
为了在其他 Terraform 模块中使用相同的提供程序,您应该将相同的 required_providers
块放置在将使用 okta/okta
提供程序的每个模块的 terraform
块中。然后,Terraform 将理解,在该模块中,您打算将短名称“okta”表示为 okta/okta
,而不是默认的 hashicorp/okta
.
Terraform 默认采用 hashicorp/
命名空间中的提供程序,以便向后兼容最初为 Terraform v0.12 或更早版本编写的模块,这些模块尚不支持 third-party 提供程序的自动安装像这个。但是,如果您使用的是当前的 Terraform 版本(我写这篇文章时 v1.1 是最新的,但一直到 v0.13 都是如此),那么您通常应该在中包含一个 required_providers
块您编写的每个模块都是为了明确该模块所依赖的提供者,除非您需要您的模块 remain compatible with Terraform v0.12.
我正在使用此指令预取我的提供商:
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"
}
当对 hashicorp 模块执行相同操作时,效果很好。但是使用 okta terraform 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 文件夹和一个 hashicorp/kubernetes.
我如何告诉 terraform 在 okta/okta 而不是 hashicorp/okta 中寻找 okta 提供者?
谢谢
您显示的 mirrors.tf
文件包含一组 provider requirements,其中包括镜像命令为您请求的 okta/okta
提供程序的引用。
为了在其他 Terraform 模块中使用相同的提供程序,您应该将相同的 required_providers
块放置在将使用 okta/okta
提供程序的每个模块的 terraform
块中。然后,Terraform 将理解,在该模块中,您打算将短名称“okta”表示为 okta/okta
,而不是默认的 hashicorp/okta
.
Terraform 默认采用 hashicorp/
命名空间中的提供程序,以便向后兼容最初为 Terraform v0.12 或更早版本编写的模块,这些模块尚不支持 third-party 提供程序的自动安装像这个。但是,如果您使用的是当前的 Terraform 版本(我写这篇文章时 v1.1 是最新的,但一直到 v0.13 都是如此),那么您通常应该在中包含一个 required_providers
块您编写的每个模块都是为了明确该模块所依赖的提供者,除非您需要您的模块 remain compatible with Terraform v0.12.