@@ -20,17 +20,20 @@ import (
2020 "context"
2121 "errors"
2222 "fmt"
23+
24+ "github.com/aws/smithy-go"
2325 "math/rand"
2426 "os"
2527 "time"
2628
27- "github.com/aws/aws-sdk-go/aws"
28- "github.com/aws/aws-sdk-go/aws/awserr"
29- "github.com/aws/aws-sdk-go/aws/credentials/stscreds"
30- "github.com/aws/aws-sdk-go/aws/ec2metadata"
31- "github.com/aws/aws-sdk-go/aws/request"
32- "github.com/aws/aws-sdk-go/aws/session"
33- "github.com/aws/aws-sdk-go/service/efs"
29+ "github.com/aws/aws-sdk-go-v2/aws"
30+ "github.com/aws/aws-sdk-go-v2/config"
31+ "github.com/aws/aws-sdk-go-v2/credentials/stscreds"
32+ "github.com/aws/aws-sdk-go-v2/feature/ec2/imds"
33+ "github.com/aws/aws-sdk-go-v2/service/efs"
34+ "github.com/aws/aws-sdk-go-v2/service/efs/types"
35+ "github.com/aws/aws-sdk-go-v2/service/sts"
36+
3437 "k8s.io/klog/v2"
3538)
3639
@@ -88,11 +91,11 @@ type MountTarget struct {
8891
8992// Efs abstracts efs client(https://docs.aws.amazon.com/sdk-for-go/api/service/efs/)
9093type Efs interface {
91- CreateAccessPointWithContext (aws .Context , * efs.CreateAccessPointInput , ... request. Option ) (* efs.CreateAccessPointOutput , error )
92- DeleteAccessPointWithContext (aws .Context , * efs.DeleteAccessPointInput , ... request. Option ) (* efs.DeleteAccessPointOutput , error )
93- DescribeAccessPointsWithContext (aws .Context , * efs.DescribeAccessPointsInput , ... request. Option ) (* efs.DescribeAccessPointsOutput , error )
94- DescribeFileSystemsWithContext (aws .Context , * efs.DescribeFileSystemsInput , ... request. Option ) (* efs.DescribeFileSystemsOutput , error )
95- DescribeMountTargetsWithContext (aws .Context , * efs.DescribeMountTargetsInput , ... request. Option ) (* efs.DescribeMountTargetsOutput , error )
94+ CreateAccessPoint (context .Context , * efs.CreateAccessPointInput , ... func ( * efs. Options ) ) (* efs.CreateAccessPointOutput , error )
95+ DeleteAccessPoint (context .Context , * efs.DeleteAccessPointInput , ... func ( * efs. Options ) ) (* efs.DeleteAccessPointOutput , error )
96+ DescribeAccessPoints (context .Context , * efs.DescribeAccessPointsInput , ... func ( * efs. Options ) ) (* efs.DescribeAccessPointsOutput , error )
97+ DescribeFileSystems (context .Context , * efs.DescribeFileSystemsInput , ... func ( * efs. Options ) ) (* efs.DescribeFileSystemsOutput , error )
98+ DescribeMountTargets (context .Context , * efs.DescribeMountTargetsInput , ... func ( * efs. Options ) ) (* efs.DescribeMountTargetsOutput , error )
9699}
97100
98101type Cloud interface {
@@ -124,16 +127,18 @@ func NewCloudWithRole(awsRoleArn string) (Cloud, error) {
124127}
125128
126129func createCloud (awsRoleArn string ) (Cloud , error ) {
127- sess := session .Must (session .NewSession (& aws.Config {}))
128- svc := ec2metadata .New (sess )
130+ cfg , err := config .LoadDefaultConfig (context .TODO ())
131+ if err != nil {
132+ klog .Warningf ("Could not load config: %v" , err )
133+ }
134+
135+ svc := imds .NewFromConfig (cfg )
129136 api , err := DefaultKubernetesAPIClient ()
130137
131138 if err != nil && ! isDriverBootedInECS () {
132139 klog .Warningf ("Could not create Kubernetes Client: %v" , err )
133140 }
134-
135141 metadataProvider , err := GetNewMetadataProvider (svc , api )
136-
137142 if err != nil {
138143 return nil , fmt .Errorf ("error creating MetadataProvider: %v" , err )
139144 }
@@ -144,21 +149,23 @@ func createCloud(awsRoleArn string) (Cloud, error) {
144149 return nil , fmt .Errorf ("could not get metadata: %v" , err )
145150 }
146151
147- efs_client := createEfsClient (awsRoleArn , metadata , sess )
148- klog .V (5 ).Infof ("EFS Client created using the following endpoint: %+v" , efs_client .( * efs. EFS ). Client . ClientInfo . Endpoint )
152+ efs_client := createEfsClient (awsRoleArn , metadata )
153+ klog .V (5 ).Infof ("EFS Client created using the following endpoint: %+v" , cfg . BaseEndpoint )
149154
150155 return & cloud {
151156 metadata : metadata ,
152157 efs : efs_client ,
153158 }, nil
154159}
155160
156- func createEfsClient (awsRoleArn string , metadata MetadataService , sess * session. Session ) Efs {
157- config := aws . NewConfig () .WithRegion (metadata .GetRegion ())
161+ func createEfsClient (awsRoleArn string , metadata MetadataService ) Efs {
162+ cfg , _ := config . LoadDefaultConfig ( context . TODO (), config .WithRegion (metadata .GetRegion () ))
158163 if awsRoleArn != "" {
159- config = config .WithCredentials (stscreds .NewCredentials (sess , awsRoleArn ))
164+ stsClient := sts .NewFromConfig (cfg )
165+ roleProvider := stscreds .NewAssumeRoleProvider (stsClient , awsRoleArn )
166+ cfg .Credentials = aws .NewCredentialsCache (roleProvider )
160167 }
161- return efs .New ( session . Must ( session . NewSession ( config )) )
168+ return efs .NewFromConfig ( cfg )
162169}
163170
164171func (c * cloud ) GetMetadata () MetadataService {
@@ -170,12 +177,12 @@ func (c *cloud) CreateAccessPoint(ctx context.Context, clientToken string, acces
170177 createAPInput := & efs.CreateAccessPointInput {
171178 ClientToken : & clientToken ,
172179 FileSystemId : & accessPointOpts .FileSystemId ,
173- PosixUser : & efs .PosixUser {
180+ PosixUser : & types .PosixUser {
174181 Gid : & accessPointOpts .Gid ,
175182 Uid : & accessPointOpts .Uid ,
176183 },
177- RootDirectory : & efs .RootDirectory {
178- CreationInfo : & efs .CreationInfo {
184+ RootDirectory : & types .RootDirectory {
185+ CreationInfo : & types .CreationInfo {
179186 OwnerGid : & accessPointOpts .Gid ,
180187 OwnerUid : & accessPointOpts .Uid ,
181188 Permissions : & accessPointOpts .DirectoryPerms ,
@@ -186,7 +193,7 @@ func (c *cloud) CreateAccessPoint(ctx context.Context, clientToken string, acces
186193 }
187194
188195 klog .V (5 ).Infof ("Calling Create AP with input: %+v" , * createAPInput )
189- res , err := c .efs .CreateAccessPointWithContext (ctx , createAPInput )
196+ res , err := c .efs .CreateAccessPoint (ctx , createAPInput )
190197 if err != nil {
191198 if isAccessDenied (err ) {
192199 return nil , ErrAccessDenied
@@ -204,7 +211,7 @@ func (c *cloud) CreateAccessPoint(ctx context.Context, clientToken string, acces
204211
205212func (c * cloud ) DeleteAccessPoint (ctx context.Context , accessPointId string ) (err error ) {
206213 deleteAccessPointInput := & efs.DeleteAccessPointInput {AccessPointId : & accessPointId }
207- _ , err = c .efs .DeleteAccessPointWithContext (ctx , deleteAccessPointInput )
214+ _ , err = c .efs .DeleteAccessPoint (ctx , deleteAccessPointInput )
208215 if err != nil {
209216 if isAccessDenied (err ) {
210217 return ErrAccessDenied
@@ -222,7 +229,7 @@ func (c *cloud) DescribeAccessPoint(ctx context.Context, accessPointId string) (
222229 describeAPInput := & efs.DescribeAccessPointsInput {
223230 AccessPointId : & accessPointId ,
224231 }
225- res , err := c .efs .DescribeAccessPointsWithContext (ctx , describeAPInput )
232+ res , err := c .efs .DescribeAccessPoints (ctx , describeAPInput )
226233 if err != nil {
227234 if isAccessDenied (err ) {
228235 return nil , ErrAccessDenied
@@ -250,9 +257,9 @@ func (c *cloud) FindAccessPointByClientToken(ctx context.Context, clientToken, f
250257 klog .V (2 ).Infof ("ClientToken to find AP : %s" , clientToken )
251258 describeAPInput := & efs.DescribeAccessPointsInput {
252259 FileSystemId : & fileSystemId ,
253- MaxResults : aws .Int64 (AccessPointPerFsLimit ),
260+ MaxResults : aws .Int32 (AccessPointPerFsLimit ),
254261 }
255- res , err := c .efs .DescribeAccessPointsWithContext (ctx , describeAPInput )
262+ res , err := c .efs .DescribeAccessPoints (ctx , describeAPInput )
256263 if err != nil {
257264 if isAccessDenied (err ) {
258265 return nil , ErrAccessDenied
@@ -265,7 +272,7 @@ func (c *cloud) FindAccessPointByClientToken(ctx context.Context, clientToken, f
265272 }
266273 for _ , ap := range res .AccessPoints {
267274 // check if AP exists with same client token
268- if aws . StringValue ( ap .ClientToken ) == clientToken {
275+ if * ap .ClientToken == clientToken {
269276 return & AccessPoint {
270277 AccessPointId : * ap .AccessPointId ,
271278 FileSystemId : * ap .FileSystemId ,
@@ -280,9 +287,9 @@ func (c *cloud) FindAccessPointByClientToken(ctx context.Context, clientToken, f
280287func (c * cloud ) ListAccessPoints (ctx context.Context , fileSystemId string ) (accessPoints []* AccessPoint , err error ) {
281288 describeAPInput := & efs.DescribeAccessPointsInput {
282289 FileSystemId : & fileSystemId ,
283- MaxResults : aws .Int64 (AccessPointPerFsLimit ),
290+ MaxResults : aws .Int32 (AccessPointPerFsLimit ),
284291 }
285- res , err := c .efs .DescribeAccessPointsWithContext (ctx , describeAPInput )
292+ res , err := c .efs .DescribeAccessPoints (ctx , describeAPInput )
286293 if err != nil {
287294 if isAccessDenied (err ) {
288295 return nil , ErrAccessDenied
@@ -318,7 +325,7 @@ func (c *cloud) ListAccessPoints(ctx context.Context, fileSystemId string) (acce
318325func (c * cloud ) DescribeFileSystem (ctx context.Context , fileSystemId string ) (fs * FileSystem , err error ) {
319326 describeFsInput := & efs.DescribeFileSystemsInput {FileSystemId : & fileSystemId }
320327 klog .V (5 ).Infof ("Calling DescribeFileSystems with input: %+v" , * describeFsInput )
321- res , err := c .efs .DescribeFileSystemsWithContext (ctx , describeFsInput )
328+ res , err := c .efs .DescribeFileSystems (ctx , describeFsInput )
322329 if err != nil {
323330 if isAccessDenied (err ) {
324331 return nil , ErrAccessDenied
@@ -341,7 +348,7 @@ func (c *cloud) DescribeFileSystem(ctx context.Context, fileSystemId string) (fs
341348func (c * cloud ) DescribeMountTargets (ctx context.Context , fileSystemId , azName string ) (fs * MountTarget , err error ) {
342349 describeMtInput := & efs.DescribeMountTargetsInput {FileSystemId : & fileSystemId }
343350 klog .V (5 ).Infof ("Calling DescribeMountTargets with input: %+v" , * describeMtInput )
344- res , err := c .efs .DescribeMountTargetsWithContext (ctx , describeMtInput )
351+ res , err := c .efs .DescribeMountTargets (ctx , describeMtInput )
345352 if err != nil {
346353 if isAccessDenied (err ) {
347354 return nil , ErrAccessDenied
@@ -363,7 +370,7 @@ func (c *cloud) DescribeMountTargets(ctx context.Context, fileSystemId, azName s
363370 return nil , fmt .Errorf ("No mount target for file system %v is in available state. Please retry in 5 minutes." , fileSystemId )
364371 }
365372
366- var mountTarget * efs .MountTargetDescription
373+ var mountTarget * types .MountTargetDescription
367374 if azName != "" {
368375 mountTarget = getMountTargetForAz (availableMountTargets , azName )
369376 }
@@ -373,7 +380,7 @@ func (c *cloud) DescribeMountTargets(ctx context.Context, fileSystemId, azName s
373380 if mountTarget == nil {
374381 klog .Infof ("Picking a random mount target from available mount target" )
375382 rand .Seed (time .Now ().Unix ())
376- mountTarget = availableMountTargets [rand .Intn (len (availableMountTargets ))]
383+ mountTarget = & availableMountTargets [rand .Intn (len (availableMountTargets ))]
377384 }
378385
379386 return & MountTarget {
@@ -385,26 +392,25 @@ func (c *cloud) DescribeMountTargets(ctx context.Context, fileSystemId, azName s
385392}
386393
387394func isFileSystemNotFound (err error ) bool {
388- if awsErr , ok := err .(awserr.Error ); ok {
389- if awsErr .Code () == efs .ErrCodeFileSystemNotFound {
390- return true
391- }
395+ var FileSystemNotFoundErr * types.FileSystemNotFound
396+ if errors .As (err , & FileSystemNotFoundErr ) {
397+ return true
392398 }
393399 return false
394400}
395401
396402func isAccessPointNotFound (err error ) bool {
397- if awsErr , ok := err .(awserr.Error ); ok {
398- if awsErr .Code () == efs .ErrCodeAccessPointNotFound {
399- return true
400- }
403+ var AccessPointNotFoundErr * types.AccessPointNotFound
404+ if errors .As (err , & AccessPointNotFoundErr ) {
405+ return true
401406 }
402407 return false
403408}
404409
405410func isAccessDenied (err error ) bool {
406- if awsErr , ok := err .(awserr.Error ); ok {
407- if awsErr .Code () == AccessDeniedException {
411+ var apiErr smithy.APIError
412+ if errors .As (err , & apiErr ) {
413+ if apiErr .ErrorCode () == AccessDeniedException {
408414 return true
409415 }
410416 }
@@ -416,34 +422,34 @@ func isDriverBootedInECS() bool {
416422 return ecsContainerMetadataUri != ""
417423}
418424
419- func parseEfsTags (tagMap map [string ]string ) []* efs .Tag {
420- efsTags := []* efs .Tag {}
425+ func parseEfsTags (tagMap map [string ]string ) []types .Tag {
426+ efsTags := []types .Tag {}
421427 for k , v := range tagMap {
422428 key := k
423429 value := v
424- efsTags = append (efsTags , & efs .Tag {
430+ efsTags = append (efsTags , types .Tag {
425431 Key : & key ,
426432 Value : & value ,
427433 })
428434 }
429435 return efsTags
430436}
431437
432- func getAvailableMountTargets (mountTargets []* efs .MountTargetDescription ) []* efs .MountTargetDescription {
433- availableMountTargets := []* efs .MountTargetDescription {}
438+ func getAvailableMountTargets (mountTargets []types .MountTargetDescription ) []types .MountTargetDescription {
439+ availableMountTargets := []types .MountTargetDescription {}
434440 for _ , mt := range mountTargets {
435- if * mt .LifeCycleState == "available" {
441+ if mt .LifeCycleState == "available" {
436442 availableMountTargets = append (availableMountTargets , mt )
437443 }
438444 }
439445
440446 return availableMountTargets
441447}
442448
443- func getMountTargetForAz (mountTargets []* efs .MountTargetDescription , azName string ) * efs .MountTargetDescription {
449+ func getMountTargetForAz (mountTargets []types .MountTargetDescription , azName string ) * types .MountTargetDescription {
444450 for _ , mt := range mountTargets {
445451 if * mt .AvailabilityZoneName == azName {
446- return mt
452+ return & mt
447453 }
448454 }
449455 klog .Infof ("There is no mount target match %v" , azName )
0 commit comments