【问题标题】:Terraform state replace-provider update state with wrong dataTerraform state replace-provider update state with wrong data
【发布时间】:2021-04-22 16:59:02
【问题描述】:

我们升级了 terraform 版本,但 terraform 远程状态存在问题。 Basiacaly 我运行此命令来更新 azurerm 提供程序:

terraform state replace-provider 'registry.terraform.io/-/azurerm' 'registry.terraform.io/hashicorp/azurerm'

现在,当我运行计划命令时,它会显示一些错误。所有都是相同的,但如果不同,则资源。例如:

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\"]"

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

【问题讨论】:

  • " 显示一些错误" - 不具体。究竟是什么错误?
  • 我用一个例子更新了这个问题。我们在其他环境中遇到了类似的问题,解决方法是更新状态文件中的提供程序,正如我之前提到的。问题是它发生在生产环境中,我们只是不想手动修改它。
  • 难道没有 Terraform 提供的 CLI 工具来帮助在版本之间进行更改,例如 0.12upgrade0.13upgrade
  • 根据错误信息,还需要为相关模块更新提供程序。这也可能意味着更新模块本身中所需的提供程序块,然后再次为模块替换状态中的提供程序。
  • 关于这个问题的任何更新?它解决了你的问题吗?如果它适合你,请接受它。

标签: terraform terraform-provider-azure azure-rm


【解决方案1】:

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

terraform state replace-provider 'registry.terraform.io/-/azurerm' 'registry.terraform.io/hashicorp/azurerm'

好的,没有问题。然后你可以使用下面的命令来检查当前的提供者:

terraform providers

屏幕截图将如下所示:

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

terraform init

这是您错过的步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2010-09-21
    相关资源
    最近更新 更多