From 4d5d986f80b63d846d3bedb0cae2d7f0bce3bbec Mon Sep 17 00:00:00 2001 From: Modular Magician Date: Tue, 4 Jun 2024 19:01:36 +0000 Subject: [PATCH] compute target pool sweeper (#10871) [upstream:a93f5a6e1dc3d7cdc4538d37f0e80e3891a2746d] Signed-off-by: Modular Magician --- .../resource_compute_target_pool_sweeper.go | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 google/services/compute/resource_compute_target_pool_sweeper.go diff --git a/google/services/compute/resource_compute_target_pool_sweeper.go b/google/services/compute/resource_compute_target_pool_sweeper.go new file mode 100644 index 00000000000..9f46977b393 --- /dev/null +++ b/google/services/compute/resource_compute_target_pool_sweeper.go @@ -0,0 +1,68 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 +package compute + +import ( + "context" + "log" + + "github.com/hashicorp/terraform-provider-google/google/sweeper" + "github.com/hashicorp/terraform-provider-google/google/tpgresource" +) + +// This will sweep GCE Target Pool resources +func init() { + sweeper.AddTestSweepers("ComputeTargetPool", testSweepTargetPool) +} + +// At the time of writing, the CI only passes us-central1 as the region +func testSweepTargetPool(region string) error { + resourceName := "ComputeTargetPool" + log.Printf("[INFO][SWEEPER_LOG] Starting sweeper for %s", resourceName) + + config, err := sweeper.SharedConfigForRegion(region) + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] error getting shared config for region: %s", err) + return err + } + + err = config.LoadAndValidate(context.Background()) + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] error loading: %s", err) + return err + } + + found, err := config.NewComputeClient(config.UserAgent).TargetPools.AggregatedList(config.Project).Do() + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] Error in response from request: %s", err) + return nil + } + + // log.Printf("cam here") + // log.Printf("%+v", found) + + // Keep count of items that aren't sweepable for logging. + nonPrefixCount := 0 + for zone, itemList := range found.Items { + for _, tp := range itemList.TargetPools { + if !sweeper.IsSweepableTestResource(tp.Name) { + nonPrefixCount++ + continue + } + + // Don't wait on operations as we may have a lot to delete + _, err := config.NewComputeClient(config.UserAgent).TargetPools.Delete(config.Project, tpgresource.GetResourceNameFromSelfLink(zone), tp.Name).Do() + if err != nil { + log.Printf("[INFO][SWEEPER_LOG] Error deleting %s resource %s : %s", resourceName, tp.Name, err) + } else { + log.Printf("[INFO][SWEEPER_LOG] Sent delete request for %s resource: %s", resourceName, tp.Name) + } + } + } + + if nonPrefixCount > 0 { + log.Printf("[INFO][SWEEPER_LOG] %d items were non-sweepable and skipped.", nonPrefixCount) + } + + return nil +}