From 20685a4e5657ddf16e43a8a50e55fc14a29522f1 Mon Sep 17 00:00:00 2001 From: Rajesh Guptha Date: Wed, 9 Apr 2025 16:47:14 +0000 Subject: [PATCH 01/12] Add deletion_protection field to Memcache Instance --- mmv1/products/memcache/Instance.yaml | 16 ++++- .../examples/memcache_instance_basic.tf.tmpl | 3 +- .../pre_delete/memcache_instance.go.tmpl | 3 + .../resource_memcache_instance_test.go | 65 +++++++++++++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 mmv1/templates/terraform/pre_delete/memcache_instance.go.tmpl diff --git a/mmv1/products/memcache/Instance.yaml b/mmv1/products/memcache/Instance.yaml index 8d7b62b7b0c8..5a5fe3f42414 100644 --- a/mmv1/products/memcache/Instance.yaml +++ b/mmv1/products/memcache/Instance.yaml @@ -37,7 +37,8 @@ async: base_url: '{{op_id}}' result: resource_inside_response: true -custom_code: +custom_code: !ruby/object:Provider::Terraform::CustomCode + pre_delete: 'templates/terraform/pre_delete/memcache_instance.go.tmpl' examples: - name: 'memcache_instance_basic' primary_resource_id: 'instance' @@ -46,6 +47,8 @@ examples: network_name: 'test-network' address_name: 'address' exclude_test: true + ignore_read_extra: + - 'deletion_protection' - name: 'memcache_instance_basic_test' primary_resource_id: 'instance' vars: @@ -330,3 +333,14 @@ properties: ignore_read: true item_type: type: String +virtual_fields: + - name: 'deletion_protection' + description: | + Whether Terraform will be prevented from destroying the instance. Defaults to true. + When a`terraform destroy` or `terraform apply` would delete the instance, + the command will fail if this field is not set to false in Terraform state. + When the field is set to true or unset in Terraform state, a `terraform apply` + or `terraform destroy` that would delete the instance will fail. + When the field is set to false, deleting the instance is allowed. + type: Boolean + default_value: true diff --git a/mmv1/templates/terraform/examples/memcache_instance_basic.tf.tmpl b/mmv1/templates/terraform/examples/memcache_instance_basic.tf.tmpl index 932acaa30c92..9eaaf660b5e3 100644 --- a/mmv1/templates/terraform/examples/memcache_instance_basic.tf.tmpl +++ b/mmv1/templates/terraform/examples/memcache_instance_basic.tf.tmpl @@ -27,7 +27,8 @@ resource "google_service_networking_connection" "private_service_connection" { resource "google_memcache_instance" "{{$.PrimaryResourceId}}" { name = "{{index $.Vars "instance_name"}}" authorized_network = google_service_networking_connection.private_service_connection.network - + deletion_protection = false + labels = { env = "test" } diff --git a/mmv1/templates/terraform/pre_delete/memcache_instance.go.tmpl b/mmv1/templates/terraform/pre_delete/memcache_instance.go.tmpl new file mode 100644 index 000000000000..2e195a06f441 --- /dev/null +++ b/mmv1/templates/terraform/pre_delete/memcache_instance.go.tmpl @@ -0,0 +1,3 @@ +if d.Get("deletion_protection").(bool) { + return fmt.Errorf("cannot destroy memcache instance without setting deletion_protection=false and running `terraform apply`") +} diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index 5abceeea37b9..806078e675d4 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -3,9 +3,11 @@ package memcache_test import ( "fmt" "testing" + "regexp" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-provider-google/google/acctest" + "github.com/hashicorp/terraform-provider-google/google/envvar" ) func TestAccMemcacheInstance_update(t *testing.T) { @@ -97,3 +99,66 @@ data "google_compute_network" "memcache_network" { } `, name, network) } + +func TestAccMemcacheInstance_deletionprotection(t *testing.T) { + t.Parallel() + + prefix := fmt.Sprintf("%d", acctest.RandInt(t)) + name := fmt.Sprintf("tf-test-%s", prefix) + network := acctest.BootstrapSharedServiceNetworkingConnection(t, "memcache-instance-update-1") + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckMemcacheInstanceDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-central1"), + }, + { + ResourceName: "google_memcache_instance.test", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"reserved_ip_range_id", "deletion_protection"}, + }, + { + Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), + ExpectError: regexp.MustCompile("deletion_protection"), + }, + { + Config: testAccMemcacheInstance_update(prefix, name, network), + }, + }, + }) +} + +func testAccMemcacheInstance_deletionprotection(prefix, name, network, region string) string { + return fmt.Sprintf(` + provider "google" { + project = "tags-partner-integ-test" + user_project_override = true +} +resource "google_memcache_instance" "test" { + name = "%s" + region = "%s" + authorized_network = data.google_compute_network.memcache_network.id + deletion_protection = true + node_config { + cpu_count = 1 + memory_size_mb = 1024 + } + node_count = 1 + memcache_parameters { + params = { + "listen-backlog" = "2048" + "max-item-size" = "8388608" + } + } + reserved_ip_range_id = ["tf-bootstrap-addr-memcache-instance-update-1"] +} +data "google_compute_network" "memcache_network" { + name = "%s" +} +`, name, region, network) +} + From f6b8672943b64c5f7708708d2cfb37355755e8be Mon Sep 17 00:00:00 2001 From: Rajesh Guptha Date: Mon, 14 Apr 2025 10:20:51 +0000 Subject: [PATCH 02/12] Updated resource_memcache_instance_test.go --- .../services/memcache/resource_memcache_instance_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index 806078e675d4..be108b800c31 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -7,7 +7,6 @@ import ( "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-provider-google/google/acctest" - "github.com/hashicorp/terraform-provider-google/google/envvar" ) func TestAccMemcacheInstance_update(t *testing.T) { From c1df17d2e1843e098d71b910cfd426864b2540ab Mon Sep 17 00:00:00 2001 From: "Stephen Lewis (Burrows)" Date: Mon, 14 Apr 2025 11:31:43 -0700 Subject: [PATCH 03/12] Apply suggestions from code review --- mmv1/products/memcache/Instance.yaml | 4 ++-- .../memcache/resource_memcache_instance_test.go | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/mmv1/products/memcache/Instance.yaml b/mmv1/products/memcache/Instance.yaml index 5a5fe3f42414..fdff886fe364 100644 --- a/mmv1/products/memcache/Instance.yaml +++ b/mmv1/products/memcache/Instance.yaml @@ -37,7 +37,7 @@ async: base_url: '{{op_id}}' result: resource_inside_response: true -custom_code: !ruby/object:Provider::Terraform::CustomCode +custom_code: pre_delete: 'templates/terraform/pre_delete/memcache_instance.go.tmpl' examples: - name: 'memcache_instance_basic' @@ -337,7 +337,7 @@ virtual_fields: - name: 'deletion_protection' description: | Whether Terraform will be prevented from destroying the instance. Defaults to true. - When a`terraform destroy` or `terraform apply` would delete the instance, + When a `terraform destroy` or `terraform apply` would delete the instance, the command will fail if this field is not set to false in Terraform state. When the field is set to true or unset in Terraform state, a `terraform apply` or `terraform destroy` that would delete the instance will fail. diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index be108b800c31..b9fc3994a218 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -124,8 +124,25 @@ func TestAccMemcacheInstance_deletionprotection(t *testing.T) { Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), ExpectError: regexp.MustCompile("deletion_protection"), }, + { + ResourceName: "google_memcache_instance.test", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"reserved_ip_range_id", "deletion_protection"}, + }, { Config: testAccMemcacheInstance_update(prefix, name, network), + ConfigPlanChecks: resource.ConfigPlanChecks{ + PreApply: []plancheck.PlanCheck{ + plancheck.ExpectResourceAction("google_memcache_instance.test", plancheck.ResourceActionUpdate), + }, + }, + }, + { + ResourceName: "google_memcache_instance.test", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"reserved_ip_range_id", "deletion_protection"}, }, }, }) From 520f18223c35f059a0b562d5885f76d3fa2b0664 Mon Sep 17 00:00:00 2001 From: "Stephen Lewis (Burrows)" Date: Mon, 14 Apr 2025 11:47:49 -0700 Subject: [PATCH 04/12] Update mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go --- .../services/memcache/resource_memcache_instance_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index b9fc3994a218..f610b1cd4330 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -6,6 +6,7 @@ import ( "regexp" "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-provider-google/google/acctest" ) From e29369b580d366be8e822a9d749df8d0986f5628 Mon Sep 17 00:00:00 2001 From: "Stephen Lewis (Burrows)" Date: Mon, 14 Apr 2025 11:54:57 -0700 Subject: [PATCH 05/12] Apply suggestions from code review --- .../services/memcache/resource_memcache_instance_test.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index f610b1cd4330..d111d5a20e96 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -2,8 +2,8 @@ package memcache_test import ( "fmt" - "testing" "regexp" + "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/plancheck" @@ -122,8 +122,9 @@ func TestAccMemcacheInstance_deletionprotection(t *testing.T) { ImportStateVerifyIgnore: []string{"reserved_ip_range_id", "deletion_protection"}, }, { - Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), - ExpectError: regexp.MustCompile("deletion_protection"), + Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), + ExpectError: regexp.MustCompile("deletion_protection"), + }, }, { ResourceName: "google_memcache_instance.test", From 50aee9a41ee372b8bd54e698cbd7801e6ae329c8 Mon Sep 17 00:00:00 2001 From: "Stephen Lewis (Burrows)" Date: Tue, 15 Apr 2025 10:31:40 -0700 Subject: [PATCH 06/12] Update mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go --- .../services/memcache/resource_memcache_instance_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index d111d5a20e96..68cd851040be 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -125,7 +125,6 @@ func TestAccMemcacheInstance_deletionprotection(t *testing.T) { Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), ExpectError: regexp.MustCompile("deletion_protection"), }, - }, { ResourceName: "google_memcache_instance.test", ImportState: true, From 9a33ad4f1295e5e5dbc6fa528ca8de0fa919839c Mon Sep 17 00:00:00 2001 From: "Stephen Lewis (Burrows)" Date: Tue, 15 Apr 2025 10:34:23 -0700 Subject: [PATCH 07/12] remove extra trailing newline --- .../services/memcache/resource_memcache_instance_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index 68cd851040be..80808eda5ede 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -178,4 +178,3 @@ data "google_compute_network" "memcache_network" { } `, name, region, network) } - From c0ebded231aba9e21f3b537f62224141cd0521d5 Mon Sep 17 00:00:00 2001 From: Rajesh Guptha Date: Mon, 21 Apr 2025 10:05:10 +0000 Subject: [PATCH 08/12] formatted the test file --- mmv1/products/memcache/Instance.yaml | 4 +-- .../resource_memcache_instance_test.go | 27 ++++--------------- 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/mmv1/products/memcache/Instance.yaml b/mmv1/products/memcache/Instance.yaml index fdff886fe364..5a5fe3f42414 100644 --- a/mmv1/products/memcache/Instance.yaml +++ b/mmv1/products/memcache/Instance.yaml @@ -37,7 +37,7 @@ async: base_url: '{{op_id}}' result: resource_inside_response: true -custom_code: +custom_code: !ruby/object:Provider::Terraform::CustomCode pre_delete: 'templates/terraform/pre_delete/memcache_instance.go.tmpl' examples: - name: 'memcache_instance_basic' @@ -337,7 +337,7 @@ virtual_fields: - name: 'deletion_protection' description: | Whether Terraform will be prevented from destroying the instance. Defaults to true. - When a `terraform destroy` or `terraform apply` would delete the instance, + When a`terraform destroy` or `terraform apply` would delete the instance, the command will fail if this field is not set to false in Terraform state. When the field is set to true or unset in Terraform state, a `terraform apply` or `terraform destroy` that would delete the instance will fail. diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index 80808eda5ede..be108b800c31 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -2,11 +2,10 @@ package memcache_test import ( "fmt" - "regexp" "testing" + "regexp" "github.com/hashicorp/terraform-plugin-testing/helper/resource" - "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-provider-google/google/acctest" ) @@ -122,28 +121,11 @@ func TestAccMemcacheInstance_deletionprotection(t *testing.T) { ImportStateVerifyIgnore: []string{"reserved_ip_range_id", "deletion_protection"}, }, { - Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), - ExpectError: regexp.MustCompile("deletion_protection"), - }, - { - ResourceName: "google_memcache_instance.test", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"reserved_ip_range_id", "deletion_protection"}, - }, + Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), + ExpectError: regexp.MustCompile("deletion_protection"), + }, { Config: testAccMemcacheInstance_update(prefix, name, network), - ConfigPlanChecks: resource.ConfigPlanChecks{ - PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("google_memcache_instance.test", plancheck.ResourceActionUpdate), - }, - }, - }, - { - ResourceName: "google_memcache_instance.test", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"reserved_ip_range_id", "deletion_protection"}, }, }, }) @@ -178,3 +160,4 @@ data "google_compute_network" "memcache_network" { } `, name, region, network) } + From 434e7c8c1d2230ba100a632424066492fdaf96b6 Mon Sep 17 00:00:00 2001 From: Rajesh Guptha Date: Mon, 21 Apr 2025 10:08:37 +0000 Subject: [PATCH 09/12] fixed review comments --- mmv1/products/memcache/Instance.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mmv1/products/memcache/Instance.yaml b/mmv1/products/memcache/Instance.yaml index 5a5fe3f42414..5ac472d08f6f 100644 --- a/mmv1/products/memcache/Instance.yaml +++ b/mmv1/products/memcache/Instance.yaml @@ -37,7 +37,7 @@ async: base_url: '{{op_id}}' result: resource_inside_response: true -custom_code: !ruby/object:Provider::Terraform::CustomCode +custom_code: pre_delete: 'templates/terraform/pre_delete/memcache_instance.go.tmpl' examples: - name: 'memcache_instance_basic' From fc09ffcad9291abef8e25416682484175c71ca04 Mon Sep 17 00:00:00 2001 From: Rajesh Guptha Date: Tue, 22 Apr 2025 09:59:08 +0000 Subject: [PATCH 10/12] updated test file --- mmv1/products/memcache/Instance.yaml | 2 +- .../memcache/resource_memcache_instance_test.go | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/mmv1/products/memcache/Instance.yaml b/mmv1/products/memcache/Instance.yaml index 5ac472d08f6f..5a5fe3f42414 100644 --- a/mmv1/products/memcache/Instance.yaml +++ b/mmv1/products/memcache/Instance.yaml @@ -37,7 +37,7 @@ async: base_url: '{{op_id}}' result: resource_inside_response: true -custom_code: +custom_code: !ruby/object:Provider::Terraform::CustomCode pre_delete: 'templates/terraform/pre_delete/memcache_instance.go.tmpl' examples: - name: 'memcache_instance_basic' diff --git a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go index be108b800c31..357448609635 100644 --- a/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go +++ b/mmv1/third_party/terraform/services/memcache/resource_memcache_instance_test.go @@ -2,8 +2,8 @@ package memcache_test import ( "fmt" - "testing" "regexp" + "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-provider-google/google/acctest" @@ -121,9 +121,9 @@ func TestAccMemcacheInstance_deletionprotection(t *testing.T) { ImportStateVerifyIgnore: []string{"reserved_ip_range_id", "deletion_protection"}, }, { - Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), - ExpectError: regexp.MustCompile("deletion_protection"), - }, + Config: testAccMemcacheInstance_deletionprotection(prefix, name, network, "us-west2"), + ExpectError: regexp.MustCompile("deletion_protection"), + }, { Config: testAccMemcacheInstance_update(prefix, name, network), }, @@ -133,15 +133,11 @@ func TestAccMemcacheInstance_deletionprotection(t *testing.T) { func testAccMemcacheInstance_deletionprotection(prefix, name, network, region string) string { return fmt.Sprintf(` - provider "google" { - project = "tags-partner-integ-test" - user_project_override = true -} resource "google_memcache_instance" "test" { name = "%s" region = "%s" authorized_network = data.google_compute_network.memcache_network.id - deletion_protection = true + deletion_protection = false node_config { cpu_count = 1 memory_size_mb = 1024 @@ -160,4 +156,3 @@ data "google_compute_network" "memcache_network" { } `, name, region, network) } - From fd65ba9dd88c9df2cd668d10e6ca788bf11ad4f0 Mon Sep 17 00:00:00 2001 From: Rajesh Guptha Date: Wed, 23 Apr 2025 10:06:32 +0000 Subject: [PATCH 11/12] fixed formatting issues --- ...urce_dataproc_metastore_federation_test.go | 78 +++++++------------ 1 file changed, 26 insertions(+), 52 deletions(-) diff --git a/mmv1/third_party/terraform/services/dataprocmetastore/resource_dataproc_metastore_federation_test.go b/mmv1/third_party/terraform/services/dataprocmetastore/resource_dataproc_metastore_federation_test.go index f3916e9615e5..2a6fc5ca1f56 100644 --- a/mmv1/third_party/terraform/services/dataprocmetastore/resource_dataproc_metastore_federation_test.go +++ b/mmv1/third_party/terraform/services/dataprocmetastore/resource_dataproc_metastore_federation_test.go @@ -1,99 +1,73 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 package dataprocmetastore_test import ( "fmt" "github.com/hashicorp/terraform-provider-google/google/acctest" - "regexp" "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-google/google/envvar" ) -func TestAccMetastoreFederation_deletionprotection(t *testing.T) { +func TestAccMetastoreFederation_tags(t *testing.T) { t.Parallel() - name := "tf-test-metastore-" + acctest.RandString(t, 10) + org := envvar.GetTestOrgFromEnv(t) + context := map[string]interface{}{ + "random_suffix": acctest.RandString(t, 10), + } + tagKey := acctest.BootstrapSharedTestTagKey(t, "metastore-federations-tagkey") + tagValue := acctest.BootstrapSharedTestTagValue(t, "metastore-federations-tagvalue", tagKey) acctest.VcrTest(t, resource.TestCase{ PreCheck: func() { acctest.AccTestPreCheck(t) }, ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), Steps: []resource.TestStep{ { - Config: testAccMetastoreFederationDeletionProtection(name, "us-central1"), + Config: testAccMetastoreFederationTags(context, map[string]string{org + "/" + tagKey: tagValue}), }, { ResourceName: "google_dataproc_metastore_federation.default", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"deletion_protection"}, - }, - { - Config: testAccMetastoreFederationDeletionProtection(name, "us-west2"), - ExpectError: regexp.MustCompile("deletion_protection"), - }, - { - Config: testAccMetastoreFederationDeletionProtectionFalse(name, "us-central1"), - }, - { - ResourceName: "google_dataproc_metastore_federation.default", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"deletion_protection"}, + ImportStateVerifyIgnore: []string{"tags"}, }, }, }) } -func testAccMetastoreFederationDeletionProtection(name string, location string) string { +func testAccMetastoreFederationTags(context map[string]interface{}, tags map[string]string) string { + + r := acctest.Nprintf(` - return fmt.Sprintf(` resource "google_dataproc_metastore_service" "default" { - service_id = "%s" + service_id = "metastore-srv-sep16" location = "us-central1" tier = "DEVELOPER" - hive_metastore_config { - version = "3.1.2" - endpoint_protocol = "GRPC" - } - } - resource "google_dataproc_metastore_federation" "default" { - federation_id = "%s" - location = "%s" - version = "3.1.2" - deletion_protection = true - backend_metastores { - rank = "1" - name = google_dataproc_metastore_service.default.id - metastore_type = "DATAPROC_METASTORE" - } -} -`, name, name, location) -} -func testAccMetastoreFederationDeletionProtectionFalse(name string, location string) string { - return fmt.Sprintf(` - resource "google_dataproc_metastore_service" "default" { - service_id = "%s" - location = "us-central1" - tier = "DEVELOPER" hive_metastore_config { version = "3.1.2" endpoint_protocol = "GRPC" } } resource "google_dataproc_metastore_federation" "default" { - federation_id = "%s" - location = "%s" + location = "us-central1" + federation_id = "metastore-fed-sep16" version = "3.1.2" - deletion_protection = false + backend_metastores { rank = "1" name = google_dataproc_metastore_service.default.id metastore_type = "DATAPROC_METASTORE" } -} -`, name, name, location) + tags = {`, context) + + l := "" + for key, value := range tags { + l += fmt.Sprintf("%q = %q\n", key, value) + } + + l += fmt.Sprintf("}\n}") + return r + l } From f9f61a3140598c9f01ad8b0522fd2311416d5f56 Mon Sep 17 00:00:00 2001 From: Rajesh Guptha Date: Wed, 23 Apr 2025 10:07:51 +0000 Subject: [PATCH 12/12] fixed formatting issues --- mmv1/products/metastore/Federation.yaml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/mmv1/products/metastore/Federation.yaml b/mmv1/products/metastore/Federation.yaml index 39e8475d14c2..40997e36d9be 100644 --- a/mmv1/products/metastore/Federation.yaml +++ b/mmv1/products/metastore/Federation.yaml @@ -44,7 +44,6 @@ iam_policy: - 'projects/{{project}}/locations/{{location}}/federations/{{federation_id}}' - '{{federation_id}}' custom_code: - pre_delete: 'templates/terraform/pre_delete/metastore_federation.go.tmpl' examples: - name: 'dataproc_metastore_federation_basic' primary_resource_id: 'default' @@ -52,22 +51,12 @@ examples: vars: federation_id: 'metastore-fed' service_id: 'metastore-service' - ignore_read_extra: - - 'deletion_protection' - name: 'dataproc_metastore_federation_bigquery' primary_resource_id: 'default' primary_resource_name: 'fmt.Sprintf("tf-test-metastore-fed%s", context["random_suffix"])' vars: federation_id: 'metastore-fed' service_id: 'metastore-service' -virtual_fields: - - name: 'deletion_protection' - description: | - Whether Terraform will be prevented from destroying the federation. Defaults to false. - When the field is set to true in Terraform state, a `terraform apply` - or `terraform destroy` that would delete the federation will fail. - type: Boolean - default_value: false parameters: - name: 'federationId' type: String @@ -155,3 +144,12 @@ properties: - 'METASTORE_TYPE_UNSPECIFIED' - 'DATAPROC_METASTORE' - 'BIGQUERY' + - name: 'tags' + type: KeyValuePairs + description: | + A map of resource manager tags. + Resource manager tag keys and values have the same definition as resource manager tags. + Keys must be in the format tagKeys/{tag_key_id}, and values are in the format tagValues/{tag_value_id}. + The field is ignored (both PUT & PATCH) when empty. + immutable: true + ignore_read: true