模块内部无法识别配置的提供程序



我正在为一个新项目进行Terraform配置。该项目由多个微服务组成,我已经为其编写了模块。该项目应该托管在Digitalocean上,所以我安装了Terraform DigitaloceanProvider作为必需的提供商:

# ./versions.tf
terraform {
required_version = ">= 0.14"
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "2.3.0"
}
}
}

然后在./main.tf:中"初始化">

provider "digitalocean" {
token = var.do_token
}

但是,当我尝试运行terraform init时,由于错误Error: Failed to query available provider packages.而失败

terraform providers揭示了发生这种情况是因为模块试图要求提供者hashicorp/digitalocean而不是digitalocean/digitalocean:

├── provider[registry.terraform.io/digitalocean/digitalocean] 2.3.0
├── provider[registry.terraform.io/hashicorp/kubernetes] 1.13.3
├── provider[registry.terraform.io/hashicorp/kubernetes-alpha] 0.2.1
└── module.spaces
└── provider[registry.terraform.io/hashicorp/digitalocean]

我试图通过module中的providers选项传递一个提供者,但这似乎没有什么区别:

module "spaces" {
source     = "./Spaces"
providers = {
digitalocean = digitalocean
}
}

这可能是Terraform 0.14中的一个错误,还是我只是误解了?

谢谢。

在子模块中使用它时会失败,因为您只有顶级的required_providers配置,您需要在每个模块中添加它。

这将在本线程中详细解释

需要在每个模块中声明提供程序源,因为提供者源代码工作有趣的副作用是,我们现在可以在配置中使用多个具有相同名称的提供程序。每个模块可以使用具有不同源的名为"dns"的提供程序。在内部,terraform使用源创建FQN(完全限定name(,因此您可以拥有例如三个模块,每个使用一个";mildwonkey/dns"hashicorp/dns";以及";yourname/dns";。

最新更新