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