Skip to content

Commit 4e3f7d0

Browse files
Add sweeper for firestore_database_instance (#10380) (#17786)
[upstream:75b86984b23823afcc72832b84f8e461e61921bf] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent ac7e7c7 commit 4e3f7d0

File tree

2 files changed

+127
-0
lines changed

2 files changed

+127
-0
lines changed

.changelog/10380.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:none
2+
3+
```
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package firestore
4+
5+
import (
6+
"context"
7+
"log"
8+
"strings"
9+
"testing"
10+
11+
"github.com/hashicorp/terraform-provider-google/google/envvar"
12+
"github.com/hashicorp/terraform-provider-google/google/sweeper"
13+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
14+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
15+
)
16+
17+
func init() {
18+
sweeper.AddTestSweepers("FirestoreDatabase", testSweepFirestoreDatabase)
19+
}
20+
21+
// At the time of writing, the CI only passes us-central1 as the region
22+
func testSweepFirestoreDatabase(region string) error {
23+
resourceName := "FirestoreDatabase"
24+
log.Printf("[INFO][SWEEPER_LOG] Starting sweeper for %s", resourceName)
25+
26+
config, err := sweeper.SharedConfigForRegion(region)
27+
if err != nil {
28+
log.Printf("[INFO][SWEEPER_LOG] error getting shared config for region: %s", err)
29+
return err
30+
}
31+
32+
err = config.LoadAndValidate(context.Background())
33+
if err != nil {
34+
log.Printf("[INFO][SWEEPER_LOG] error loading: %s", err)
35+
return err
36+
}
37+
38+
t := &testing.T{}
39+
billingId := envvar.GetTestBillingAccountFromEnv(t)
40+
41+
// Setup variables to replace in list template
42+
d := &tpgresource.ResourceDataMock{
43+
FieldsInSchema: map[string]interface{}{
44+
"project": config.Project,
45+
"region": region,
46+
"location": region,
47+
"zone": "-",
48+
"billing_account": billingId,
49+
},
50+
}
51+
52+
listTemplate := strings.Split("https://firestore.googleapis.com/v1/projects/{{project}}/databases", "?")[0]
53+
listUrl, err := tpgresource.ReplaceVars(d, config, listTemplate)
54+
if err != nil {
55+
log.Printf("[INFO][SWEEPER_LOG] error preparing sweeper list url: %s", err)
56+
return nil
57+
}
58+
59+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
60+
Config: config,
61+
Method: "GET",
62+
Project: config.Project,
63+
RawURL: listUrl,
64+
UserAgent: config.UserAgent,
65+
})
66+
if err != nil {
67+
log.Printf("[INFO][SWEEPER_LOG] Error in response from request %s: %s", listUrl, err)
68+
return nil
69+
}
70+
71+
resourceList, ok := res["databases"]
72+
if !ok {
73+
log.Printf("[INFO][SWEEPER_LOG] Nothing found in response.")
74+
return nil
75+
}
76+
77+
rl := resourceList.([]interface{})
78+
79+
log.Printf("[INFO][SWEEPER_LOG] Found %d items in %s list response.", len(rl), resourceName)
80+
// Keep count of items that aren't sweepable for logging.
81+
nonPrefixCount := 0
82+
for _, ri := range rl {
83+
obj := ri.(map[string]interface{})
84+
if obj["name"] == nil {
85+
log.Printf("[INFO][SWEEPER_LOG] %s resource name was nil", resourceName)
86+
return nil
87+
}
88+
89+
name := tpgresource.GetResourceNameFromSelfLink(obj["name"].(string))
90+
// Skip resources that shouldn't be sweeped
91+
if !sweeper.IsSweepableTestResource(name) {
92+
nonPrefixCount++
93+
continue
94+
}
95+
96+
deleteTemplate := "https://firestore.googleapis.com/v1/projects/{{project}}/databases/{{name}}"
97+
deleteUrl, err := tpgresource.ReplaceVars(d, config, deleteTemplate)
98+
if err != nil {
99+
log.Printf("[INFO][SWEEPER_LOG] error preparing delete url: %s", err)
100+
return nil
101+
}
102+
deleteUrl = deleteUrl + name
103+
104+
// Don't wait on operations as we may have a lot to delete
105+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
106+
Config: config,
107+
Method: "DELETE",
108+
Project: config.Project,
109+
RawURL: deleteUrl,
110+
UserAgent: config.UserAgent,
111+
})
112+
if err != nil {
113+
log.Printf("[INFO][SWEEPER_LOG] Error deleting for url %s : %s", deleteUrl, err)
114+
} else {
115+
log.Printf("[INFO][SWEEPER_LOG] Sent delete request for %s resource: %s", resourceName, name)
116+
}
117+
}
118+
119+
if nonPrefixCount > 0 {
120+
log.Printf("[INFO][SWEEPER_LOG] %d items were non-sweepable and skipped.", nonPrefixCount)
121+
}
122+
123+
return nil
124+
}

0 commit comments

Comments
 (0)