@@ -21,6 +21,7 @@ package activedirectory
21
21
22
22
import (
23
23
"context"
24
+ "fmt"
24
25
"log"
25
26
"strings"
26
27
"testing"
@@ -32,66 +33,101 @@ import (
32
33
)
33
34
34
35
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 )
36
45
}
37
46
38
47
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
40
53
resourceName := "ActiveDirectoryPeering"
41
54
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
+ },
48
65
}
49
66
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
+ },
56
74
}
57
75
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
62
79
}
63
80
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
+ }
66
87
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
71
90
}
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"
75
94
}
76
95
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
86
110
}
87
111
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
88
120
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 )
90
122
if err != nil {
91
123
log .Printf ("[INFO][SWEEPER_LOG] error preparing sweeper list url: %s" , err )
92
- return err
124
+ lastError = err
125
+ continue
93
126
}
94
127
128
+ // Log additional info for parent-based resources
129
+ log .Printf ("[INFO][SWEEPER_LOG] Listing %s resources at %s" , resourceName , listUrl )
130
+
95
131
res , err := transport_tpg .SendRequest (transport_tpg.SendRequestOptions {
96
132
Config : config ,
97
133
Method : "GET" ,
@@ -101,7 +137,8 @@ func testSweepActiveDirectoryPeering(_ string) error {
101
137
})
102
138
if err != nil {
103
139
log .Printf ("[INFO][SWEEPER_LOG] Error in response from request %s: %s" , listUrl , err )
104
- return err
140
+ lastError = err
141
+ continue
105
142
}
106
143
107
144
// First try the expected resource key
@@ -114,6 +151,7 @@ func testSweepActiveDirectoryPeering(_ string) error {
114
151
if ok {
115
152
log .Printf ("[INFO][SWEEPER_LOG] Found resources under standard 'items' key" )
116
153
} else {
154
+ log .Printf ("[INFO][SWEEPER_LOG] no resources found" )
117
155
continue
118
156
}
119
157
}
@@ -123,52 +161,65 @@ func testSweepActiveDirectoryPeering(_ string) error {
123
161
// Keep count of items that aren't sweepable for logging.
124
162
nonPrefixCount := 0
125
163
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 )
141
167
continue
142
168
}
143
169
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
164
173
} else {
165
- log . Printf ( "[INFO][SWEEPER_LOG] Sent delete request for %s resource: %s" , resourceName , name )
174
+ nonPrefixCount ++
166
175
}
167
176
}
177
+ }
168
178
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 )
172
223
}
173
224
174
225
return deletionerror
0 commit comments