Skip to content

Commit 316a42d

Browse files
committed
CORS-2656: Remove context from cluster uninstaller struct
** context structs should not be stored in another struct. Removed from GCP and altered the gcp destroy functionality to pass around the base context to all destroy functions and each will create a child off of the context. ** GCP suggests a context without a timeout for new services/clients.
1 parent 659b863 commit 316a42d

22 files changed

+262
-229
lines changed

pkg/destroy/gcp/address.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
package gcp
22

33
import (
4+
"context"
5+
46
"github.com/pkg/errors"
57
"google.golang.org/api/compute/v1"
68
"google.golang.org/api/googleapi"
79

810
"github.com/openshift/installer/pkg/types/gcp"
911
)
1012

11-
func (o *ClusterUninstaller) listAddresses() ([]cloudResource, error) {
12-
return o.listAddressesWithFilter("items(name,region,addressType),nextPageToken", o.clusterIDFilter(), nil)
13+
func (o *ClusterUninstaller) listAddresses(ctx context.Context) ([]cloudResource, error) {
14+
return o.listAddressesWithFilter(ctx, "items(name,region,addressType),nextPageToken", o.clusterIDFilter(), nil)
1315
}
1416

1517
// listAddressesWithFilter lists addresses in the project that satisfy the filter criteria.
1618
// The fields parameter specifies which fields should be returned in the result, the filter string contains
1719
// a filter string passed to the API to filter results. The filterFunc is a client-side filtering function
1820
// that determines whether a particular result should be returned or not.
19-
func (o *ClusterUninstaller) listAddressesWithFilter(fields string, filter string, filterFunc func(*compute.Address) bool) ([]cloudResource, error) {
21+
func (o *ClusterUninstaller) listAddressesWithFilter(ctx context.Context, fields string, filter string, filterFunc func(*compute.Address) bool) ([]cloudResource, error) {
2022
o.Logger.Debugf("Listing addresses")
21-
ctx, cancel := o.contextWithTimeout()
23+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
2224
defer cancel()
2325
result := []cloudResource{}
2426
req := o.computeSvc.Addresses.List(o.ProjectID, o.Region).Fields(googleapi.Field(fields))
@@ -58,9 +60,9 @@ func (o *ClusterUninstaller) listAddressesWithFilter(fields string, filter strin
5860
return result, nil
5961
}
6062

61-
func (o *ClusterUninstaller) deleteAddress(item cloudResource) error {
63+
func (o *ClusterUninstaller) deleteAddress(ctx context.Context, item cloudResource) error {
6264
o.Logger.Debugf("Deleting address %s", item.name)
63-
ctx, cancel := o.contextWithTimeout()
65+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
6466
defer cancel()
6567
op, err := o.computeSvc.Addresses.Delete(o.ProjectID, o.Region, item.name).RequestId(o.requestID(item.typeName, item.name)).Context(ctx).Do()
6668
if err != nil && !isNoOp(err) {
@@ -81,14 +83,14 @@ func (o *ClusterUninstaller) deleteAddress(item cloudResource) error {
8183

8284
// destroyAddresses removes all address resources that have a name prefixed
8385
// with the cluster's infra ID.
84-
func (o *ClusterUninstaller) destroyAddresses() error {
85-
found, err := o.listAddresses()
86+
func (o *ClusterUninstaller) destroyAddresses(ctx context.Context) error {
87+
found, err := o.listAddresses(ctx)
8688
if err != nil {
8789
return err
8890
}
8991
items := o.insertPendingItems("address", found)
9092
for _, item := range items {
91-
err := o.deleteAddress(item)
93+
err := o.deleteAddress(ctx, item)
9294
if err != nil {
9395
o.errorTracker.suppressWarning(item.key, err, o.Logger)
9496
}

pkg/destroy/gcp/backendservice.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
package gcp
22

33
import (
4+
"context"
5+
46
"github.com/pkg/errors"
57
"google.golang.org/api/compute/v1"
68
"google.golang.org/api/googleapi"
79

810
"github.com/openshift/installer/pkg/types/gcp"
911
)
1012

11-
func (o *ClusterUninstaller) listBackendServices() ([]cloudResource, error) {
12-
return o.listBackendServicesWithFilter("items(name),nextPageToken", o.clusterIDFilter(), nil)
13+
func (o *ClusterUninstaller) listBackendServices(ctx context.Context) ([]cloudResource, error) {
14+
return o.listBackendServicesWithFilter(ctx, "items(name),nextPageToken", o.clusterIDFilter(), nil)
1315
}
1416

1517
// listBackendServicesWithFilter lists backend services in the project that satisfy the filter criteria.
1618
// The fields parameter specifies which fields should be returned in the result, the filter string contains
1719
// a filter string passed to the API to filter results. The filterFunc is a client-side filtering function
1820
// that determines whether a particular result should be returned or not.
19-
func (o *ClusterUninstaller) listBackendServicesWithFilter(fields string, filter string, filterFunc func(*compute.BackendService) bool) ([]cloudResource, error) {
21+
func (o *ClusterUninstaller) listBackendServicesWithFilter(ctx context.Context, fields string, filter string, filterFunc func(*compute.BackendService) bool) ([]cloudResource, error) {
2022
o.Logger.Debugf("Listing backend services")
21-
ctx, cancel := o.contextWithTimeout()
23+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
2224
defer cancel()
2325
result := []cloudResource{}
2426
req := o.computeSvc.RegionBackendServices.List(o.ProjectID, o.Region).Fields(googleapi.Field(fields))
@@ -51,9 +53,9 @@ func (o *ClusterUninstaller) listBackendServicesWithFilter(fields string, filter
5153
return result, nil
5254
}
5355

54-
func (o *ClusterUninstaller) deleteBackendService(item cloudResource) error {
56+
func (o *ClusterUninstaller) deleteBackendService(ctx context.Context, item cloudResource) error {
5557
o.Logger.Debugf("Deleting backend service %s", item.name)
56-
ctx, cancel := o.contextWithTimeout()
58+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
5759
defer cancel()
5860
op, err := o.computeSvc.RegionBackendServices.Delete(o.ProjectID, o.Region, item.name).RequestId(o.requestID(item.typeName, item.name)).Context(ctx).Do()
5961
if err != nil && !isNoOp(err) {
@@ -74,14 +76,14 @@ func (o *ClusterUninstaller) deleteBackendService(item cloudResource) error {
7476

7577
// destroyBackendServices removes backend services with a name prefixed
7678
// with the cluster's infra ID.
77-
func (o *ClusterUninstaller) destroyBackendServices() error {
78-
found, err := o.listBackendServices()
79+
func (o *ClusterUninstaller) destroyBackendServices(ctx context.Context) error {
80+
found, err := o.listBackendServices(ctx)
7981
if err != nil {
8082
return err
8183
}
8284
items := o.insertPendingItems("backendservice", found)
8385
for _, item := range items {
84-
err := o.deleteBackendService(item)
86+
err := o.deleteBackendService(ctx, item)
8587
if err != nil {
8688
o.errorTracker.suppressWarning(item.key, err, o.Logger)
8789
}

pkg/destroy/gcp/bucket.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package gcp
22

33
import (
4+
"context"
45
"regexp"
56

67
"github.com/pkg/errors"
@@ -13,17 +14,17 @@ var (
1314
multiDashes = regexp.MustCompile(`-{2,}`)
1415
)
1516

16-
func (o *ClusterUninstaller) listBuckets() ([]cloudResource, error) {
17-
return o.listBucketsWithFilter("items(name),nextPageToken", o.ClusterID+"-", nil)
17+
func (o *ClusterUninstaller) listBuckets(ctx context.Context) ([]cloudResource, error) {
18+
return o.listBucketsWithFilter(ctx, "items(name),nextPageToken", o.ClusterID+"-", nil)
1819
}
1920

2021
// listBucketsWithFilter lists buckets in the project that satisfy the filter criteria.
2122
// The fields parameter specifies which fields should be returned in the result, the filter string contains
2223
// a prefix string passed to the API to filter results. The filterFunc is a client-side filtering function
2324
// that determines whether a particular result should be returned or not.
24-
func (o *ClusterUninstaller) listBucketsWithFilter(fields string, prefix string, filterFunc func(*storage.Bucket) bool) ([]cloudResource, error) {
25+
func (o *ClusterUninstaller) listBucketsWithFilter(ctx context.Context, fields string, prefix string, filterFunc func(*storage.Bucket) bool) ([]cloudResource, error) {
2526
o.Logger.Debug("Listing storage buckets")
26-
ctx, cancel := o.contextWithTimeout()
27+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
2728
defer cancel()
2829
result := []cloudResource{}
2930
req := o.storageSvc.Buckets.List(o.ProjectID).Fields(googleapi.Field(fields))
@@ -50,9 +51,9 @@ func (o *ClusterUninstaller) listBucketsWithFilter(fields string, prefix string,
5051
return result, nil
5152
}
5253

53-
func (o *ClusterUninstaller) deleteBucket(item cloudResource) error {
54+
func (o *ClusterUninstaller) deleteBucket(ctx context.Context, item cloudResource) error {
5455
o.Logger.Debugf("Deleting storate bucket %s", item.name)
55-
ctx, cancel := o.contextWithTimeout()
56+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
5657
defer cancel()
5758
err := o.storageSvc.Buckets.Delete(item.name).Context(ctx).Do()
5859
if err != nil && !isNoOp(err) {
@@ -65,25 +66,25 @@ func (o *ClusterUninstaller) deleteBucket(item cloudResource) error {
6566

6667
// destroyBuckets finds all gcs buckets that have a name prefixed
6768
// with the cluster's infra ID. It then removes all the objects in each bucket and deletes it.
68-
func (o *ClusterUninstaller) destroyBuckets() error {
69-
found, err := o.listBuckets()
69+
func (o *ClusterUninstaller) destroyBuckets(ctx context.Context) error {
70+
found, err := o.listBuckets(ctx)
7071
if err != nil {
7172
return err
7273
}
7374
items := o.insertPendingItems("bucket", found)
7475
for _, item := range items {
75-
foundObjects, err := o.listBucketObjects(item)
76+
foundObjects, err := o.listBucketObjects(ctx, item)
7677
if err != nil {
7778
return err
7879
}
7980
objects := o.insertPendingItems("bucketobject", foundObjects)
8081
for _, object := range objects {
81-
err = o.deleteBucketObject(item, object)
82+
err = o.deleteBucketObject(ctx, item, object)
8283
if err != nil {
8384
o.errorTracker.suppressWarning(object.key, err, o.Logger)
8485
}
8586
}
86-
err = o.deleteBucket(item)
87+
err = o.deleteBucket(ctx, item)
8788
if err != nil {
8889
o.errorTracker.suppressWarning(item.key, err, o.Logger)
8990
}

pkg/destroy/gcp/bucketobject.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package gcp
22

33
import (
4+
"context"
5+
46
"github.com/pkg/errors"
57
storage "google.golang.org/api/storage/v1"
68
)
79

8-
func (o *ClusterUninstaller) listBucketObjects(bucket cloudResource) ([]cloudResource, error) {
10+
func (o *ClusterUninstaller) listBucketObjects(ctx context.Context, bucket cloudResource) ([]cloudResource, error) {
911
o.Logger.Debugf("Listing objects for storage bucket %s", bucket.name)
10-
ctx, cancel := o.contextWithTimeout()
12+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
1113
defer cancel()
1214
result := []cloudResource{}
1315
req := o.storageSvc.Objects.List(bucket.name).Fields("items(name),nextPageToken")
@@ -28,9 +30,9 @@ func (o *ClusterUninstaller) listBucketObjects(bucket cloudResource) ([]cloudRes
2830
return result, nil
2931
}
3032

31-
func (o *ClusterUninstaller) deleteBucketObject(bucket cloudResource, item cloudResource) error {
33+
func (o *ClusterUninstaller) deleteBucketObject(ctx context.Context, bucket cloudResource, item cloudResource) error {
3234
o.Logger.Debugf("Deleting storate object %s/%s", bucket.name, item.name)
33-
ctx, cancel := o.contextWithTimeout()
35+
ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
3436
defer cancel()
3537
err := o.storageSvc.Objects.Delete(bucket.name, item.name).Context(ctx).Do()
3638
if err != nil && !isNoOp(err) {

0 commit comments

Comments
 (0)