Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Invalid legacy provider address" error on Terraform

I'm trying to deploy a bitbucket pipeline using terraform v0.14.3 to create resources in google cloud. after running terraform command, the pipeline fails with this error:

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.

We updated our local version of terraform to v.0.13.0 and then ran: terraform 0.13upgrade as referenced in this guide: https://www.terraform.io/upgrade-guides/0-13.html. A versions.tf file was generated requiring terraform version >=0.13 and our required provider block now looks like this:

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
}

We still get the same error when initiating the bitbucket pipeline. Does anyone know how to get past this error? Thanks in advance.

like image 668
Laura H. Avatar asked Dec 21 '20 16:12

Laura H.


People also ask

How do I find my Terraform provider version?

Use the version subcommand to check your Terraform version and the version of any providers your configuration is using.

What is local provider in Terraform?

The Local provider is used to manage local resources, such as files. Use the navigation to the left to read about the available resources. Note. Terraform primarily deals with remote resources which are able to outlive a single Terraform run, and so local resources can sometimes violate its assumptions.


4 Answers

Solution

If you are using a newer version of Terraform, such as v0.14.x, you should:

  1. use the replace-provider subcommand

    terraform state replace-provider \
    -auto-approve \
    "registry.terraform.io/-/google" \
    "hashicorp/google"
    
    #=>
    
    Terraform will perform the following actions:
    
      ~ Updating provider:
        - registry.terraform.io/-/google
        + registry.terraform.io/hashicorp/google
    
    Changing x resources:
    
      . . .
    
    Successfully replaced provider for x resources.
    
  2. initialize Terraform again:

    terraform init
    
    #=>
    
    Initializing the backend...
    
    Initializing provider plugins...
    - Reusing previous version of hashicorp/google from the dependency lock file
    - Using previously-installed hashicorp/google vx.xx.x
    
    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try . . .
    

    This should take care of installing the provider.

Explanation

Terraform only supports upgrades from one major feature upgrade at a time. Your older state file was, more than likely, created using a version earlier than v0.13.x.

If you did not run the apply command before you upgraded your Terraform version, you can expect this error: the upgrade from v0.13.x to v0.14.x was not complete.

You can find more information here.

like image 110
Hassan Mussana Avatar answered Oct 19 '22 00:10

Hassan Mussana


in our case, we were on aws and had similar error

...

Error: Invalid legacy provider address

This configuration or its associated state refers to the unqualified provider
"aws".

the steps to resolve were to ensure syntax was upgraded by running terraform init again, checking the warnings and finally updating the statefile with following method.

# update provider in state file
terraform state replace-provider -- -/aws hashicorp/aws

# reinit
terraform init

specific of ops problem, if issue still occurs, verify access to the bucket location from local and from pipeline. also verify the version of terraform running in pipeline. depending on configuration it may be the remote statefile is/can not be updated.

like image 29
mirageglobe Avatar answered Oct 18 '22 23:10

mirageglobe


Same issue for me. I ran:

terraform providers

That gave me:

Providers required by configuration:
registry.terraform.io/hashicorp/google

Providers required by state:
registry.terraform.io/-/google

So I ran:

terraform state replace-provider registry.terraform.io/-/google registry.terraform.io/hashicorp/google

That did the trick.

like image 16
kjmerf Avatar answered Oct 19 '22 01:10

kjmerf


To add on, I had installed terraform 0.14.6 but the state seemed to be stuck in 0.12. In my case I had 3 references that were off, this article helped me pinpoint which ones (all the entries in "Providers required by state" which had a - in the link. https://github.com/hashicorp/terraform/issues/27615 I corrected it by running the replace-provider command for each entry which was off, then running terraform init. I note doing this and running a git diff, the tfstate has been updated and now uses 0.14.x terraform instead of my previous 0.12.x. i.e.

terraform providers

terraform state replace-provider registry.terraform.io/-/azurerm registry.terraform.io/hashicorp/azurerm 
like image 3
DeltaPng Avatar answered Oct 18 '22 23:10

DeltaPng