Terraform 地形状态用错误数据替换提供程序更新状态

Terraform 地形状态用错误数据替换提供程序更新状态,terraform,terraform-provider-azure,azure-rm,Terraform,Terraform Provider Azure,Azure Rm,我们升级了terraform版本,terraform远程状态出现问题。基本上,我可以运行此命令来更新azurerm提供程序: terraform state replace-provider 'registry.terraform.io/-/azurerm' 'registry.terraform.io/hashicorp/azurerm' 现在,当我运行plan命令时,它会显示一些错误。所有的资源都是相同的,但如果不同的话。例如: To work with module.name.modul

我们升级了terraform版本,terraform远程状态出现问题。基本上,我可以运行此命令来更新azurerm提供程序:

terraform state replace-provider 'registry.terraform.io/-/azurerm' 'registry.terraform.io/hashicorp/azurerm'
现在,当我运行plan命令时,它会显示一些错误。所有的资源都是相同的,但如果不同的话。例如:

To work with module.name.module.lb_name.azurerm_lb_probe.instance
its original provider configuration at
provider["registry.terraform.io/-/azurerm"] is required, but it has been
removed. This occurs when a provider configuration is removed while objects
created by that provider still exist in the state. Re-add the provider
configuration to destroy
module.name.module.lb_name.azurerm_lb_probe.instance, after which
you can remove the provider configuration again.
基本上,状态已更新,提供程序如下所示:

"provider": "provider.azurerm"
"provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]"
但它应该是这样的:

"provider": "provider.azurerm"
"provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]"

有没有办法通过terraform命令更新它,或者修复它的唯一方法是手动编辑状态文件?

当您用命令替换terraform升级的提供程序时:

terraform state replace-provider 'registry.terraform.io/-/azurerm' 'registry.terraform.io/hashicorp/azurerm'
好的,没问题。然后,您可以使用下面的命令检查当前提供程序:

terraform providers
屏幕截图将显示如下:

"provider": "provider.azurerm"
"provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]"

此时,提供者与需求相同。然后,您需要再次初始化以使用以下命令拉取当前提供程序来替换现有的提供程序:

terraform init


这是您错过的步骤。

当您使用以下命令替换Terraform升级的提供程序时:

terraform state replace-provider 'registry.terraform.io/-/azurerm' 'registry.terraform.io/hashicorp/azurerm'
好的,没问题。然后,您可以使用下面的命令检查当前提供程序:

terraform providers
屏幕截图将显示如下:

"provider": "provider.azurerm"
"provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]"

此时,提供者与需求相同。然后,您需要再次初始化以使用以下命令拉取当前提供程序来替换现有的提供程序:

terraform init


这是您错过的步骤。

“向我显示一些错误”-不具体。错误到底是什么?我用一个例子更新了这个问题。我们在其他环境中遇到了类似的问题,解决方案是更新状态文件中的提供者,正如我前面提到的。问题是它发生在生产环境中,我们只是不想手动修改它。Terraform是否提供了CLI工具来帮助在版本之间进行更改,如
0.12upgrade
0.13upgrade
?根据错误消息,还需要更新相关模块的提供程序。这也可能意味着更新模块本身中所需的提供程序块,然后为模块再次替换处于该状态的提供程序。有关于此问题的更新吗?它能解决你的问题吗?如果它对你有效,请接受它。“向我显示一些错误”-不具体。错误到底是什么?我用一个例子更新了这个问题。我们在其他环境中遇到了类似的问题,解决方案是更新状态文件中的提供者,正如我前面提到的。问题是它发生在生产环境中,我们只是不想手动修改它。Terraform是否提供了CLI工具来帮助在版本之间进行更改,如
0.12upgrade
0.13upgrade
?根据错误消息,还需要更新相关模块的提供程序。这也可能意味着更新模块本身中所需的提供程序块,然后为模块再次替换处于该状态的提供程序。有关于此问题的更新吗?它能解决你的问题吗?如果它适合你,请接受它。