Skip to content

Commit 3a32062

Browse files
hao-nan-lipengq-google
authored andcommitted
Handwrite sweepers for networkConnectivity hubs and spokes (GoogleCloudPlatform#10069)
1 parent 6ab3f02 commit 3a32062

File tree

4 files changed

+256
-0
lines changed

4 files changed

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

tpgtools/overrides/networkconnectivity/beta/hub.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
- type: NO_SWEEPER
12
- type: CUSTOMIZE_DIFF
23
details:
34
functions:

tpgtools/overrides/networkconnectivity/beta/spoke.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
- type: NO_SWEEPER
12
- type: CUSTOMIZE_DIFF
23
details:
34
functions:

0 commit comments

Comments
 (0)