Skip to content

Commit 2943b7a

Browse files
Merge pull request #9644 from barbacbd/OCPBUGS-53116-POC
OCPBUGS-53116: AWS Destroy use AWS SDK v2
2 parents 05ef797 + 39da713 commit 2943b7a

File tree

2 files changed

+382
-314
lines changed

2 files changed

+382
-314
lines changed

pkg/destroy/aws/aws.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"strings"
77
"time"
88

9+
configv2 "github.com/aws/aws-sdk-go-v2/config"
10+
ec2v2 "github.com/aws/aws-sdk-go-v2/service/ec2"
911
"github.com/aws/aws-sdk-go/aws"
1012
"github.com/aws/aws-sdk-go/aws/arn"
1113
"github.com/aws/aws-sdk-go/aws/awserr"
@@ -65,6 +67,8 @@ type ClusterUninstaller struct {
6567
// new session will be created based on the usual credential
6668
// configuration (AWS_PROFILE, AWS_ACCESS_KEY_ID, etc.).
6769
Session *session.Session
70+
71+
EC2Client *ec2v2.Client
6872
}
6973

7074
// New returns an AWS destroyer from ClusterMetadata.
@@ -82,6 +86,20 @@ func New(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (providers.
8286
return nil, err
8387
}
8488

89+
cfg, err := configv2.LoadDefaultConfig(context.TODO(), configv2.WithRegion(region))
90+
if err != nil {
91+
return nil, fmt.Errorf("failed loading default config: %w", err)
92+
}
93+
ec2Client := ec2v2.NewFromConfig(cfg, func(options *ec2v2.Options) {
94+
options.Region = region
95+
96+
for _, endpoint := range metadata.AWS.ServiceEndpoints {
97+
if strings.EqualFold(endpoint.Name, "ec2") {
98+
options.BaseEndpoint = aws.String(endpoint.URL)
99+
}
100+
}
101+
})
102+
85103
return &ClusterUninstaller{
86104
Filters: filters,
87105
Region: region,
@@ -90,6 +108,7 @@ func New(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (providers.
90108
ClusterDomain: metadata.AWS.ClusterDomain,
91109
Session: session,
92110
HostedZoneRole: metadata.AWS.HostedZoneRole,
111+
EC2Client: ec2Client,
93112
}, nil
94113
}
95114

@@ -184,7 +203,7 @@ func (o *ClusterUninstaller) RunWithContext(ctx context.Context) ([]string, erro
184203
// Terminate EC2 instances. The instances need to be terminated first so that we can ensure that there is nothing
185204
// running on the cluster creating new resources while we are attempting to delete resources, which could leak
186205
// the new resources.
187-
err = DeleteEC2Instances(ctx, o.Logger, awsSession, o.Filters, resourcesToDelete, deleted, tracker)
206+
err = o.DeleteEC2Instances(ctx, awsSession, resourcesToDelete, deleted, tracker)
188207
if err != nil {
189208
return resourcesToDelete.UnsortedList(), err
190209
}
@@ -193,7 +212,7 @@ func (o *ClusterUninstaller) RunWithContext(ctx context.Context) ([]string, erro
193212
err = wait.PollImmediateUntil(
194213
time.Second*10,
195214
func() (done bool, err error) {
196-
newlyDeleted, loopError := DeleteResources(ctx, o.Logger, awsSession, resourcesToDelete.UnsortedList(), tracker)
215+
newlyDeleted, loopError := o.DeleteResources(ctx, awsSession, resourcesToDelete.UnsortedList(), tracker)
197216
// Delete from the resources-to-delete set so that the current state of the resources to delete can be
198217
// returned if the context is completed.
199218
resourcesToDelete = resourcesToDelete.Difference(newlyDeleted)
@@ -386,16 +405,16 @@ func findResourcesByTag(
386405
// resources - the resources to be deleted.
387406
//
388407
// The first return is the ARNs of the resources that were successfully deleted.
389-
func DeleteResources(ctx context.Context, logger logrus.FieldLogger, awsSession *session.Session, resources []string, tracker *ErrorTracker) (sets.Set[string], error) {
408+
func (o *ClusterUninstaller) DeleteResources(ctx context.Context, awsSession *session.Session, resources []string, tracker *ErrorTracker) (sets.Set[string], error) {
390409
deleted := sets.New[string]()
391410
for _, arnString := range resources {
392-
l := logger.WithField("arn", arnString)
411+
l := o.Logger.WithField("arn", arnString)
393412
parsedARN, err := arn.Parse(arnString)
394413
if err != nil {
395414
l.WithError(err).Debug("could not parse ARN")
396415
continue
397416
}
398-
if err := deleteARN(ctx, awsSession, parsedARN, logger); err != nil {
417+
if err := o.deleteARN(ctx, awsSession, parsedARN, o.Logger); err != nil {
399418
tracker.suppressWarning(arnString, err, l)
400419
if err := ctx.Err(); err != nil {
401420
return deleted, err
@@ -517,10 +536,10 @@ func findPublicRoute53(ctx context.Context, client *route53.Route53, dnsName str
517536
return "", nil
518537
}
519538

520-
func deleteARN(ctx context.Context, session *session.Session, arn arn.ARN, logger logrus.FieldLogger) error {
539+
func (o *ClusterUninstaller) deleteARN(ctx context.Context, session *session.Session, arn arn.ARN, logger logrus.FieldLogger) error {
521540
switch arn.Service {
522541
case "ec2":
523-
return deleteEC2(ctx, session, arn, logger)
542+
return o.deleteEC2(ctx, session, arn, logger)
524543
case "elasticloadbalancing":
525544
return deleteElasticLoadBalancing(ctx, session, arn, logger)
526545
case "iam":

0 commit comments

Comments
 (0)