我正在尝试使用terraform v0.14.3部署一个bitbucket管道,以便在google云中创建资源。运行terraform命令后,管道失败,并显示以下错误:
Error: Invalid legacy provider address
This configuration or its associated state refers to the unqualified provider
"google".
You must complete the Terraform 0.13 upgrade process before upgrading to later
versions.
我们将terraform的本地版本更新为v.0.13.0,然后按照本指南中的引用运行:terraform 0.13upgrade
:https://www.terraform.io/upgrade-guides/0-13.html。生成了一个需要terraform版本>=0.13的versions.tf文件,我们所需的提供程序块现在看起来如下所示:
terraform {
backend "gcs" {
bucket = "some-bucket"
prefix = "terraform/state"
credentials = "key.json" #this is just a bitbucket pipeline variable
}
required_providers {
google = {
source = "hashicorp/google"
version = "~> 2.20.0"
}
}
}
provider "google" {
project = var.project_ID
credentials = "key.json"
region = var.project_region
}
当启动bitbucket管道时,我们仍然得到相同的错误。有没有人知道如何克服这个错误?提前谢谢。
发布于 2020-12-28 17:13:22
解决方案
如果您使用的是较新版本的Terraform,如v0.14.x
,则应:
replace-provider
子命令terraform状态replace-provider \ -auto-approve \ " registry.terraform.io/-/google“\ "hashicorp/google”#=> Terraform将执行以下操作:~更新提供程序:-registry.terraform.io/-/google+ registry.terraform.io/hashicorp/google Changing x resources:。。。已成功替换%x资源的提供程序。
terraform初始化#=>正在初始化后端...正在初始化提供程序插件...-重用依赖锁文件中的先前版本的hashicorp/google -使用先前安装的hashicorp/google vx.xx.x Terraform已成功初始化!你现在可以开始使用Terraform了。试试看。。。
这应负责安装提供程序。
解释
Terraform一次只支持从一个主要功能升级升级。您的旧状态文件很可能是使用早于v0.13.x
的版本创建的。
如果在升级Terraform版本之前没有运行apply
命令,则可能会出现以下错误:从v0.13.x
到v0.14.x
的升级未完成。
你可以在here上找到更多信息。
发布于 2021-02-01 00:47:49
在我们的例子中,我们使用的是aws,并且有类似的错误
...
Error: Invalid legacy provider address
This configuration or its associated state refers to the unqualified provider
"aws".
要解决的步骤是确保语法升级,方法是再次运行terraform init
,检查警告,最后使用以下方法更新状态文件。
# update provider in state file
terraform state replace-provider -- -/aws hashicorp/aws
# reinit
terraform init
操作问题的具体情况,如果问题仍然存在,请验证从本地和从管道对存储桶位置的访问。还要验证运行在管道中的terraform的版本。根据配置的不同,可能会更新/不能更新远程状态文件。
发布于 2021-03-26 03:41:10
我也有同样的问题。我跑了一下:
terraform providers
这给了我:
Providers required by configuration:
registry.terraform.io/hashicorp/google
Providers required by state:
registry.terraform.io/-/google
所以我跑了:
terraform state replace-provider registry.terraform.io/-/google registry.terraform.io/hashicorp/google
这就起到了作用。
https://stackoverflow.com/questions/65396812
复制相似问题