@@ -5,13 +5,15 @@ import (
55 "log"
66 "strings"
77
8+ "github.com/hashicorp/terraform-provider-google/google/envvar"
89 "github.com/hashicorp/terraform-provider-google/google/sweeper"
910 "github.com/hashicorp/terraform-provider-google/google/tpgresource"
1011 transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
1112)
1213
1314func init () {
1415 sweeper .AddTestSweepersLegacy ("DataLossPreventionDiscoveryConfig" , testSweepDataLossPreventionDiscoveryConfig )
16+ sweeper .AddTestSweepersLegacy ("DataLossPreventionDiscoveryConfigOrgScope" , testSweepDataLossPreventionDiscoveryConfigOrgScope )
1517}
1618
1719// At the time of writing, the CI only passes us-central1 as the region
@@ -104,3 +106,97 @@ func testSweepDataLossPreventionDiscoveryConfig(region string) error {
104106 }
105107 return nil
106108}
109+
110+ // At the time of writing, the CI only passes us-central1 as the region
111+ func testSweepDataLossPreventionDiscoveryConfigOrgScope (region string ) error {
112+ resourceName := "DataLossPreventionDiscoveryConfig"
113+ log .Printf ("[INFO][SWEEPER_LOG] Starting sweeper for org-scope %s" , resourceName )
114+
115+ config , err := sweeper .SharedConfigForRegion (region )
116+ if err != nil {
117+ log .Printf ("[INFO][SWEEPER_LOG] error getting shared config for region: %s" , err )
118+ return err
119+ }
120+
121+ err = config .LoadAndValidate (context .Background ())
122+ if err != nil {
123+ log .Printf ("[INFO][SWEEPER_LOG] error loading: %s" , err )
124+ return err
125+ }
126+
127+ // Setup variables to replace in list template
128+ testOrg := envvar .GetTestOrgFromEnv (nil )
129+ if testOrg == "" {
130+ log .Printf ("test org not set for test environment, skip sweep" )
131+ return nil
132+ }
133+ d := & tpgresource.ResourceDataMock {
134+ FieldsInSchema : map [string ]interface {}{
135+ "org" : testOrg ,
136+ "region" : region ,
137+ "location" : region ,
138+ "zone" : "-" ,
139+ },
140+ }
141+
142+ listTemplate := strings .Split ("https://dlp.googleapis.com/v2/organizations/{{org}}/locations/{{location}}/discoveryConfigs" , "?" )[0 ]
143+ listUrl , err := tpgresource .ReplaceVars (d , config , listTemplate )
144+ if err != nil {
145+ log .Printf ("[INFO][SWEEPER_LOG] error preparing sweeper list url: %s" , err )
146+ return nil
147+ }
148+
149+ res , err := transport_tpg .SendRequest (transport_tpg.SendRequestOptions {
150+ Config : config ,
151+ Method : "GET" ,
152+ RawURL : listUrl ,
153+ UserAgent : config .UserAgent ,
154+ })
155+ if err != nil {
156+ log .Printf ("[INFO][SWEEPER_LOG] Error in response from request %s: %s" , listUrl , err )
157+ return nil
158+ }
159+
160+ resourceList , ok := res ["discoveryConfigs" ]
161+ if ! ok {
162+ log .Printf ("[INFO][SWEEPER_LOG] Nothing found in response." )
163+ return nil
164+ }
165+
166+ rl := resourceList .([]interface {})
167+
168+ log .Printf ("[INFO][SWEEPER_LOG] Found %d items in %s list response." , len (rl ), resourceName )
169+ for _ , ri := range rl {
170+ obj := ri .(map [string ]interface {})
171+ if obj ["name" ] == nil {
172+ log .Printf ("[INFO][SWEEPER_LOG] %s resource name was nil" , resourceName )
173+ return nil
174+ }
175+
176+ // Note that we do not check for a sweepable prefix here.
177+ // We can have at most 1 DiscoveryConfig for a storage type in the same project/location, so ensure we delete everything.
178+ name := tpgresource .GetResourceNameFromSelfLink (obj ["name" ].(string ))
179+
180+ deleteTemplate := "https://dlp.googleapis.com/v2/organizations/{{org}}/locations/{{location}}/discoveryConfigs/{{name}}"
181+ deleteUrl , err := tpgresource .ReplaceVars (d , config , deleteTemplate )
182+ if err != nil {
183+ log .Printf ("[INFO][SWEEPER_LOG] error preparing delete url: %s" , err )
184+ return nil
185+ }
186+ deleteUrl = deleteUrl + name
187+
188+ // Don't wait on operations as we may have a lot to delete
189+ _ , err = transport_tpg .SendRequest (transport_tpg.SendRequestOptions {
190+ Config : config ,
191+ Method : "DELETE" ,
192+ RawURL : deleteUrl ,
193+ UserAgent : config .UserAgent ,
194+ })
195+ if err != nil {
196+ log .Printf ("[INFO][SWEEPER_LOG] Error deleting for url %s : %s" , deleteUrl , err )
197+ } else {
198+ log .Printf ("[INFO][SWEEPER_LOG] Sent delete request for %s resource: %s" , resourceName , name )
199+ }
200+ }
201+ return nil
202+ }
0 commit comments