我正在尝试删除一个模块,其中包含以下提供程序块,指定了一个非HashiCorp提供程序。据我所知,非HashiCorp提供程序不会被继承,因为在运行Terraform时,它会明确地抱怨找不到“hashicorp/azuredevops”提供程序。
# Defined in module
terraform {
required_version = ">= 0.13"
required_providers {
azuredevops = {
source = "microsoft/azuredevops"
version = ">= 0.1.0"
}
}
}
我的根配置包含一个类似于以下内容的提供商块:
# Defined in root
terraform {
required_version = ">= 0.13"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.19.1"
}
azuredevops = {
source = "microsoft/azuredevops"
version = ">= 0.1.0"
}
}
}
我可以成功创建一个模块:
module "example" {
source = "../modules/example/"
application_name = "example"
location = var.location
environment = var.environment
}
但是当我尝试通过注释来删除它时,我会收到帖子开头提到的错误。
我该如何让模块从根继承微软提供程序,以便成功删除此特定模块引用?
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider
│ hashicorp/azuredevops: provider registry registry.terraform.io does not
│ have a provider named registry.terraform.io/hashicorp/azuredevops
编辑:
terraform providers
中的提供者
Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/azurerm]
└── module.example
├── provider[registry.terraform.io/hashicorp/azuredevops]
Providers required by state:
provider[registry.terraform.io/microsoft/azuredevops]
provider[registry.terraform.io/hashicorp/azurerm]
terraform providers
命令,Terraform 应该会解释每个 provider 的要求来自何处,而这些 provider 是terraform init
将尝试安装的。 你能运行此命令后编辑你的问题并包含输出吗? - Martin Atkinsmodule "example"
块,那么我不会在输出中看到module.example
的提及。您能否确认在运行此命令之前已删除该块(或等效地将其注释掉)? - Martin Atkinsmodule.example
依赖于hashicorp/azurerm
和microsoft/azuredevops
的配置。这里没有需要更改的内容:您的配置已经是正确的。 - Martin Atkinsprovider
块,因为如你所见,这样做将无法在单个步骤中删除该模块。Terraform的文档建议不要这样做,但Terraform仍然允许它,因为有现有的配置依赖于这种能力,只要没有人尝试删除子模块就可以正常工作。 - Martin Atkinsrequired_providers
块无关。问题出在provider "azuredevops"
块上,但由于您没有在问题中包含它,我无法猜到。 - Martin Atkins