Snowflake-Labs / terraform-provider-snowflake

Terraform provider for managing Snowflake accounts
https://registry.terraform.io/providers/Snowflake-Labs/snowflake/latest
MIT License
532 stars 413 forks source link

[Bug]: consumer snowflake_shared_database cannot be destroyed if provider share is dropped/re-created #3096

Open simonepm opened 2 hours ago

simonepm commented 2 hours ago

Terraform CLI Version

1.9.5

Terraform Provider Version

0.96.0

Terraform Configuration

resource "snowflake_shared_database" "DB_NAME" {
  name = "DB_NAME"
  from_share = "ORG_NAME.ACC_NAME.DB_NAME"
}

Category

category:resource

Object type(s)

resource:share

Expected Behavior

Destroy operation for snowflake_shared_database should not be dependent on the accessibility of its underlying provider database to be able to perform a destruction when needed. Such access can be lost in case the provider database and share gets re-created.

Actual Behavior

When creating an imported database via snowflake_shared_database, if the provider database gets re-created we need to re-create the consumer database as well.

Destroy of snowflake_shared_database fails due to: Shared database is no longer available for use. It will need to be re-created if and when the publisher makes it available again.

Steps to Reproduce

Create a share from account A to account B Deploy a snowflake_shared_database in account B sourcing from account A share Re-create share in account A Destroy snowflake_shared_database in account B (ERROR)

How much impact is this issue causing?

Low

Logs

No response

Additional Information

No response

Would you like to implement a fix?

sfc-gh-jcieslak commented 2 hours ago

Hey @simonepm šŸ‘‹ Thanks for reporting the issue. I'll take a look at it as soon as possible.

simonepm commented 1 hour ago

Thanks! As a workaround I am using:

resource "snowflake_unsafe_execute" "CREATE_DATABASE_DB_NAME" { execute = "CREATE DATABASE DB_NAME FROM SHARE ORG_NAME.ACC_NAME.DB_NAME" revert = "DROP DATABASE DB_NAME" }

snowflake_unsafe_execute does not try to use the database context and then works without throwing errors.