首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:当将资源解压缩到模块中时,依赖项锁定文件不一致

错误:当将资源解压缩到模块中时,依赖项锁定文件不一致
EN

Stack Overflow用户
提问于 2022-08-11 11:07:02
回答 1查看 400关注 0票数 0

我对terraform很陌生,当我将其中一个资源提取到一个模块中时,我得到了以下内容:

代码语言:javascript
复制
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

我做得怎么样?

首先我有这样的想法:

代码语言:javascript
复制
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资源声明提取到一个模块中:

代码语言:javascript
复制
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的内容如下:

代码语言:javascript
复制
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给我看了上面的错误!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-11 12:46:32

要使这段代码工作,您必须在根模块和子模块中都有required_providers块。因此,需要做到以下几点:

  1. required_providers块添加到根模块(这是您已经拥有的)
  2. required_providers块添加到子模块并将其正确命名(目前您已将其设置为mycloudprovider "heroku" {}块缺失)

G 210

需要添加到根模块中的代码是:

代码语言:javascript
复制
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)中,需要有以下内容:

代码语言:javascript
复制
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_providersprovider <name> {}块。另外,确保删除.terraform目录并重新运行terraform init

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73319637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档