When working with Terraform, encountering errors related to provider packages can disrupt deployments and infrastructure automation. One common challenge is the “failed to query available provider packages” error, which can arise due to various factors such as network issues, version mismatches, or misconfigurations.
What we’ll cover in this article:
The “failed to query available provider packages” error occurs when Terraform cannot retrieve the necessary provider packages from the Terraform Registry or other configured provider sources. It usually happens due to network issues, misconfigured provider constraints, or authentication problems.
Below are common causes of this error and their solutions.
1. Network connectivity issues
Terraform downloads provider plugins from the Terraform Registry. If your system does not have internet access, a firewall blocks registry access, or a proxy misconfiguration exists, Terraform cannot fetch the provider package.
For example, when you run terraform init
, you can get the following error message:
Error: Failed to query available provider packages
Could not retrieve the list of available versions for provider "hashicorp/aws":
No response from registry.terraform.io
You have two options to fix this:
- Check your internet connection using
ping registry.terraform.io
. If there’s no response, your network might be blocking access. - Use a proxy if needed:
export HTTPS_PROXY="http://proxy.example.com:8080"
export HTTP_PROXY="http://proxy.example.com:8080"
- Manually download the provider or use a local mirror:
terraform providers mirror ./providers
Then use the -plugin-dir
option:
terraform init -plugin-dir=./providers
2. Terraform registry is down
If registry.terraform.io is experiencing downtime or service disruptions, Terraform cannot fetch provider packages.
Running terraform init
during a registry outage returns the following message:
Failed to query available provider packages
registry.terraform.io is unavailable
If this happens, first check the Terraform Registry status and wait until services are restored.
To avoid such issues in the future, consider using a local mirror or a private provider registry as a fallback.
3. Invalid provider version constraint
Terraform fails if you specify a provider version that doesn’t exist or isn’t compatible with your Terraform version.
For example:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "100.0.0" # Invalid version
}
}
}
Would give us the following message:
Error: Failed to query available provider packages
No versions of provider "hashicorp/aws" match 100.0.0
To fix this, first, check available provider versions:
terraform providers mirror ./providers
Use a valid version in required_providers
:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
Then run:
terraform init -upgrade
4. Outdated Terraform version
Older Terraform versions may not support newer provider versions, leading to the “failed to query available provider packages”
error.
If we use Terraform v0.12 with a provider that requires v1.0+, we get this message:
Failed to query available provider packages
Terraform version 0.12.0 does not support provider "hashicorp/aws" version 5.0.0
The solution is to upgrade Terraform:
terraform -v # Check current version
brew upgrade terraform # MacOS
choco upgrade terraform # Windows
For better version control, consider using a version manager like tfenv or tenv to manage multiple Terraform versions across environments.
Then update your Terraform configuration:
terraform {
required_version = ">= 1.0.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
5. Corrupt .terraform directory
If the .terraform
directory is partially initialized or corrupted, Terraform may not be able to query available provider packages.
Let’s see what happens when we run terraform init
after an incomplete installation:
Failed to query available provider packages
To fix this error, delete the .terraform
directory and reinitialize:
rm -rf .terraform
terraform init
6. Provider block is missing or incorrect
If the provider block is missing or incorrectly configured, Terraform may not recognize the required provider.
For example:
resource "aws_instance" "example" {
ami = "ami-123456"
instance_type = "t2.micro"
}
Terraform does not know which provider to use, so it returns the following error message:
Error: Failed to query available provider packages
The solution is simple here — add a provider block:
provider "aws" {
region = "us-east-1"
}
7. Using an unsupported or untrusted provider
If a provider is deprecated, removed, or from an untrusted source, Terraform cannot fetch it.
Let’s try using the following provider:
terraform {
required_providers {
mycustom = {
source = "custom/mycustom"
}
}
}
This would result in the following:
Error: Failed to query available provider packages
Could not retrieve versions for provider "custom/mycustom"
Remember to use only officially supported providers from the Terraform registry.
If you are using a private registry, don’t forget to configure authentication:
export TF_CLI_CONFIG_FILE="$HOME/.terraformrc"
Here’s a summary table of the edge scenarios for the "failed to query available provider packages"
error:
Edge case | Cause | Error message | Solution |
Provider installed locally, but version is incompatible | Cached provider version is outdated or incompatible with Terraform. | The cached provider hashicorp/aws is incompatible with the current Terraform version. |
Run terraform init -upgrade or delete .terraform and reinitialize. |
Custom provider using an incorrect source address | Incorrect source in required_providers block. |
Could not retrieve provider "wrongsource.com/myprovider" |
Use a correct and trusted provider source, authenticate if using a private registry. |
Terraform state references a nonexistent provider | State file (terraform.tfstate ) refers to a removed provider. |
Provider "example.com/deprecated/provider" not found |
Run terraform state replace-provider or terraform state rm if removing an obsolete provider. |
Lock file (.terraform.lock.hcl ) conflicts |
Lock file specifies an unavailable provider version. | The provider version in .terraform.lock.hcl is unavailable. |
Delete .terraform.lock.hcl and run terraform init -upgrade . |
Using multiple Terraform versions across environments | Different Terraform versions in local vs. CI/CD environments. | Provider hashicorp/aws version 5.0.0 is not compatible with Terraform 0.12.0 |
Use .terraform-version or ensure the same version is installed across all environments. |
Private provider registry authentication expired | Expired API token or missing authentication for a private registry. | Authentication error retrieving provider list from company.example.com |
Re-authenticate using terraform login or update credentials in .terraformrc . |
Insufficient permissions on shared filesystem | Terraform lacks write permissions on .terraform/ . |
Permission denied: .terraform/ |
Run chmod -R u+w .terraform/ or check IAM roles if using Terraform Cloud. |
Running Terraform inside a container with no persistent storage | No persistent storage in a containerized Terraform execution. | Failed to query available provider packages |
Mount a persistent volume for .terraform when running inside a container. |
In this article, we covered different cases where the Terraform “failed to query available provider packages”
error could occur and how to solve it.
We encourage you to explore how Spacelift makes it easy to work with Terraform. If you need help managing your Terraform infrastructure, building more complex workflows based on Terraform, and managing AWS credentials per run, instead of using a static pair on your local machine, Spacelift is a fantastic tool for this.
To learn more about Spacelift, create a free account today or book a demo with one of our engineers.
Note: New versions of Terraform are placed under the BUSL license, but everything created before version 1.5.x stays open-source. OpenTofu is an open-source version of Terraform that expands on Terraform’s existing concepts and offerings. It is a viable alternative to HashiCorp’s Terraform, being forked from Terraform version 1.5.6.
Discover better way to manage Terraform at scale
Spacelift takes managing infrastructure at scale to a whole new level, offering a more open, more customizable, and more extensible product. It’s a better, more flexible CI/CD for Terraform, offering maximum security without sacrificing functionality.