Skip to content

Commit 6d18363

Browse files
committed
Migrate SSM code to AWS SDK V2 -
1.Since ssm interface provided earlier is removed , new is now at pkg/cloud/services/ssm/service.go. 2.Modified client code for ssm client pkg/cloud/scope/clients.go. 3.In the ec2 package updated references of aws-sdk-go/ssm to point to aws-sdk-go-v2/ssm. 4.Types provided by aws-sdk-go-v2/ssm/types pacakage updated in ec2 (launchtemplate_test.go,ami.go,ami_test.go).
1 parent e7313b0 commit 6d18363

File tree

13 files changed

+316
-8747
lines changed

13 files changed

+316
-8747
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ require (
1818
github.com/aws/aws-sdk-go-v2/service/eks v1.64.0
1919
github.com/aws/aws-sdk-go-v2/service/iam v1.32.0
2020
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1
21+
github.com/aws/aws-sdk-go-v2/service/ssm v1.59.1
2122
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6
2223
github.com/aws/smithy-go v1.22.2
2324
github.com/awslabs/goformation/v4 v4.19.5

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6 h1:TIOEjw0i2yyhmhRry
8888
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6/go.mod h1:3Ba++UwWd154xtP4FRX5pUK3Gt4up5sDHCve6kVfE+g=
8989
github.com/aws/aws-sdk-go-v2/service/servicequotas v1.21.4 h1:SSDkZRAO8Ok5SoQ4BJ0onDeb0ga8JBOCkUmNEpRChcw=
9090
github.com/aws/aws-sdk-go-v2/service/servicequotas v1.21.4/go.mod h1:plXue/Zg49kU3uU6WwfCWgRR5SRINNiJf03Y/UhYOhU=
91+
github.com/aws/aws-sdk-go-v2/service/ssm v1.59.1 h1:Z4cmgV3hKuUIkhJsdn47hf/ABYHUtILfMrV+L8+kRwE=
92+
github.com/aws/aws-sdk-go-v2/service/ssm v1.59.1/go.mod h1:PUWUl5MDiYNQkUHN9Pyd9kgtA/YhbxnSnHP+yQqzrM8=
9193
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=
9294
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
9395
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=

pkg/cloud/scope/clients.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/aws/aws-sdk-go-v2/service/autoscaling"
2121
"github.com/aws/aws-sdk-go-v2/service/eks"
2222
"github.com/aws/aws-sdk-go-v2/service/s3"
23+
"github.com/aws/aws-sdk-go-v2/service/ssm"
2324
"github.com/aws/aws-sdk-go/aws"
2425
"github.com/aws/aws-sdk-go/aws/awserr"
2526
"github.com/aws/aws-sdk-go/aws/request"
@@ -39,8 +40,6 @@ import (
3940
"github.com/aws/aws-sdk-go/service/secretsmanager/secretsmanageriface"
4041
"github.com/aws/aws-sdk-go/service/sqs"
4142
"github.com/aws/aws-sdk-go/service/sqs/sqsiface"
42-
"github.com/aws/aws-sdk-go/service/ssm"
43-
"github.com/aws/aws-sdk-go/service/ssm/ssmiface"
4443
"github.com/aws/aws-sdk-go/service/sts"
4544
"github.com/aws/aws-sdk-go/service/sts/stsiface"
4645
"k8s.io/apimachinery/pkg/runtime"
@@ -205,13 +204,21 @@ func NewSTSClient(scopeUser cloud.ScopeUsage, session cloud.Session, logger logg
205204
}
206205

207206
// NewSSMClient creates a new Secrets API client for a given session.
208-
func NewSSMClient(scopeUser cloud.ScopeUsage, session cloud.Session, logger logger.Wrapper, target runtime.Object) ssmiface.SSMAPI {
209-
ssmClient := ssm.New(session.Session(), aws.NewConfig().WithLogLevel(awslogs.GetAWSLogLevel(logger.GetLogger())).WithLogger(awslogs.NewWrapLogr(logger.GetLogger())))
210-
ssmClient.Handlers.Build.PushFrontNamed(getUserAgentHandler())
211-
ssmClient.Handlers.CompleteAttempt.PushFront(awsmetrics.CaptureRequestMetrics(scopeUser.ControllerName()))
212-
ssmClient.Handlers.Complete.PushBack(recordAWSPermissionsIssue(target))
207+
func NewSSMClient(scopeUser cloud.ScopeUsage, session cloud.Session, logger logger.Wrapper, target runtime.Object) *ssm.Client {
208+
cfg := session.SessionV2()
209+
210+
ssmOpts := []func(*ssm.Options){
211+
func(o *ssm.Options) {
212+
o.Logger = logger.GetAWSLogger()
213+
o.ClientLogMode = awslogs.GetAWSLogLevelV2(logger.GetLogger())
214+
},
215+
ssm.WithAPIOptions(
216+
awsmetricsv2.WithMiddlewares(scopeUser.ControllerName(), target),
217+
awsmetricsv2.WithCAPAUserAgentMiddleware(),
218+
),
219+
}
213220

214-
return ssmClient
221+
return ssm.NewFromConfig(cfg, ssmOpts...)
215222
}
216223

217224
// NewS3Client creates a new S3 API client for a given session.

pkg/cloud/services/ec2/ami.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ import (
2525
"text/template"
2626
"time"
2727

28+
"github.com/aws/aws-sdk-go-v2/service/ssm"
2829
"github.com/aws/aws-sdk-go/aws"
2930
"github.com/aws/aws-sdk-go/service/ec2"
3031
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
31-
"github.com/aws/aws-sdk-go/service/ssm"
3232
"github.com/blang/semver"
3333
"github.com/pkg/errors"
3434

@@ -340,7 +340,7 @@ func (s *Service) eksAMILookup(kubernetesVersion string, architecture string, am
340340
Name: aws.String(paramName),
341341
}
342342

343-
out, err := s.SSMClient.GetParameter(input)
343+
out, err := s.SSMClient.GetParameter(context.TODO(), input)
344344
if err != nil {
345345
record.Eventf(s.scope.InfraCluster(), "FailedGetParameter", "Failed to get ami SSM parameter %q: %v", paramName, err)
346346

pkg/cloud/services/ec2/ami_test.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ import (
2020
"context"
2121
"testing"
2222

23+
"github.com/aws/aws-sdk-go-v2/service/ssm"
24+
ssmtypes "github.com/aws/aws-sdk-go-v2/service/ssm/types"
2325
"github.com/aws/aws-sdk-go/aws"
2426
"github.com/aws/aws-sdk-go/service/ec2"
25-
"github.com/aws/aws-sdk-go/service/ssm"
2627
"github.com/golang/mock/gomock"
2728
. "github.com/onsi/gomega"
2829
"sigs.k8s.io/controller-runtime/pkg/client/fake"
@@ -495,10 +496,10 @@ func TestEKSAMILookUp(t *testing.T) {
495496
arch: "x86_64",
496497
amiType: &gpuAMI,
497498
expect: func(m *mock_ssmiface.MockSSMAPIMockRecorder) {
498-
m.GetParameter(gomock.Eq(&ssm.GetParameterInput{
499+
m.GetParameter(context.TODO(), gomock.Eq(&ssm.GetParameterInput{
499500
Name: aws.String("/aws/service/eks/optimized-ami/1.23/amazon-linux-2-gpu/recommended/image_id"),
500501
})).Return(&ssm.GetParameterOutput{
501-
Parameter: &ssm.Parameter{
502+
Parameter: &ssmtypes.Parameter{
502503
Value: aws.String("id"),
503504
},
504505
}, nil)
@@ -511,10 +512,10 @@ func TestEKSAMILookUp(t *testing.T) {
511512
k8sVersion: "v1.23.3",
512513
arch: "x86_64",
513514
expect: func(m *mock_ssmiface.MockSSMAPIMockRecorder) {
514-
m.GetParameter(gomock.Eq(&ssm.GetParameterInput{
515+
m.GetParameter(context.TODO(), gomock.Eq(&ssm.GetParameterInput{
515516
Name: aws.String("/aws/service/eks/optimized-ami/1.23/amazon-linux-2/recommended/image_id"),
516517
})).Return(&ssm.GetParameterOutput{
517-
Parameter: &ssm.Parameter{
518+
Parameter: &ssmtypes.Parameter{
518519
Value: aws.String("id"),
519520
},
520521
}, nil)
@@ -527,7 +528,7 @@ func TestEKSAMILookUp(t *testing.T) {
527528
k8sVersion: "v1.23.3",
528529
arch: "x86_64",
529530
expect: func(m *mock_ssmiface.MockSSMAPIMockRecorder) {
530-
m.GetParameter(gomock.Eq(&ssm.GetParameterInput{
531+
m.GetParameter(context.TODO(), gomock.Eq(&ssm.GetParameterInput{
531532
Name: aws.String("/aws/service/eks/optimized-ami/1.23/amazon-linux-2/recommended/image_id"),
532533
})).Return(nil, awserrors.NewFailedDependency("dependency failure"))
533534
},
@@ -544,7 +545,7 @@ func TestEKSAMILookUp(t *testing.T) {
544545
k8sVersion: "v1.23.3",
545546
arch: "x86_64",
546547
expect: func(m *mock_ssmiface.MockSSMAPIMockRecorder) {
547-
m.GetParameter(gomock.Eq(&ssm.GetParameterInput{
548+
m.GetParameter(context.TODO(), gomock.Eq(&ssm.GetParameterInput{
548549
Name: aws.String("/aws/service/eks/optimized-ami/1.23/amazon-linux-2/recommended/image_id"),
549550
})).Return(&ssm.GetParameterOutput{}, nil)
550551
},

pkg/cloud/services/ec2/launchtemplate_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@ import (
2121
"encoding/base64"
2222
"testing"
2323

24+
"github.com/aws/aws-sdk-go-v2/service/ssm"
25+
ssmtypes "github.com/aws/aws-sdk-go-v2/service/ssm/types"
2426
"github.com/aws/aws-sdk-go/aws"
2527
"github.com/aws/aws-sdk-go/aws/awserr"
2628
"github.com/aws/aws-sdk-go/aws/request"
2729
"github.com/aws/aws-sdk-go/service/ec2"
28-
"github.com/aws/aws-sdk-go/service/ssm"
2930
"github.com/golang/mock/gomock"
3031
"github.com/google/go-cmp/cmp"
3132
. "github.com/onsi/gomega"
@@ -1956,9 +1957,9 @@ func TestDiscoverLaunchTemplateAMIForEKS(t *testing.T) {
19561957
}, nil)
19571958
},
19581959
expectSSM: func(m *mock_ssmiface.MockSSMAPIMockRecorder) {
1959-
m.GetParameter(gomock.AssignableToTypeOf(&ssm.GetParameterInput{})).
1960+
m.GetParameter(context.TODO(), gomock.AssignableToTypeOf(&ssm.GetParameterInput{})).
19601961
Return(&ssm.GetParameterOutput{
1961-
Parameter: &ssm.Parameter{
1962+
Parameter: &ssmtypes.Parameter{
19621963
Value: aws.String("latest"),
19631964
},
19641965
}, nil)

pkg/cloud/services/ec2/service.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ package ec2
1919

2020
import (
2121
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
22-
"github.com/aws/aws-sdk-go/service/ssm/ssmiface"
2322

2423
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope"
2524
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/services/network"
25+
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/services/ssm"
2626
)
2727

2828
// Service holds a collection of interfaces.
@@ -34,15 +34,15 @@ type Service struct {
3434
netService *network.Service
3535

3636
// SSMClient is used to look up the official EKS AMI ID
37-
SSMClient ssmiface.SSMAPI
37+
SSMClient ssm.SSMAPI
3838
}
3939

4040
// NewService returns a new service given the ec2 api client.
4141
func NewService(clusterScope scope.EC2Scope) *Service {
4242
return &Service{
4343
scope: clusterScope,
4444
EC2Client: scope.NewEC2Client(clusterScope, clusterScope, clusterScope, clusterScope.InfraCluster()),
45-
SSMClient: scope.NewSSMClient(clusterScope, clusterScope, clusterScope, clusterScope.InfraCluster()),
45+
SSMClient: &ssm.SSMClientV2{},
4646
netService: network.NewService(clusterScope.(scope.NetworkScope)),
4747
}
4848
}

pkg/cloud/services/ssm/mock_ssmiface/doc.go

Lines changed: 0 additions & 22 deletions
This file was deleted.

pkg/cloud/services/ssm/mock_ssmiface/mock_ssmiface.go

Lines changed: 111 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)