Skip to content

Commit 1e88eb8

Browse files
rajeshguptharDawid212
authored andcommitted
Add deletion_protection field to Metastore Federation (GoogleCloudPlatform#13471)
1 parent 4b3b2bf commit 1e88eb8

File tree

4 files changed

+115
-1
lines changed

4 files changed

+115
-1
lines changed

mmv1/products/metastore/Federation.yaml

+11
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,30 @@ iam_policy:
4444
- 'projects/{{project}}/locations/{{location}}/federations/{{federation_id}}'
4545
- '{{federation_id}}'
4646
custom_code:
47+
pre_delete: 'templates/terraform/pre_delete/metastore_federation.go.tmpl'
4748
examples:
4849
- name: 'dataproc_metastore_federation_basic'
4950
primary_resource_id: 'default'
5051
primary_resource_name: 'fmt.Sprintf("tf-test-metastore-fed%s", context["random_suffix"])'
5152
vars:
5253
federation_id: 'metastore-fed'
5354
service_id: 'metastore-service'
55+
ignore_read_extra:
56+
- 'deletion_protection'
5457
- name: 'dataproc_metastore_federation_bigquery'
5558
primary_resource_id: 'default'
5659
primary_resource_name: 'fmt.Sprintf("tf-test-metastore-fed%s", context["random_suffix"])'
5760
vars:
5861
federation_id: 'metastore-fed'
5962
service_id: 'metastore-service'
63+
virtual_fields:
64+
- name: 'deletion_protection'
65+
description: |
66+
Whether Terraform will be prevented from destroying the federation. Defaults to false.
67+
When the field is set to true in Terraform state, a `terraform apply`
68+
or `terraform destroy` that would delete the federation will fail.
69+
type: Boolean
70+
default_value: false
6071
parameters:
6172
- name: 'federationId'
6273
type: String

mmv1/templates/terraform/examples/dataproc_metastore_federation_basic.tf.tmpl

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ resource "google_dataproc_metastore_service" "{{$.PrimaryResourceId}}" {
2020
version = "3.1.2"
2121
endpoint_protocol = "GRPC"
2222
}
23-
}
23+
deletion_protection = false
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if d.Get("deletion_protection").(bool) {
2+
return fmt.Errorf("cannot destroy metastore federation without setting deletion_protection=false and running `terraform apply`")
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package dataprocmetastore_test
4+
5+
import (
6+
"fmt"
7+
"github.com/hashicorp/terraform-provider-google/google/acctest"
8+
"regexp"
9+
"testing"
10+
11+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
12+
)
13+
14+
func TestAccMetastoreFederation_deletionprotection(t *testing.T) {
15+
t.Parallel()
16+
17+
name := "tf-test-metastore-" + acctest.RandString(t, 10)
18+
19+
acctest.VcrTest(t, resource.TestCase{
20+
PreCheck: func() { acctest.AccTestPreCheck(t) },
21+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
22+
Steps: []resource.TestStep{
23+
{
24+
Config: testAccMetastoreFederationDeletionProtection(name, "us-central1"),
25+
},
26+
{
27+
ResourceName: "google_dataproc_metastore_federation.default",
28+
ImportState: true,
29+
ImportStateVerify: true,
30+
ImportStateVerifyIgnore: []string{"deletion_protection"},
31+
},
32+
{
33+
Config: testAccMetastoreFederationDeletionProtection(name, "us-west2"),
34+
ExpectError: regexp.MustCompile("deletion_protection"),
35+
},
36+
{
37+
Config: testAccMetastoreFederationDeletionProtectionFalse(name, "us-central1"),
38+
},
39+
{
40+
ResourceName: "google_dataproc_metastore_federation.default",
41+
ImportState: true,
42+
ImportStateVerify: true,
43+
ImportStateVerifyIgnore: []string{"deletion_protection"},
44+
},
45+
},
46+
})
47+
}
48+
49+
func testAccMetastoreFederationDeletionProtection(name string, location string) string {
50+
51+
return fmt.Sprintf(`
52+
resource "google_dataproc_metastore_service" "default" {
53+
service_id = "%s"
54+
location = "us-central1"
55+
tier = "DEVELOPER"
56+
hive_metastore_config {
57+
version = "3.1.2"
58+
endpoint_protocol = "GRPC"
59+
}
60+
}
61+
resource "google_dataproc_metastore_federation" "default" {
62+
federation_id = "%s"
63+
location = "%s"
64+
version = "3.1.2"
65+
deletion_protection = true
66+
backend_metastores {
67+
rank = "1"
68+
name = google_dataproc_metastore_service.default.id
69+
metastore_type = "DATAPROC_METASTORE"
70+
}
71+
}
72+
`, name, name, location)
73+
}
74+
75+
func testAccMetastoreFederationDeletionProtectionFalse(name string, location string) string {
76+
77+
return fmt.Sprintf(`
78+
resource "google_dataproc_metastore_service" "default" {
79+
service_id = "%s"
80+
location = "us-central1"
81+
tier = "DEVELOPER"
82+
hive_metastore_config {
83+
version = "3.1.2"
84+
endpoint_protocol = "GRPC"
85+
}
86+
}
87+
resource "google_dataproc_metastore_federation" "default" {
88+
federation_id = "%s"
89+
location = "%s"
90+
version = "3.1.2"
91+
deletion_protection = false
92+
backend_metastores {
93+
rank = "1"
94+
name = google_dataproc_metastore_service.default.id
95+
metastore_type = "DATAPROC_METASTORE"
96+
}
97+
}
98+
`, name, name, location)
99+
}

0 commit comments

Comments
 (0)