Skip to content

Commit 3f61dec

Browse files
Migrate ELBv2 garbage collection to AWS SDK v2
Migrate the garbage collection logic for AWS Application Load Balancers (ALBs) and Network Load Balancers (NLBs) to use the AWS SDK v2. Signed-off-by: Danil-Grigorev <[email protected]>
1 parent 9c01fad commit 3f61dec

File tree

7 files changed

+270
-49
lines changed

7 files changed

+270
-49
lines changed

pkg/cloud/scope/clients.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/aws/aws-sdk-go-v2/service/autoscaling"
2323
ec2v2 "github.com/aws/aws-sdk-go-v2/service/ec2"
24+
elasticloadbalancingv2 "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
2425
resourcegroupstaggingapiv2 "github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
2526
"github.com/aws/aws-sdk-go-v2/service/s3"
2627
"github.com/aws/aws-sdk-go/aws"
@@ -67,6 +68,17 @@ type ResourceGroupsTaggingAPIAPI interface {
6768
resourcegroupstaggingapiv2.GetResourcesAPIClient
6869
}
6970

71+
// ELBV2API is a compatibility layer for the v2 elasticloadbalancingv2.Client interface.
72+
type ELBV2API interface {
73+
DescribeLoadBalancers(ctx context.Context, params *elasticloadbalancingv2.DescribeLoadBalancersInput, optFns ...func(*elasticloadbalancingv2.Options)) (*elasticloadbalancingv2.DescribeLoadBalancersOutput, error)
74+
DescribeTargetGroups(ctx context.Context, params *elasticloadbalancingv2.DescribeTargetGroupsInput, optFns ...func(*elasticloadbalancingv2.Options)) (*elasticloadbalancingv2.DescribeTargetGroupsOutput, error)
75+
DescribeListeners(ctx context.Context, params *elasticloadbalancingv2.DescribeListenersInput, optFns ...func(*elasticloadbalancingv2.Options)) (*elasticloadbalancingv2.DescribeListenersOutput, error)
76+
DescribeTags(ctx context.Context, params *elasticloadbalancingv2.DescribeTagsInput, optFns ...func(*elasticloadbalancingv2.Options)) (*elasticloadbalancingv2.DescribeTagsOutput, error)
77+
DeleteLoadBalancer(ctx context.Context, params *elasticloadbalancingv2.DeleteLoadBalancerInput, optFns ...func(*elasticloadbalancingv2.Options)) (*elasticloadbalancingv2.DeleteLoadBalancerOutput, error)
78+
DeleteTargetGroup(ctx context.Context, params *elasticloadbalancingv2.DeleteTargetGroupInput, optFns ...func(*elasticloadbalancingv2.Options)) (*elasticloadbalancingv2.DeleteTargetGroupOutput, error)
79+
DeleteListener(ctx context.Context, params *elasticloadbalancingv2.DeleteListenerInput, optFns ...func(*elasticloadbalancingv2.Options)) (*elasticloadbalancingv2.DeleteListenerOutput, error)
80+
}
81+
7082
// EC2API is a compatibility layer for the v1 ec2iface.EC2API interface.
7183
// It is used to provide a consistent interface for the DeleteSecurityGroup method.
7284
type EC2API interface {
@@ -269,6 +281,19 @@ func NewEC2ClientV2(scopeUser cloud.ScopeUsage, session cloud.Session, logger lo
269281
return ec2v2.NewFromConfig(cfg, ec2Opts...)
270282
}
271283

284+
// NewELBV2ClientV2 creates a new ELBV2 API client for a given session using AWS SDK v2.
285+
func NewELBV2ClientV2(scopeUser cloud.ScopeUsage, session cloud.Session, logger logger.Wrapper, target runtime.Object) *elasticloadbalancingv2.Client {
286+
cfg := session.SessionV2()
287+
elbOpts := []func(*elasticloadbalancingv2.Options){
288+
func(o *elasticloadbalancingv2.Options) {
289+
o.Logger = logger.GetAWSLogger()
290+
o.ClientLogMode = awslogs.GetAWSLogLevelV2(logger.GetLogger())
291+
},
292+
elasticloadbalancingv2.WithAPIOptions(awsmetricsv2.WithMiddlewares(scopeUser.ControllerName(), target), awsmetricsv2.WithCAPAUserAgentMiddleware()),
293+
}
294+
return elasticloadbalancingv2.NewFromConfig(cfg, elbOpts...)
295+
}
296+
272297
func recordAWSPermissionsIssue(target runtime.Object) func(r *request.Request) {
273298
return func(r *request.Request) {
274299
if awsErr, ok := r.Error.(awserr.Error); ok {

pkg/cloud/services/gc/cleanup_test.go

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import (
2121
"testing"
2222

2323
v2ec2 "github.com/aws/aws-sdk-go-v2/service/ec2"
24+
v2elbv2 "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
2425
rgapiv2 "github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
2526
rgapit "github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi/types"
2627
"github.com/aws/aws-sdk-go/aws"
2728
"github.com/aws/aws-sdk-go/aws/request"
2829
"github.com/aws/aws-sdk-go/service/elb"
29-
"github.com/aws/aws-sdk-go/service/elbv2"
3030
"github.com/golang/mock/gomock"
3131
. "github.com/onsi/gomega"
3232
corev1 "k8s.io/api/core/v1"
@@ -49,7 +49,7 @@ func TestReconcileDelete(t *testing.T) {
4949
name string
5050
clusterScope cloud.ClusterScoper
5151
elbMocks func(m *mocks.MockELBAPIMockRecorder)
52-
elbv2Mocks func(m *mocks.MockELBV2APIMockRecorder)
52+
elbv2Mocks func(m *mocksv2.MockELBV2APIMockRecorder)
5353
rgAPIMocks func(m *mocksv2.MockResourceGroupsTaggingAPIAPIMockRecorder)
5454
ec2Mocks func(m *mocksv2.MockEC2APIMockRecorder)
5555
expectErr bool
@@ -59,7 +59,7 @@ func TestReconcileDelete(t *testing.T) {
5959
clusterScope: createManageScope(t, "false", ""),
6060
rgAPIMocks: func(m *mocksv2.MockResourceGroupsTaggingAPIAPIMockRecorder) {},
6161
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
62-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
62+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
6363
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
6464
expectErr: false,
6565
},
@@ -81,7 +81,7 @@ func TestReconcileDelete(t *testing.T) {
8181
})
8282
},
8383
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
84-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
84+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
8585
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
8686
expectErr: false,
8787
},
@@ -103,7 +103,7 @@ func TestReconcileDelete(t *testing.T) {
103103
})
104104
},
105105
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
106-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
106+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
107107
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
108108
expectErr: false,
109109
},
@@ -125,7 +125,7 @@ func TestReconcileDelete(t *testing.T) {
125125
})
126126
},
127127
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
128-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
128+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
129129
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
130130
expectErr: false,
131131
},
@@ -157,7 +157,7 @@ func TestReconcileDelete(t *testing.T) {
157157
})
158158
},
159159
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
160-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
160+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
161161
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
162162
expectErr: false,
163163
},
@@ -189,7 +189,7 @@ func TestReconcileDelete(t *testing.T) {
189189
})
190190
},
191191
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
192-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
192+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
193193
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
194194
expectErr: false,
195195
},
@@ -229,7 +229,7 @@ func TestReconcileDelete(t *testing.T) {
229229
LoadBalancerName: aws.String("aec24434cd2ce4630bd14a955413ee37"),
230230
}).Return(&elb.DeleteLoadBalancerOutput{}, nil)
231231
},
232-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
232+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
233233
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
234234
expectErr: false,
235235
},
@@ -269,7 +269,7 @@ func TestReconcileDelete(t *testing.T) {
269269
LoadBalancerName: aws.String("aec24434cd2ce4630bd14a955413ee37"),
270270
}).Return(&elb.DeleteLoadBalancerOutput{}, nil)
271271
},
272-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
272+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
273273
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
274274
expectErr: false,
275275
},
@@ -305,10 +305,10 @@ func TestReconcileDelete(t *testing.T) {
305305
})
306306
},
307307
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
308-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {
309-
m.DeleteLoadBalancerWithContext(gomock.Any(), &elbv2.DeleteLoadBalancerInput{
308+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {
309+
m.DeleteLoadBalancer(gomock.Any(), &v2elbv2.DeleteLoadBalancerInput{
310310
LoadBalancerArn: aws.String("arn:aws:elasticloadbalancing:eu-west-2:1234567890:loadbalancer/net/aec24434cd2ce4630bd14a955413ee37"),
311-
}).Return(&elbv2.DeleteLoadBalancerOutput{}, nil)
311+
}).Return(&v2elbv2.DeleteLoadBalancerOutput{}, nil)
312312
},
313313
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
314314
expectErr: false,
@@ -345,10 +345,10 @@ func TestReconcileDelete(t *testing.T) {
345345
})
346346
},
347347
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
348-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {
349-
m.DeleteLoadBalancerWithContext(gomock.Any(), &elbv2.DeleteLoadBalancerInput{
348+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {
349+
m.DeleteLoadBalancer(gomock.Any(), &v2elbv2.DeleteLoadBalancerInput{
350350
LoadBalancerArn: aws.String("arn:aws:elasticloadbalancing:eu-west-2:1234567890:loadbalancer/net/aec24434cd2ce4630bd14a955413ee37"),
351-
}).Return(&elbv2.DeleteLoadBalancerOutput{}, nil)
351+
}).Return(&v2elbv2.DeleteLoadBalancerOutput{}, nil)
352352
},
353353
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
354354
expectErr: false,
@@ -385,10 +385,10 @@ func TestReconcileDelete(t *testing.T) {
385385
})
386386
},
387387
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
388-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {
389-
m.DeleteLoadBalancerWithContext(gomock.Any(), &elbv2.DeleteLoadBalancerInput{
388+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {
389+
m.DeleteLoadBalancer(gomock.Any(), &v2elbv2.DeleteLoadBalancerInput{
390390
LoadBalancerArn: aws.String("arn:aws:elasticloadbalancing:eu-west-2:1234567890:loadbalancer/app/aec24434cd2ce4630bd14a955413ee37"),
391-
}).Return(&elbv2.DeleteLoadBalancerOutput{}, nil)
391+
}).Return(&v2elbv2.DeleteLoadBalancerOutput{}, nil)
392392
},
393393
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
394394
expectErr: false,
@@ -425,10 +425,10 @@ func TestReconcileDelete(t *testing.T) {
425425
})
426426
},
427427
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
428-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {
429-
m.DeleteLoadBalancerWithContext(gomock.Any(), &elbv2.DeleteLoadBalancerInput{
428+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {
429+
m.DeleteLoadBalancer(gomock.Any(), &v2elbv2.DeleteLoadBalancerInput{
430430
LoadBalancerArn: aws.String("arn:aws:elasticloadbalancing:eu-west-2:1234567890:loadbalancer/app/aec24434cd2ce4630bd14a955413ee37"),
431-
}).Return(&elbv2.DeleteLoadBalancerOutput{}, nil)
431+
}).Return(&v2elbv2.DeleteLoadBalancerOutput{}, nil)
432432
},
433433
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
434434
expectErr: false,
@@ -495,8 +495,8 @@ func TestReconcileDelete(t *testing.T) {
495495
LoadBalancerName: aws.String("aec24434cd2ce4630bd14a955413ee37"),
496496
}).Return(&elb.DeleteLoadBalancerOutput{}, nil)
497497
},
498-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {
499-
m.DeleteTargetGroupWithContext(gomock.Any(), &elbv2.DeleteTargetGroupInput{
498+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {
499+
m.DeleteTargetGroup(gomock.Any(), &v2elbv2.DeleteTargetGroupInput{
500500
TargetGroupArn: aws.String("arn:aws:elasticloadbalancing:eu-west-2:1234567890:targetgroup/k8s-default-podinfo-2c868b281a/e979fe9bd6825433"),
501501
})
502502
},
@@ -543,7 +543,7 @@ func TestReconcileDelete(t *testing.T) {
543543
})
544544
},
545545
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
546-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
546+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
547547
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
548548
expectErr: false,
549549
},
@@ -583,7 +583,7 @@ func TestReconcileDelete(t *testing.T) {
583583
})
584584
},
585585
elbMocks: func(m *mocks.MockELBAPIMockRecorder) {},
586-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
586+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
587587
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
588588
expectErr: false,
589589
},
@@ -649,8 +649,8 @@ func TestReconcileDelete(t *testing.T) {
649649
LoadBalancerName: aws.String("aec24434cd2ce4630bd14a955413ee37"),
650650
}).Return(&elb.DeleteLoadBalancerOutput{}, nil)
651651
},
652-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {
653-
m.DeleteTargetGroupWithContext(gomock.Any(), &elbv2.DeleteTargetGroupInput{
652+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {
653+
m.DeleteTargetGroup(gomock.Any(), &v2elbv2.DeleteTargetGroupInput{
654654
TargetGroupArn: aws.String("arn:aws:elasticloadbalancing:eu-west-2:1234567890:targetgroup/k8s-default-podinfo-2c868b281a/e979fe9bd6825433"),
655655
})
656656
},
@@ -723,8 +723,8 @@ func TestReconcileDelete(t *testing.T) {
723723
LoadBalancerName: aws.String("aec24434cd2ce4630bd14a955413ee37"),
724724
}).Return(&elb.DeleteLoadBalancerOutput{}, nil)
725725
},
726-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {
727-
m.DeleteTargetGroupWithContext(gomock.Any(), &elbv2.DeleteTargetGroupInput{
726+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {
727+
m.DeleteTargetGroup(gomock.Any(), &v2elbv2.DeleteTargetGroupInput{
728728
TargetGroupArn: aws.String("arn:aws:elasticloadbalancing:eu-west-2:1234567890:targetgroup/k8s-default-podinfo-2c868b281a/e979fe9bd6825433"),
729729
})
730730
},
@@ -793,7 +793,7 @@ func TestReconcileDelete(t *testing.T) {
793793
LoadBalancerName: aws.String("aec24434cd2ce4630bd14a955413ee37"),
794794
}).Return(&elb.DeleteLoadBalancerOutput{}, nil)
795795
},
796-
elbv2Mocks: func(m *mocks.MockELBV2APIMockRecorder) {},
796+
elbv2Mocks: func(m *mocksv2.MockELBV2APIMockRecorder) {},
797797
ec2Mocks: func(m *mocksv2.MockEC2APIMockRecorder) {},
798798
expectErr: false,
799799
},
@@ -807,7 +807,7 @@ func TestReconcileDelete(t *testing.T) {
807807

808808
rgapiMock := mocksv2.NewMockResourceGroupsTaggingAPIAPI(mockCtrl)
809809
elbapiMock := mocks.NewMockELBAPI(mockCtrl)
810-
elbv2Mock := mocks.NewMockELBV2API(mockCtrl)
810+
elbv2Mock := mocksv2.NewMockELBV2API(mockCtrl)
811811
ec2Mock := mocksv2.NewMockEC2API(mockCtrl)
812812

813813
tc.rgAPIMocks(rgapiMock.EXPECT())

pkg/cloud/services/gc/loadbalancer.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ import (
2323

2424
"github.com/aws/aws-sdk-go/aws"
2525
"github.com/aws/aws-sdk-go/service/elb"
26-
"github.com/aws/aws-sdk-go/service/elbv2"
26+
27+
elbv2 "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
2728

2829
infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
2930
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/converters"
31+
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/convertersv2"
3032
)
3133

3234
func (s *Service) deleteLoadBalancers(ctx context.Context, resources []*AWSResource) error {
@@ -98,7 +100,7 @@ func (s *Service) deleteLoadBalancerV2(ctx context.Context, lbARN string) error
98100
}
99101

100102
s.scope.Debug("Deleting v2 load balancer", "arn", lbARN)
101-
if _, err := s.elbv2Client.DeleteLoadBalancerWithContext(ctx, &input); err != nil {
103+
if _, err := s.elbv2Client.DeleteLoadBalancer(ctx, &input); err != nil {
102104
return fmt.Errorf("deleting v2 load balancer: %w", err)
103105
}
104106

@@ -124,7 +126,7 @@ func (s *Service) deleteTargetGroup(ctx context.Context, targetGroupARN string)
124126
}
125127

126128
s.scope.Debug("Deleting target group", "arn", targetGroupARN)
127-
if _, err := s.elbv2Client.DeleteTargetGroupWithContext(ctx, &input); err != nil {
129+
if _, err := s.elbv2Client.DeleteTargetGroup(ctx, &input); err != nil {
128130
return fmt.Errorf("deleting target group: %w", err)
129131
}
130132

@@ -150,21 +152,23 @@ func (s *Service) describeLoadBalancers(ctx context.Context) ([]string, error) {
150152
// describeLoadBalancersV2 gets all network and application LBs.
151153
func (s *Service) describeLoadBalancersV2(ctx context.Context) ([]string, error) {
152154
var arns []string
153-
err := s.elbv2Client.DescribeLoadBalancersPagesWithContext(ctx, &elbv2.DescribeLoadBalancersInput{}, func(r *elbv2.DescribeLoadBalancersOutput, last bool) bool {
154-
for _, lb := range r.LoadBalancers {
155+
paginator := elbv2.NewDescribeLoadBalancersPaginator(s.elbv2Client, &elbv2.DescribeLoadBalancersInput{})
156+
157+
for paginator.HasMorePages() {
158+
output, err := paginator.NextPage(ctx)
159+
if err != nil {
160+
return nil, fmt.Errorf("describe load balancer v2 error: %w", err)
161+
}
162+
for _, lb := range output.LoadBalancers {
155163
arns = append(arns, *lb.LoadBalancerArn)
156164
}
157-
return true
158-
})
159-
if err != nil {
160-
return nil, fmt.Errorf("describe load balancer v2 error: %w", err)
161165
}
162166

163167
return arns, nil
164168
}
165169

166170
func (s *Service) describeTargetgroups(ctx context.Context) ([]string, error) {
167-
groups, err := s.elbv2Client.DescribeTargetGroupsWithContext(ctx, &elbv2.DescribeTargetGroupsInput{})
171+
groups, err := s.elbv2Client.DescribeTargetGroups(ctx, &elbv2.DescribeTargetGroupsInput{})
168172
if err != nil {
169173
return nil, fmt.Errorf("describe target groups error: %w", err)
170174
}
@@ -243,7 +247,7 @@ func (s *Service) filterProviderOwnedLBV2(ctx context.Context, arns []string) ([
243247
var resources []*AWSResource
244248
lbChunks := chunkResources(arns)
245249
for _, chunk := range lbChunks {
246-
output, err := s.elbv2Client.DescribeTagsWithContext(ctx, &elbv2.DescribeTagsInput{ResourceArns: aws.StringSlice(chunk)})
250+
output, err := s.elbv2Client.DescribeTags(ctx, &elbv2.DescribeTagsInput{ResourceArns: chunk})
247251
if err != nil {
248252
return nil, fmt.Errorf("describe tags of v2 loadbalancers: %w", err)
249253
}
@@ -252,7 +256,7 @@ func (s *Service) filterProviderOwnedLBV2(ctx context.Context, arns []string) ([
252256
for _, tag := range tagDesc.Tags {
253257
serviceTag := infrav1.ClusterAWSCloudProviderTagKey(s.scope.KubernetesClusterName())
254258
if *tag.Key == serviceTag && *tag.Value == string(infrav1.ResourceLifecycleOwned) {
255-
resource, err := composeAWSResource(*tagDesc.ResourceArn, converters.V2TagsToMap(tagDesc.Tags))
259+
resource, err := composeAWSResource(*tagDesc.ResourceArn, convertersv2.V2TagsToMap(tagDesc.Tags))
256260
if err != nil {
257261
return nil, fmt.Errorf("error compose aws elbv2 resource %s: %w", *tagDesc.ResourceArn, err)
258262
}

pkg/cloud/services/gc/options.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package gc
1818

1919
import (
2020
"github.com/aws/aws-sdk-go/service/elb/elbiface"
21-
"github.com/aws/aws-sdk-go/service/elbv2/elbv2iface"
2221
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope"
2322
)
2423

@@ -33,7 +32,7 @@ func withELBClient(client elbiface.ELBAPI) ServiceOption {
3332
}
3433

3534
// withELBv2Client is an option for specifying a AWS ELBv2 Client.
36-
func withELBv2Client(client elbv2iface.ELBV2API) ServiceOption {
35+
func withELBv2Client(client scope.ELBV2API) ServiceOption {
3736
return func(s *Service) {
3837
s.elbv2Client = client
3938
}

pkg/cloud/services/gc/service.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222

2323
"github.com/aws/aws-sdk-go-v2/aws/arn"
2424
"github.com/aws/aws-sdk-go/service/elb/elbiface"
25-
"github.com/aws/aws-sdk-go/service/elbv2/elbv2iface"
2625

2726
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud"
2827
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope"
@@ -32,7 +31,7 @@ import (
3231
type Service struct {
3332
scope cloud.ClusterScoper
3433
elbClient elbiface.ELBAPI
35-
elbv2Client elbv2iface.ELBV2API
34+
elbv2Client scope.ELBV2API
3635
resourceTaggingClient scope.ResourceGroupsTaggingAPIAPI
3736
ec2Client scope.EC2API
3837
cleanupFuncs ResourceCleanupFuncs
@@ -44,7 +43,7 @@ func NewService(clusterScope cloud.ClusterScoper, opts ...ServiceOption) *Servic
4443
svc := &Service{
4544
scope: clusterScope,
4645
elbClient: scope.NewELBClient(clusterScope, clusterScope, clusterScope, clusterScope.InfraCluster()),
47-
elbv2Client: scope.NewELBv2Client(clusterScope, clusterScope, clusterScope, clusterScope.InfraCluster()),
46+
elbv2Client: scope.NewELBV2ClientV2(clusterScope, clusterScope, clusterScope, clusterScope.InfraCluster()),
4847
resourceTaggingClient: scope.NewResourceTaggingClientV2(clusterScope, clusterScope, clusterScope, clusterScope.InfraCluster()),
4948
ec2Client: scope.NewEC2ClientV2(clusterScope, clusterScope, clusterScope, clusterScope.InfraCluster()),
5049
cleanupFuncs: ResourceCleanupFuncs{},

test/mocks/generate_aws.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@ limitations under the License.
2828
//go:generate /usr/bin/env bash -c "cat ../../hack/boilerplate/boilerplate.generatego.txt aws_ec2api_mock.go > _aws_ec2api_mock.go && mv _aws_ec2api_mock.go aws_ec2api_mock.go"
2929
//go:generate ../../hack/tools/bin/mockgen -destination aws_ec2apiv2_mock.go -package mocks sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope EC2API
3030
//go:generate /usr/bin/env bash -c "cat ../../hack/boilerplate/boilerplate.generatego.txt aws_ec2apiv2_mock.go > _aws_ec2apiv2_mock.go && mv _aws_ec2apiv2_mock.go v2/aws_ec2api_mock.go && rm aws_ec2apiv2_mock.go"
31+
//go:generate ../../hack/tools/bin/mockgen -destination aws_elbv2v2_mock.go -package mocks sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope ELBV2API
32+
//go:generate /usr/bin/env bash -c "cat ../../hack/boilerplate/boilerplate.generatego.txt aws_elbv2v2_mock.go > _aws_elbv2v2_mock.go && mv _aws_elbv2v2_mock.go v2/aws_elbv2_mock.go && rm aws_elbv2v2_mock.go"
3133
package mocks

0 commit comments

Comments
 (0)