我对terraform很陌生,当我将其中一个资源提取到一个模块中时,我得到了以下内容:
Error: Inconsistent dependency lock file
│
│ The following dependency selections recorded in the lock file are inconsistent with the current
│ configuration:
│ - provider registry.terraform.io/hashicorp/heroku: required by this configuration but no version is selected
│
│ To update the locked dependency selections to match a changed configuration, run:
│ terraform init -upgrade我做得怎么样?
首先我有这样的想法:
provider "heroku" {}
resource "heroku_app" "example" {
name = "learn-terraform-heroku-ob"
region = "us"
}
resource "heroku_addon" "redis" {
app = heroku_app.example.id
plan = "rediscloud:30"
}在此之后,terraform init没有错误地运行,terraform plan也成功了。
然后,我将redis资源声明提取到一个模块中:
provider "heroku" {}
resource "heroku_app" "example" {
name = "learn-terraform-heroku-ob"
region = "us"
}
module "key-value-store" {
source = "./modules/key-value-store"
app = heroku_app.example.id
plan = "30"
}modules/key-value-store/main.tf的内容如下:
terraform {
required_providers {
mycloud = {
source = "heroku/heroku"
version = "~> 4.6"
}
}
}
resource "heroku_addon" "redis" {
app = var.app
plan = "rediscloud:${var.plan}"
}terraform get做得很好。但是terraform plan给我看了上面的错误!
发布于 2022-08-11 12:46:32
要使这段代码工作,您必须在根模块和子模块中都有required_providers块。因此,需要做到以下几点:
required_providers块添加到根模块(这是您已经拥有的)required_providers块添加到子模块并将其正确命名(目前您已将其设置为mycloud,provider "heroku" {}块缺失)G 210
需要添加到根模块中的代码是:
terraform {
required_providers {
heroku = {
source = "heroku/heroku"
version = "~> 4.6"
}
}
}
provider "heroku" {}
resource "heroku_app" "example" {
name = "learn-terraform-heroku-ob"
region = "us"
}
module "key-value-store" {
source = "./modules/key-value-store"
app = heroku_app.example.id
plan = "30"
}在子模块(即./modules/key-value-store)中,需要有以下内容:
terraform {
required_providers {
heroku = { ### not mycloud
source = "heroku/heroku"
version = "~> 4.6"
}
}
}
provider "heroku" {} ### this was missing as well
resource "heroku_addon" "redis" {
app = var.app
plan = "rediscloud:${var.plan}"
}当第二个资源被移动到模块时,它停止工作,因为Heroku不是正式的Terraform提供程序,因此提供程序设置不会传播到模块。对于非官方提供者(例如,标记为verified),必须定义相应的required_providers和provider <name> {}块。另外,确保删除.terraform目录并重新运行terraform init。
https://stackoverflow.com/questions/73319637
复制相似问题