Skip to content

Commit

Permalink
Allow deletion of resource_bigquery_table when it still has associate…
Browse files Browse the repository at this point in the history
…d resource tags (#10568)
  • Loading branch information
wj-chen authored May 7, 2024
1 parent 29ad7f6 commit 3254c2c
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 8 deletions.
7 changes: 7 additions & 0 deletions mmv1/products/bigquery/Table.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -516,3 +516,10 @@ properties:
in the namespaced format, for example "123456789012/environment" where 123456789012 is the
ID of the parent organization or project resource for this tag key. Tag value is expected
to be the short name, for example "Production".
virtual_fields:
- !ruby/object:Api::Type::Boolean
name: 'allow_resource_tags_on_deletion'
min_version: beta
description: |
Whether or not to allow table deletion when there are still resource tags attached.
default_value: false
Original file line number Diff line number Diff line change
Expand Up @@ -1157,6 +1157,15 @@ func ResourceBigQueryTable() *schema.Resource {
Description: `Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a terraform destroy or terraform apply that would delete the instance will fail.`,
},

<% unless version == 'ga' -%>
"allow_resource_tags_on_deletion": {
Type: schema.TypeBool,
Optional: true,
Default: false,
Description: `Whether or not to allow table deletion when there are still resource tags attached.`,
},

<% end -%>
// TableConstraints: [Optional] Defines the primary key and foreign keys.
"table_constraints": {
Type: schema.TypeList,
Expand Down Expand Up @@ -1834,13 +1843,15 @@ func resourceBigQueryTableDelete(d *schema.ResourceData, meta interface{}) error
}
<% unless version == 'ga' -%>
if v, ok := d.GetOk("resource_tags"); ok {
var resourceTags []string
if !d.Get("allow_resource_tags_on_deletion").(bool) {
var resourceTags []string

for k, v := range v.(map[string]interface{}) {
resourceTags = append(resourceTags, fmt.Sprintf("%s:%s", k, v.(string)))
}
for k, v := range v.(map[string]interface{}) {
resourceTags = append(resourceTags, fmt.Sprintf("%s:%s", k, v.(string)))
}

return fmt.Errorf("cannot destroy table %v without clearing the following resource tags: %v", d.Id(), resourceTags)
return fmt.Errorf("cannot destroy table %v without unsetting the following resource tags or setting allow_resource_tags_on_deletion=true: %v", d.Id(), resourceTags)
}
}

<% end -%>
Expand Down Expand Up @@ -2675,6 +2686,11 @@ func resourceBigQueryTableImport(d *schema.ResourceData, meta interface{}) ([]*s
if err := d.Set("deletion_protection", true); err != nil {
return nil, fmt.Errorf("Error setting deletion_protection: %s", err)
}
<% unless version == 'ga' -%>
if err := d.Set("allow_resource_tags_on_deletion", false); err != nil {
return nil, fmt.Errorf("Error setting allow_resource_tags_on_deletion: %s", err)
}
<% end -%>

// Replace import id for the resource id
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/datasets/{{dataset_id}}/tables/{{table_id}}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1579,7 +1579,7 @@ func TestAccBigQueryTable_ResourceTags(t *testing.T) {
ResourceName: "google_bigquery_table.test",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"deletion_protection"},
ImportStateVerifyIgnore: []string{"deletion_protection", "allow_resource_tags_on_deletion"},
},
{
Config: testAccBigQueryTableWithResourceTagsUpdate(context),
Expand All @@ -1588,7 +1588,7 @@ func TestAccBigQueryTable_ResourceTags(t *testing.T) {
ResourceName: "google_bigquery_table.test",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"deletion_protection"},
ImportStateVerifyIgnore: []string{"deletion_protection", "allow_resource_tags_on_deletion"},
},
// testAccBigQueryTableWithResourceTagsDestroy must be called at the end of this test to clear the resource tag bindings of the table before deletion.
{
Expand All @@ -1598,7 +1598,7 @@ func TestAccBigQueryTable_ResourceTags(t *testing.T) {
ResourceName: "google_bigquery_table.test",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"deletion_protection"},
ImportStateVerifyIgnore: []string{"deletion_protection", "allow_resource_tags_on_deletion"},
},
},
})
Expand Down Expand Up @@ -4001,6 +4001,7 @@ resource "google_bigquery_table" "test" {
provider = google-beta

deletion_protection = false
allow_resource_tags_on_deletion = true
dataset_id = "${google_bigquery_dataset.test.dataset_id}"
table_id = "%{table_id}"
resource_tags = {
Expand Down Expand Up @@ -4050,6 +4051,7 @@ resource "google_bigquery_table" "test" {
provider = google-beta

deletion_protection = false
allow_resource_tags_on_deletion = true
dataset_id = "${google_bigquery_dataset.test.dataset_id}"
table_id = "%{table_id}"
resource_tags = {
Expand Down Expand Up @@ -4100,6 +4102,7 @@ resource "google_bigquery_table" "test" {
provider = google-beta

deletion_protection = false
allow_resource_tags_on_deletion = true
dataset_id = "${google_bigquery_dataset.test.dataset_id}"
table_id = "%{table_id}"
resource_tags = {}
Expand Down

0 comments on commit 3254c2c

Please sign in to comment.