@@ -34,21 +34,25 @@ func (o *ClusterUninstaller) listCloudControllerBackendServices(ctx context.Cont
3434 filter := "name eq \" a[0-9a-f]{30,50}\" "
3535 result := []cloudResource {}
3636
37- req := o .computeSvc .RegionBackendServices .List (o .ProjectID , o .Region ).Fields (googleapi .Field ("items(name,backends),nextPageToken" ))
38- if len (filter ) > 0 {
39- req = req .Filter (filter )
37+ // Fetch firewall rules once (fully paginated); used to validate backend
38+ // services that have no backends.
39+ var firewalls []* compute.Firewall
40+ if err := o .computeSvc .Firewalls .List (o .ProjectID ).
41+ Fields (googleapi .Field ("items(name,targetTags),nextPageToken" )).
42+ Pages (ctx , func (list * compute.FirewallList ) error {
43+ firewalls = append (firewalls , list .Items ... )
44+ return nil
45+ }); err != nil {
46+ return nil , err
4047 }
48+
49+ req := o .computeSvc .RegionBackendServices .List (o .ProjectID , o .Region ).Fields (googleapi .Field ("items(name,backends),nextPageToken" )).Filter (filter )
4150 err := req .Pages (ctx , func (list * compute.BackendServiceList ) error {
4251 for _ , item := range list .Items {
4352 if len (item .Backends ) == 0 {
4453 o .Logger .Debugf ("Backend service %s has no backends, checking firewall rules for cluster ID" , item .Name )
45- fwList , err := o .computeSvc .Firewalls .List (o .ProjectID ).Fields (googleapi .Field ("items(name,targetTags),nextPageToken" )).Context (ctx ).Do ()
46- if err != nil {
47- o .Logger .Debugf ("failed to list firewall rules associated with backend service %s: %v" , item .Name , err )
48- continue
49- }
5054 found := false
51- for _ , fw := range fwList . Items {
55+ for _ , fw := range firewalls {
5256 if strings .Contains (fw .Name , item .Name ) {
5357 for _ , tag := range fw .TargetTags {
5458 if strings .Contains (tag , o .ClusterID ) {
@@ -84,10 +88,7 @@ func (o *ClusterUninstaller) listCloudControllerBackendServices(ctx context.Cont
8488 quota : []gcp.QuotaUsage {{
8589 Metric : & gcp.Metric {
8690 Service : gcp .ServiceComputeEngineAPI ,
87- Limit : "internal_lb_forwarding_rules" ,
88- Dimensions : map [string ]string {
89- "region" : o .Region ,
90- },
91+ Limit : "backend_services" ,
9192 },
9293 Amount : 1 ,
9394 }},
@@ -196,13 +197,6 @@ func (o *ClusterUninstaller) discoverCloudControllerLoadBalancerResources(ctx co
196197 }
197198 o .insertPendingItems ("healthcheck" , found )
198199
199- // Discover associated health checks: loadBalancerName - GLOBAL
200- found , err = o .listHealthChecksWithFilter (ctx , "globalhealthcheck" , "items(name),nextPageToken" , loadBalancerNameFilter , nil )
201- if err != nil {
202- return err
203- }
204- o .insertPendingItems ("globalhealthcheck" , found )
205-
206200 // Discover associated http health checks: loadBalancerName
207201 found , err = o .listHTTPHealthChecksWithFilter (ctx , "items(name),nextPageToken" , loadBalancerNameFilter , nil )
208202 if err != nil {
0 commit comments