Skip to content

Commit

Permalink
Handle aggregatedList case for generated sweepers
Browse files Browse the repository at this point in the history
Signed-off-by: Modular Magician <magic-modules@google.com>
  • Loading branch information
c2thorn authored and modular-magician committed Jan 8, 2020
1 parent f32dd69 commit 4e09f26
Show file tree
Hide file tree
Showing 74 changed files with 929 additions and 273 deletions.
7 changes: 3 additions & 4 deletions google/resource_app_engine_domain_mapping_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepAppEngineDomainMapping(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepAppEngineDomainMapping(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_big_query_dataset_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepBigQueryDataset(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepBigQueryDataset(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_bigquery_data_transfer_config_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepBigqueryDataTransferConfig(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepBigqueryDataTransferConfig(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_binary_authorization_attestor_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepBinaryAuthorizationAttestor(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepBinaryAuthorizationAttestor(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_cloud_build_trigger_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepCloudBuildTrigger(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepCloudBuildTrigger(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_cloud_run_domain_mapping_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepCloudRunDomainMapping(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepCloudRunDomainMapping(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_cloud_run_service_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepCloudRunService(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepCloudRunService(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_cloud_scheduler_job_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepCloudSchedulerJob(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepCloudSchedulerJob(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_cloud_tasks_queue_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepCloudTasksQueue(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepCloudTasksQueue(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
7 changes: 3 additions & 4 deletions google/resource_compute_address_sweeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func testSweepComputeAddress(region string) error {

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list %s: %s", resourceName, err)
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

Expand All @@ -80,13 +80,12 @@ func testSweepComputeAddress(region string) error {
return nil
}

rl := resourceList.([]interface{})
rl := resourceList.([]map[string]interface{})

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, ri := range rl {
obj := ri.(map[string]interface{})
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
Expand Down
145 changes: 145 additions & 0 deletions google/resource_compute_autoscaler_sweeper_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
// ----------------------------------------------------------------------------
//
// *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
//
// ----------------------------------------------------------------------------
//
// This file is automatically generated by Magic Modules and manual
// changes will be clobbered when the file is regenerated.
//
// Please read more about how to change this file in
// .github/CONTRIBUTING.md.
//
// ----------------------------------------------------------------------------

package google

import (
"context"
"log"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
)

func init() {
resource.AddTestSweepers("ComputeAutoscaler", &resource.Sweeper{
Name: "ComputeAutoscaler",
F: testSweepComputeAutoscaler,
})
}

// At the time of writing, the CI only passes us-central1 as the region
func testSweepComputeAutoscaler(region string) error {
resourceName := "ComputeAutoscaler"
log.Printf("[INFO] Sweeping %s", resourceName)

config, err := sharedConfigForRegion(region)
if err != nil {
log.Printf("[INFO] error getting shared config for region: %s", err)
return err
}

err = config.LoadAndValidate(context.Background())
if err != nil {
log.Printf("[INFO] error loading: %s", err)
return err
}

listTemplate := strings.Split("https://www.googleapis.com/compute/v1/projects/{{project}}/aggregated/autoscalers", "?")[0]

d := &ResourceDataMock{
FieldsInSchema: map[string]interface{}{
"project": config.Project,
"region": region,
"location": region,
"zone": "-",
},
}

listUrl, err := replaceVars(d, config, listTemplate)
if err != nil {
log.Printf("[INFO] error preparing sweeper list url: %s", err)
return nil
}

if strings.Count(listUrl, "//") > 1 {
log.Printf("[INFO] Invalid list url for %s sweeper: %s", resourceName, listUrl)
return nil
}

res, err := sendRequest(config, "GET", config.Project, listUrl, nil)
if err != nil {
log.Printf("[INFO] Unable to list resource %s (url %s ): %s", resourceName, listUrl, err)
return nil
}

resourceList, ok := res["items"]
if !ok {
log.Printf("[INFO] Nothing found in response.")
return nil
}
var rl []map[string]interface{}
zones := resourceList.(map[string]interface{})
// Loop through every zone in the list response
for _, zonesValue := range zones {
zone := zonesValue.(map[string]interface{})
for k, v := range zone {
// Zone map either has resources or a warning stating there were no resources found in the zone
if k != "warning" {
resourcesInZone := v.([]interface{})
for _, resource := range resourcesInZone {
rl = append(rl, resource.(map[string]interface{}))
}
}
}
}

log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName)
// items who don't match the tf-test prefix
nonPrefixCount := 0
for _, obj := range rl {
if obj["name"] == nil {
log.Printf("[INFO] %s resource name was nil", resourceName)
return nil
}

nameSegs := strings.Split(obj["name"].(string), "/")
name := nameSegs[len(nameSegs)-1]

// Only sweep resources with the test prefix
if !strings.HasPrefix(name, "tf-test") {
nonPrefixCount++
continue
}
deleteTemplate := "https://www.googleapis.com/compute/v1/projects/{{project}}/zones/{{zone}}/autoscalers/{{name}}"

if obj["zone"] == nil {
log.Printf("[INFO] %s resource zone was nil", resourceName)
return nil
}
zoneSegs := strings.Split(obj["zone"].(string), "/")
zone := zoneSegs[len(zoneSegs)-1]
deleteTemplate = strings.ReplaceAll(deleteTemplate, "{{zone}}", zone)

deleteUrl, err := replaceVars(d, config, deleteTemplate)
if err != nil {
log.Printf("[INFO] error preparing delete url: %s", err)
return nil
}
deleteUrl = deleteUrl + name
// Don't wait on operations as we may have a lot to delete
_, err = sendRequest(config, "DELETE", config.Project, deleteUrl, nil)
if err != nil {
log.Printf("[INFO] Error deleting for url %s : %s", deleteUrl, err)
} else {
log.Printf("[INFO] Sent delete request for %s resource: %s", resourceName, name)
}
}

if nonPrefixCount > 0 {
log.Printf("[INFO] %d items without tf_test prefix remain.", nonPrefixCount)
}

return nil
}
Loading

0 comments on commit 4e09f26

Please sign in to comment.