From b66fd1d66acbe76821edcbaf8c068455e23a3a96 Mon Sep 17 00:00:00 2001 From: Cameron Thornton Date: Thu, 9 Jan 2020 12:57:42 -0800 Subject: [PATCH] Handle aggregatedList case for generated sweepers (#2941) Merged PR #2941. --- build/terraform | 2 +- build/terraform-beta | 2 +- products/compute/terraform.yaml | 10 ------- templates/terraform/sweeper_file.go.erb | 37 +++++++++++++++++++++++-- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/build/terraform b/build/terraform index c7b7470c48e0..122166d3de23 160000 --- a/build/terraform +++ b/build/terraform @@ -1 +1 @@ -Subproject commit c7b7470c48e033ce701aa329c8030822c557a735 +Subproject commit 122166d3de23fc660a567ba0ccef711d718f027f diff --git a/build/terraform-beta b/build/terraform-beta index d6dac1e2bb8d..4d91fb501c34 160000 --- a/build/terraform-beta +++ b/build/terraform-beta @@ -1 +1 @@ -Subproject commit d6dac1e2bb8d80773d641b57e74fb34988a5eb91 +Subproject commit 4d91fb501c34429572ff9a4807ec7f4f5f1d0f3c diff --git a/products/compute/terraform.yaml b/products/compute/terraform.yaml index 33d199cae071..f082dc4ad25c 100644 --- a/products/compute/terraform.yaml +++ b/products/compute/terraform.yaml @@ -72,8 +72,6 @@ overrides: !ruby/object:Overrides::ResourceOverrides custom_code: !ruby/object:Provider::Terraform::CustomCode post_create: templates/terraform/post_create/labels.erb Autoscaler: !ruby/object:Overrides::Terraform::ResourceOverride - # TODO: Remove when aggregatedList is handled in sweeper generation - skip_sweeper: true examples: - !ruby/object:Provider::Terraform::Examples name: "autoscaler_single_instance" @@ -1010,8 +1008,6 @@ overrides: !ruby/object:Overrides::ResourceOverrides decoder: templates/terraform/decoders/unwrap_resource.go.erb encoder: templates/terraform/encoders/compute_network_endpoint.go.erb NetworkEndpointGroup: !ruby/object:Overrides::Terraform::ResourceOverride - # TODO: Remove when aggregatedList is handled in sweeper generation - skip_sweeper: true examples: - !ruby/object:Provider::Terraform::Examples name: "network_endpoint_group" @@ -1030,8 +1026,6 @@ overrides: !ruby/object:Overrides::ResourceOverrides required: false default_from_api: true NodeGroup: !ruby/object:Overrides::Terraform::ResourceOverride - # TODO: Remove when aggregatedList is handled in sweeper generation - skip_sweeper: true docs: !ruby/object:Provider::Terraform::Docs warning: | Due to limitations of the API, Terraform cannot update the @@ -1343,8 +1337,6 @@ overrides: !ruby/object:Overrides::ResourceOverrides snapshotSchedulePolicy.snapshotProperties.storageLocations: !ruby/object:Overrides::Terraform::PropertyOverride is_set: true Reservation: !ruby/object:Overrides::Terraform::ResourceOverride - # TODO: Remove when aggregatedList is handled in sweeper generation - skip_sweeper: true examples: - !ruby/object:Provider::Terraform::Examples name: "reservation_basic" @@ -1904,8 +1896,6 @@ overrides: !ruby/object:Overrides::ResourceOverrides id: !ruby/object:Overrides::Terraform::PropertyOverride name: proxyId TargetInstance: !ruby/object:Overrides::Terraform::ResourceOverride - # TODO: Remove when aggregatedList is handled in sweeper generation - skip_sweeper: true examples: - !ruby/object:Provider::Terraform::Examples name: "target_instance_basic" diff --git a/templates/terraform/sweeper_file.go.erb b/templates/terraform/sweeper_file.go.erb index b63efc5f9d7a..b0e578b9969d 100644 --- a/templates/terraform/sweeper_file.go.erb +++ b/templates/terraform/sweeper_file.go.erb @@ -13,6 +13,12 @@ import ( <% sweeper_name = product_ns + object.name wrap_path = object&.nested_query&.keys&.first || object.collection_url_key +listUrlTemplate = object.__product.base_url + object.base_url + +listUrlTemplate.sub! "zones/{{zone}}", "aggregated" +aggregatedList = listUrlTemplate.include? "/aggregated/" + +deleteUrlTemplate = object.__product.base_url + object.delete_uri -%> func init() { @@ -39,7 +45,7 @@ func testSweep<%= sweeper_name -%>(region string) error { return err } - listTemplate := strings.Split("<%= object.__product.base_url + object.base_url -%>","?")[0] + listTemplate := strings.Split("<%= listUrlTemplate -%>","?")[0] d := &ResourceDataMock{ FieldsInSchema: map[string]interface{}{ @@ -72,8 +78,24 @@ func testSweep<%= sweeper_name -%>(region string) error { log.Printf("[INFO] Nothing found in response.") return nil } + <% if aggregatedList -%> + var rl []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{}) + rl = append(rl, resourcesInZone...) + } + } + } + <% else -%> rl := resourceList.([]interface{}) + <% end -%> log.Printf("[INFO] Found %d items in %s list response.", len(rl), resourceName) // items who don't match the tf-test prefix @@ -93,7 +115,18 @@ func testSweep<%= sweeper_name -%>(region string) error { nonPrefixCount++ continue } - deleteTemplate := "<%= object.__product.base_url + object.delete_uri -%>" + deleteTemplate := "<%= deleteUrlTemplate -%>" + <% if aggregatedList -%> + + 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.Replace(deleteTemplate, "{{zone}}", zone, -1) + + <% end -%> deleteUrl, err := replaceVars(d, config, deleteTemplate) if err != nil { log.Printf("[INFO] error preparing delete url: %s", err)