We have a requirement to change the provider from chanzuckerberg/snowflake to Snowflake-Labs/snowflake.
This change is done by changing
terraform {
required_providers {
snowflake = {
source = "chanzuckerberg/snowflake"
version = "0.25.36"
}
}
backend "s3" {
}
}
provider snowflake {
}
to
terraform {
required_providers {
snowflake = {
source = "Snowflake-Labs/snowflake"
version = "0.61.0"
}
}
backend "s3" {
}
}
provider snowflake {
}
We get the following error.
│ Warning: Additional provider information from registry
│
│ The remote registry returned warnings for
│ registry.terraform.io/chanzuckerberg/snowflake:
│ - For users on Terraform 0.13 or greater, this provider has moved to
│ Snowflake-Labs/snowflake. Please update your source in required_providers.
╵
╷
│ Error: Incompatible provider version
│
│ Provider registry.terraform.io/chanzuckerberg/snowflake v0.47.0 does not
│ have a package available for your current platform, linux_amd64.
│
│ Provider releases are separate from Terraform CLI releases, so not all
│ providers are available for all platforms. Other versions of this provider
│ may have different platforms supported.
╵
It sounds like the previous provider chanzuckerberg somewhere exists, thus causing an issue?
Any help is appreciated
terraform init and terraform plan works fine locally.
terraform providers provided (local run) the below
-- provider[registry.terraform.io/snowflake-labs/snowflake] 0.61.0
The error is at code build and our environment is an existing one.
If this configuration was already used to create some remote objects using the
chanzuckerberg/snowflakeprovider then Terraform will be tracking in the state that those existing objects belong to that provider.Normally the process here would be to run
terraform applyin a working directory where both providers are installed and then Terraform will notice that the configuration has changed to useSnowflake-Labs/snowflakeinstead, and so it will update the state to match.However, since the provider
chanzuckerberg/snowflakeseems to have no packages available for your current architecture, Terraform cannot perform that changeover automatically in this case.You can work around that by explicitly telling Terraform to rewrite the state to refer to the new provider:
Normally when Terraform performs these changes automatically during
terraform applyit will first check that the existing stored data makes sense for the new provider, but this command bypasses all of those checks and so it should avoid the need to install the old provider. This is safe only if the new provider has a compatible set of resource types.Once neither the configuration nor the state refer to
chanzuckerberg/snowflake, the next time you runterraform initit should no longer try to install this provider and it will also remove the relevant entry from the.terraform.lock.hclfile.