Skip to content

Commit 0d71e62

Browse files
committed
** New: Delete Target TCP Proxies
1 parent 3f26489 commit 0d71e62

File tree

4 files changed

+107
-6
lines changed

4 files changed

+107
-6
lines changed

pkg/destroy/gcp/backendservice.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,11 @@ func (o *ClusterUninstaller) destroyBackendServices(ctx context.Context) error {
121121
}
122122
}
123123
if items = o.getPendingItems("backendservice"); len(items) > 0 {
124-
return fmt.Errorf("%d items pending", len(items))
124+
for _, item := range items {
125+
if err := o.deleteBackendService(ctx, item, scope); err != nil {
126+
return fmt.Errorf("error deleting pending backend service %s: %w", item.name, err)
127+
}
128+
}
125129
}
126130
}
127131
return nil

pkg/destroy/gcp/forwardingrule.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (o *ClusterUninstaller) listForwardingRulesWithFilter(ctx context.Context,
9090
}
9191

9292
func (o *ClusterUninstaller) deleteForwardingRule(ctx context.Context, item cloudResource, scope resourceScope) error {
93-
o.Logger.Debugf("Deleting forwarding rule %s", item.name)
93+
o.Logger.Debugf("Deleting %s forwarding rule %s", scope, item.name)
9494
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
9595
defer cancel()
9696

@@ -110,7 +110,7 @@ func (o *ClusterUninstaller) deleteForwardingRule(ctx context.Context, item clou
110110
o.resetRequestID(item.typeName, item.name)
111111
return fmt.Errorf("failed to delete forwarding rule %s with error: %s: %w", item.name, operationErrorMessage(op), err)
112112
}
113-
if (err != nil && isNoOp(err)) || (op != nil && op.Status == "DONE") {
113+
if op != nil && op.Status == "DONE" {
114114
o.resetRequestID(item.typeName, item.name)
115115
o.deletePendingItems(item.typeName, []cloudResource{item})
116116
o.Logger.Infof("Deleted forwarding rule %s", item.name)
@@ -121,7 +121,7 @@ func (o *ClusterUninstaller) deleteForwardingRule(ctx context.Context, item clou
121121
// destroyForwardingRules removes all forwarding rules with a name prefixed
122122
// with the cluster's infra ID.
123123
func (o *ClusterUninstaller) destroyForwardingRules(ctx context.Context) error {
124-
for _, scope := range []resourceScope{gcpGlobalResource, gcpRegionalResource} {
124+
for _, scope := range []resourceScope{gcpRegionalResource, gcpGlobalResource} {
125125
found, err := o.listForwardingRules(ctx, scope)
126126
if err != nil {
127127
return fmt.Errorf("failed to list forwarding rules: %w", err)
@@ -134,7 +134,11 @@ func (o *ClusterUninstaller) destroyForwardingRules(ctx context.Context) error {
134134
}
135135
}
136136
if items = o.getPendingItems("forwardingrule"); len(items) > 0 {
137-
return fmt.Errorf("%d items pending", len(items))
137+
for _, item := range items {
138+
if err := o.deleteForwardingRule(ctx, item, scope); err != nil {
139+
return fmt.Errorf("error deleting pending forwarding rule %s: %w", item.name, err)
140+
}
141+
}
138142
}
139143
}
140144
return nil

pkg/destroy/gcp/gcp.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,10 @@ func (o *ClusterUninstaller) destroyCluster() (bool, error) {
180180
{name: "Routes", execute: o.destroyRoutes},
181181
{name: "Firewalls", execute: o.destroyFirewalls},
182182
{name: "Addresses", execute: o.destroyAddresses},
183+
{name: "Forwarding rules", execute: o.destroyForwardingRules},
183184
{name: "Target Pools", execute: o.destroyTargetPools},
184185
{name: "Instance groups", execute: o.destroyInstanceGroups},
185-
{name: "Forwarding rules", execute: o.destroyForwardingRules},
186+
{name: "Target TCP Proxies", execute: o.destroyTargetTCPProxies},
186187
{name: "Backend services", execute: o.destroyBackendServices},
187188
{name: "Health checks", execute: o.destroyHealthChecks},
188189
{name: "HTTP Health checks", execute: o.destroyHTTPHealthChecks},
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package gcp
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"google.golang.org/api/compute/v1"
8+
"google.golang.org/api/googleapi"
9+
10+
"github.com/openshift/installer/pkg/types/gcp"
11+
)
12+
13+
func (o *ClusterUninstaller) listTargetTCPProxies(ctx context.Context) ([]cloudResource, error) {
14+
return o.listTargetTCPProxiesWithFilter(ctx, "items(name),nextPageToken", o.clusterIDFilter(), nil)
15+
}
16+
17+
// listTargetTCPProxiesWithFilter lists target TCP Proxies in the project that satisfy the filter criteria.
18+
func (o *ClusterUninstaller) listTargetTCPProxiesWithFilter(ctx context.Context, fields string, filter string, filterFunc func(list *compute.TargetTcpProxy) bool) ([]cloudResource, error) {
19+
o.Logger.Debugf("Listing target tcp proxies")
20+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
21+
defer cancel()
22+
result := []cloudResource{}
23+
req := o.computeSvc.TargetTcpProxies.List(o.ProjectID).Fields(googleapi.Field(fields))
24+
if len(filter) > 0 {
25+
req = req.Filter(filter)
26+
}
27+
err := req.Pages(ctx, func(list *compute.TargetTcpProxyList) error {
28+
for _, item := range list.Items {
29+
if filterFunc == nil || (filterFunc != nil && filterFunc(item)) {
30+
o.Logger.Debugf("Found target TCP proxy: %s", item.Name)
31+
result = append(result, cloudResource{
32+
key: item.Name,
33+
name: item.Name,
34+
typeName: "targettcpproxy",
35+
quota: []gcp.QuotaUsage{{
36+
Metric: &gcp.Metric{
37+
Service: gcp.ServiceComputeEngineAPI,
38+
Limit: "target_tcp_proxy",
39+
},
40+
Amount: 1,
41+
}},
42+
})
43+
}
44+
}
45+
return nil
46+
})
47+
if err != nil {
48+
return nil, fmt.Errorf("failed to list target tcp proxies: %w", err)
49+
}
50+
return result, nil
51+
}
52+
53+
func (o *ClusterUninstaller) deleteTargetTCPProxy(ctx context.Context, item cloudResource) error {
54+
o.Logger.Debugf("Deleting target TCP Proxies %s", item.name)
55+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
56+
defer cancel()
57+
op, err := o.computeSvc.TargetTcpProxies.Delete(o.ProjectID, item.name).RequestId(o.requestID(item.typeName, item.name)).Context(ctx).Do()
58+
if err != nil && !isNoOp(err) {
59+
o.resetRequestID(item.typeName, item.name)
60+
return fmt.Errorf("failed to delete target TCP proxy %s: %w", item.name, err)
61+
}
62+
if op != nil && op.Status == "DONE" && isErrorStatus(op.HttpErrorStatusCode) {
63+
o.resetRequestID(item.typeName, item.name)
64+
return fmt.Errorf("failed to delete target TCP proxy %s with error: %s: %w", item.name, operationErrorMessage(op), err)
65+
}
66+
if (err != nil && isNoOp(err)) || (op != nil && op.Status == "DONE") {
67+
o.resetRequestID(item.typeName, item.name)
68+
o.deletePendingItems(item.typeName, []cloudResource{item})
69+
o.Logger.Infof("Deleted target TCP proxy %s", item.name)
70+
}
71+
return nil
72+
}
73+
74+
// destroyTargetTCPProxies removes target tcp proxies with a name prefixed
75+
// with the cluster's infra ID.
76+
func (o *ClusterUninstaller) destroyTargetTCPProxies(ctx context.Context) error {
77+
found, err := o.listTargetTCPProxies(ctx)
78+
if err != nil {
79+
return fmt.Errorf("failed to list target TCP proxies: %w", err)
80+
}
81+
items := o.insertPendingItems("targettcpproxy", found)
82+
for _, item := range items {
83+
err := o.deleteTargetTCPProxy(ctx, item)
84+
if err != nil {
85+
o.errorTracker.suppressWarning(item.key, err, o.Logger)
86+
}
87+
}
88+
if items = o.getPendingItems("targettcpproxy"); len(items) > 0 {
89+
return fmt.Errorf("%d items pending", len(items))
90+
}
91+
return nil
92+
}

0 commit comments

Comments
 (0)