Skip to content

Commit c293efa

Browse files
Add deletion_protection field to Metastore Federation (#13471) (#22106)
[upstream:3f370a4b3dc5fac6c6fbda92be91436f9267d5fc] Signed-off-by: Modular Magician <[email protected]>
1 parent 7eedc59 commit c293efa

8 files changed

+140
-227
lines changed

.changelog/13471.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
metastore: added `deletion_protection` field to `google_dataproc_metastore_federation`
3+
```

google/services/dataprocmetastore/iam_dataproc_metastore_federation_generated_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ resource "google_dataproc_metastore_service" "default" {
117117
version = "3.1.2"
118118
endpoint_protocol = "GRPC"
119119
}
120+
deletion_protection = false
120121
}
121122
122123
resource "google_dataproc_metastore_federation_iam_member" "foo" {
@@ -153,6 +154,7 @@ resource "google_dataproc_metastore_service" "default" {
153154
version = "3.1.2"
154155
endpoint_protocol = "GRPC"
155156
}
157+
deletion_protection = false
156158
}
157159
158160
data "google_iam_policy" "foo" {
@@ -204,6 +206,7 @@ resource "google_dataproc_metastore_service" "default" {
204206
version = "3.1.2"
205207
endpoint_protocol = "GRPC"
206208
}
209+
deletion_protection = false
207210
}
208211
209212
data "google_iam_policy" "foo" {
@@ -242,6 +245,7 @@ resource "google_dataproc_metastore_service" "default" {
242245
version = "3.1.2"
243246
endpoint_protocol = "GRPC"
244247
}
248+
deletion_protection = false
245249
}
246250
247251
resource "google_dataproc_metastore_federation_iam_binding" "foo" {
@@ -278,6 +282,7 @@ resource "google_dataproc_metastore_service" "default" {
278282
version = "3.1.2"
279283
endpoint_protocol = "GRPC"
280284
}
285+
deletion_protection = false
281286
}
282287
283288
resource "google_dataproc_metastore_federation_iam_binding" "foo" {

google/services/dataprocmetastore/resource_dataproc_metastore_federation.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,14 @@ Please refer to the field 'effective_labels' for all of the labels present on th
159159
Computed: true,
160160
Description: `Output only. The time when the metastore federation was last updated.`,
161161
},
162+
"deletion_protection": {
163+
Type: schema.TypeBool,
164+
Optional: true,
165+
Description: `Whether Terraform will be prevented from destroying the federation. Defaults to false.
166+
When the field is set to true in Terraform state, a 'terraform apply'
167+
or 'terraform destroy' that would delete the federation will fail.`,
168+
Default: false,
169+
},
162170
"project": {
163171
Type: schema.TypeString,
164172
Optional: true,
@@ -291,6 +299,12 @@ func resourceDataprocMetastoreFederationRead(d *schema.ResourceData, meta interf
291299
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("DataprocMetastoreFederation %q", d.Id()))
292300
}
293301

302+
// Explicitly set virtual fields to default values if unset
303+
if _, ok := d.GetOkExists("deletion_protection"); !ok {
304+
if err := d.Set("deletion_protection", false); err != nil {
305+
return fmt.Errorf("Error setting deletion_protection: %s", err)
306+
}
307+
}
294308
if err := d.Set("project", project); err != nil {
295309
return fmt.Errorf("Error reading Federation: %s", err)
296310
}
@@ -451,6 +465,9 @@ func resourceDataprocMetastoreFederationDelete(d *schema.ResourceData, meta inte
451465
}
452466

453467
headers := make(http.Header)
468+
if d.Get("deletion_protection").(bool) {
469+
return fmt.Errorf("cannot destroy metastore federation without setting deletion_protection=false and running `terraform apply`")
470+
}
454471

455472
log.Printf("[DEBUG] Deleting Federation %q", d.Id())
456473
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
@@ -496,6 +513,11 @@ func resourceDataprocMetastoreFederationImport(d *schema.ResourceData, meta inte
496513
}
497514
d.SetId(id)
498515

516+
// Explicitly set virtual fields to default values on import
517+
if err := d.Set("deletion_protection", false); err != nil {
518+
return nil, fmt.Errorf("Error setting deletion_protection: %s", err)
519+
}
520+
499521
return []*schema.ResourceData{d}, nil
500522
}
501523

google/services/dataprocmetastore/resource_dataproc_metastore_federation_generated_meta.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ fields:
88
- field: 'backend_metastores.backend_metastores.metastore_type'
99
- field: 'backend_metastores.backend_metastores.name'
1010
- field: 'create_time'
11+
- field: 'deletion_protection'
12+
provider_only: true
1113
- field: 'effective_labels'
1214
provider_only: true
1315
- field: 'endpoint_uri'

google/services/dataprocmetastore/resource_dataproc_metastore_federation_generated_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestAccDataprocMetastoreFederation_dataprocMetastoreFederationBasicExample(
4949
ResourceName: "google_dataproc_metastore_federation.default",
5050
ImportState: true,
5151
ImportStateVerify: true,
52-
ImportStateVerifyIgnore: []string{"federation_id", "labels", "location", "terraform_labels"},
52+
ImportStateVerifyIgnore: []string{"deletion_protection", "federation_id", "labels", "location", "terraform_labels"},
5353
},
5454
},
5555
})
@@ -79,6 +79,7 @@ resource "google_dataproc_metastore_service" "default" {
7979
version = "3.1.2"
8080
endpoint_protocol = "GRPC"
8181
}
82+
deletion_protection = false
8283
}
8384
`, context)
8485
}

google/services/dataprocmetastore/resource_dataproc_metastore_federation_sweeper.go

Lines changed: 0 additions & 226 deletions
This file was deleted.

0 commit comments

Comments
 (0)