Skip to content

Commit d635f4b

Browse files
implement sweeper dependencies and parent relationships (#13396) (#9605)
[upstream:2bc3d1cdd5ca93d6d65abd3b6959ee5579861b95] Signed-off-by: Modular Magician <[email protected]>
1 parent 0592f73 commit d635f4b

File tree

330 files changed

+34650
-20262
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

330 files changed

+34650
-20262
lines changed

.changelog/13396.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:none
2+
3+
```

google-beta/services/accesscontextmanager/resource_access_context_manager_access_policy_sweeper.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
)
1515

1616
func init() {
17-
sweeper.AddTestSweepers("gcp_access_context_manager_policy", testSweepAccessContextManagerPolicies)
17+
sweeper.AddTestSweepersLegacy("gcp_access_context_manager_policy", testSweepAccessContextManagerPolicies)
1818
}
1919

2020
func testSweepAccessContextManagerPolicies(region string) error {

google-beta/services/activedirectory/resource_active_directory_peering_sweeper.go

+129-78
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ package activedirectory
2121

2222
import (
2323
"context"
24+
"fmt"
2425
"log"
2526
"strings"
2627
"testing"
@@ -32,66 +33,101 @@ import (
3233
)
3334

3435
func init() {
35-
sweeper.AddTestSweepers("ActiveDirectoryPeering", testSweepActiveDirectoryPeering)
36+
// Initialize base sweeper object
37+
s := &sweeper.Sweeper{
38+
Name: "google_active_directory_peering",
39+
ListAndAction: listAndActionActiveDirectoryPeering,
40+
DeleteFunction: testSweepActiveDirectoryPeering,
41+
}
42+
43+
// Register the sweeper
44+
sweeper.AddTestSweepers(s)
3645
}
3746

3847
func testSweepActiveDirectoryPeering(_ string) error {
39-
var deletionerror error
48+
return listAndActionActiveDirectoryPeering(deleteResourceActiveDirectoryPeering)
49+
}
50+
51+
func listAndActionActiveDirectoryPeering(action sweeper.ResourceAction) error {
52+
var lastError error
4053
resourceName := "ActiveDirectoryPeering"
4154
log.Printf("[INFO][SWEEPER_LOG] Starting sweeper for %s", resourceName)
42-
// Using default region since neither URL substitutions nor regions are defined
43-
substitutions := []struct {
44-
region string
45-
zone string
46-
}{
47-
{region: "us-central1"},
55+
56+
// Prepare configurations to iterate over
57+
var configs []*tpgresource.ResourceDataMock
58+
t := &testing.T{}
59+
billingId := envvar.GetTestBillingAccountFromEnv(t)
60+
// Default single config
61+
intermediateValues := []map[string]string{
62+
{
63+
"region": "us-central1",
64+
},
4865
}
4966

50-
// Iterate through each substitution
51-
for _, sub := range substitutions {
52-
config, err := sweeper.SharedConfigForRegion(sub.region)
53-
if err != nil {
54-
log.Printf("[INFO][SWEEPER_LOG] error getting shared config for region: %s", err)
55-
return err
67+
// Create configs from intermediate values
68+
for _, values := range intermediateValues {
69+
mockConfig := &tpgresource.ResourceDataMock{
70+
FieldsInSchema: map[string]interface{}{
71+
"project": envvar.GetTestProjectFromEnv(),
72+
"billing_account": billingId,
73+
},
5674
}
5775

58-
err = config.LoadAndValidate(context.Background())
59-
if err != nil {
60-
log.Printf("[INFO][SWEEPER_LOG] error loading: %s", err)
61-
return err
76+
// Apply all provided values
77+
for key, value := range values {
78+
mockConfig.FieldsInSchema[key] = value
6279
}
6380

64-
t := &testing.T{}
65-
billingId := envvar.GetTestBillingAccountFromEnv(t)
81+
// Set fallback values for common fields
82+
region, hasRegion := mockConfig.FieldsInSchema["region"].(string)
83+
if !hasRegion {
84+
region = "us-central1"
85+
mockConfig.FieldsInSchema["region"] = region
86+
}
6687

67-
// Set fallback values for empty region/zone
68-
if sub.region == "" {
69-
log.Printf("[INFO][SWEEPER_LOG] Empty region provided, falling back to us-central1")
70-
sub.region = "us-central1"
88+
if _, hasLocation := mockConfig.FieldsInSchema["location"]; !hasLocation {
89+
mockConfig.FieldsInSchema["location"] = region
7190
}
72-
if sub.zone == "" {
73-
log.Printf("[INFO][SWEEPER_LOG] Empty zone provided, falling back to us-central1-a")
74-
sub.zone = "us-central1-a"
91+
92+
if _, hasZone := mockConfig.FieldsInSchema["zone"]; !hasZone {
93+
mockConfig.FieldsInSchema["zone"] = region + "-a"
7594
}
7695

77-
// Setup variables to replace in list template
78-
d := &tpgresource.ResourceDataMock{
79-
FieldsInSchema: map[string]interface{}{
80-
"project": config.Project,
81-
"region": sub.region,
82-
"location": sub.region,
83-
"zone": sub.zone,
84-
"billing_account": billingId,
85-
},
96+
configs = append(configs, mockConfig)
97+
}
98+
99+
// Process all configurations (either from parent resources or direct substitutions)
100+
for _, mockConfig := range configs {
101+
// Get region from config
102+
region := sweeper.GetFieldOrDefault(mockConfig, "region", "us-central1")
103+
104+
// Create shared config for this region
105+
config, err := sweeper.SharedConfigForRegion(region)
106+
if err != nil {
107+
log.Printf("[INFO][SWEEPER_LOG] error getting shared config for region: %s", err)
108+
lastError = err
109+
continue
86110
}
87111

112+
err = config.LoadAndValidate(context.Background())
113+
if err != nil {
114+
log.Printf("[INFO][SWEEPER_LOG] error loading: %s", err)
115+
lastError = err
116+
continue
117+
}
118+
119+
// Prepare list URL
88120
listTemplate := strings.Split("https://managedidentities.googleapis.com/v1beta1/projects/{{project}}/locations/global/peerings", "?")[0]
89-
listUrl, err := tpgresource.ReplaceVars(d, config, listTemplate)
121+
listUrl, err := tpgresource.ReplaceVars(mockConfig, config, listTemplate)
90122
if err != nil {
91123
log.Printf("[INFO][SWEEPER_LOG] error preparing sweeper list url: %s", err)
92-
return err
124+
lastError = err
125+
continue
93126
}
94127

128+
// Log additional info for parent-based resources
129+
log.Printf("[INFO][SWEEPER_LOG] Listing %s resources at %s", resourceName, listUrl)
130+
95131
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
96132
Config: config,
97133
Method: "GET",
@@ -101,7 +137,8 @@ func testSweepActiveDirectoryPeering(_ string) error {
101137
})
102138
if err != nil {
103139
log.Printf("[INFO][SWEEPER_LOG] Error in response from request %s: %s", listUrl, err)
104-
return err
140+
lastError = err
141+
continue
105142
}
106143

107144
// First try the expected resource key
@@ -114,6 +151,7 @@ func testSweepActiveDirectoryPeering(_ string) error {
114151
if ok {
115152
log.Printf("[INFO][SWEEPER_LOG] Found resources under standard 'items' key")
116153
} else {
154+
log.Printf("[INFO][SWEEPER_LOG] no resources found")
117155
continue
118156
}
119157
}
@@ -123,52 +161,65 @@ func testSweepActiveDirectoryPeering(_ string) error {
123161
// Keep count of items that aren't sweepable for logging.
124162
nonPrefixCount := 0
125163
for _, ri := range rl {
126-
obj := ri.(map[string]interface{})
127-
var name string
128-
// Id detected in the delete URL, attempt to use id.
129-
if obj["id"] != nil {
130-
name = tpgresource.GetResourceNameFromSelfLink(obj["id"].(string))
131-
} else if obj["name"] != nil {
132-
name = tpgresource.GetResourceNameFromSelfLink(obj["name"].(string))
133-
} else {
134-
log.Printf("[INFO][SWEEPER_LOG] %s resource name and id were nil", resourceName)
135-
return err
136-
}
137-
138-
// Skip resources that shouldn't be sweeped
139-
if !sweeper.IsSweepableTestResource(name) {
140-
nonPrefixCount++
164+
obj, ok := ri.(map[string]interface{})
165+
if !ok {
166+
log.Printf("[INFO][SWEEPER_LOG] Item was not a map: %T", ri)
141167
continue
142168
}
143169

144-
deleteTemplate := "https://managedidentities.googleapis.com/v1beta1/projects/{{project}}/locations/global/peerings/{{peering_id}}"
145-
146-
deleteUrl, err := tpgresource.ReplaceVars(d, config, deleteTemplate)
147-
if err != nil {
148-
log.Printf("[INFO][SWEEPER_LOG] error preparing delete url: %s", err)
149-
deletionerror = err
150-
}
151-
deleteUrl = deleteUrl + name
152-
153-
// Don't wait on operations as we may have a lot to delete
154-
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
155-
Config: config,
156-
Method: "DELETE",
157-
Project: config.Project,
158-
RawURL: deleteUrl,
159-
UserAgent: config.UserAgent,
160-
})
161-
if err != nil {
162-
log.Printf("[INFO][SWEEPER_LOG] Error deleting for url %s : %s", deleteUrl, err)
163-
deletionerror = err
170+
if err := action(config, mockConfig, obj); err != nil {
171+
log.Printf("[INFO][SWEEPER_LOG] Error in action: %s", err)
172+
lastError = err
164173
} else {
165-
log.Printf("[INFO][SWEEPER_LOG] Sent delete request for %s resource: %s", resourceName, name)
174+
nonPrefixCount++
166175
}
167176
}
177+
}
168178

169-
if nonPrefixCount > 0 {
170-
log.Printf("[INFO][SWEEPER_LOG] %d items were non-sweepable and skipped.", nonPrefixCount)
171-
}
179+
return lastError
180+
}
181+
182+
func deleteResourceActiveDirectoryPeering(config *transport_tpg.Config, d *tpgresource.ResourceDataMock, obj map[string]interface{}) error {
183+
var deletionerror error
184+
resourceName := "ActiveDirectoryPeering"
185+
var name string
186+
// Id detected in the delete URL, attempt to use id.
187+
if obj["id"] != nil {
188+
name = tpgresource.GetResourceNameFromSelfLink(obj["id"].(string))
189+
} else if obj["name"] != nil {
190+
name = tpgresource.GetResourceNameFromSelfLink(obj["name"].(string))
191+
} else {
192+
log.Printf("[INFO][SWEEPER_LOG] %s resource name and id were nil", resourceName)
193+
return fmt.Errorf("%s resource name was nil", resourceName)
194+
}
195+
196+
// Skip resources that shouldn't be sweeped
197+
if !sweeper.IsSweepableTestResource(name) {
198+
return nil
199+
}
200+
201+
deleteTemplate := "https://managedidentities.googleapis.com/v1beta1/projects/{{project}}/locations/global/peerings/{{peering_id}}"
202+
203+
deleteUrl, err := tpgresource.ReplaceVars(d, config, deleteTemplate)
204+
if err != nil {
205+
log.Printf("[INFO][SWEEPER_LOG] error preparing delete url: %s", err)
206+
deletionerror = err
207+
}
208+
deleteUrl = deleteUrl + name
209+
210+
// Don't wait on operations as we may have a lot to delete
211+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
212+
Config: config,
213+
Method: "DELETE",
214+
Project: config.Project,
215+
RawURL: deleteUrl,
216+
UserAgent: config.UserAgent,
217+
})
218+
if err != nil {
219+
log.Printf("[INFO][SWEEPER_LOG] Error deleting for url %s : %s", deleteUrl, err)
220+
deletionerror = err
221+
} else {
222+
log.Printf("[INFO][SWEEPER_LOG] Sent delete request for %s resource: %s", resourceName, name)
172223
}
173224

174225
return deletionerror

0 commit comments

Comments
 (0)