@@ -121,6 +121,10 @@ func (s *Service) reconcileCluster(ctx context.Context) error {
121
121
return errors .Wrap (err , "failed reconciling cluster config" )
122
122
}
123
123
124
+ if err := s .reconcileAccessConfig (cluster .AccessConfig ); err != nil {
125
+ return errors .Wrap (err , "failed reconciling access config" )
126
+ }
127
+
124
128
if err := s .reconcileLogging (cluster .Logging ); err != nil {
125
129
return errors .Wrap (err , "failed reconciling logging" )
126
130
}
@@ -375,6 +379,13 @@ func (s *Service) createCluster(eksClusterName string) (*eks.Cluster, error) {
375
379
return nil , errors .Wrap (err , "couldn't create vpc config for cluster" )
376
380
}
377
381
382
+ var accessConfig * eks.CreateAccessConfigRequest
383
+ if s .scope .ControlPlane .Spec .AccessConfig != nil && s .scope .ControlPlane .Spec .AccessConfig .AuthenticationMode != "" {
384
+ accessConfig = & eks.CreateAccessConfigRequest {
385
+ AuthenticationMode : aws .String (string (s .scope .ControlPlane .Spec .AccessConfig .AuthenticationMode )),
386
+ }
387
+ }
388
+
378
389
var netConfig * eks.KubernetesNetworkConfigRequest
379
390
if s .scope .VPC ().IsIPv6Enabled () {
380
391
netConfig = & eks.KubernetesNetworkConfigRequest {
@@ -416,13 +427,18 @@ func (s *Service) createCluster(eksClusterName string) (*eks.Cluster, error) {
416
427
Name : aws .String (eksClusterName ),
417
428
Version : eksVersion ,
418
429
Logging : logging ,
430
+ AccessConfig : accessConfig ,
419
431
EncryptionConfig : encryptionConfigs ,
420
432
ResourcesVpcConfig : vpcConfig ,
421
433
RoleArn : role .Arn ,
422
434
Tags : tags ,
423
435
KubernetesNetworkConfig : netConfig ,
424
436
}
425
437
438
+ if err := input .Validate (); err != nil {
439
+ return nil , errors .Wrap (err , "created invalid CreateClusterInput" )
440
+ }
441
+
426
442
var out * eks.CreateClusterOutput
427
443
if err := wait .WaitForWithRetryable (wait .NewBackoff (), func () (bool , error ) {
428
444
if out , err = s .EKSClient .CreateCluster (input ); err != nil {
@@ -501,6 +517,44 @@ func (s *Service) reconcileClusterConfig(cluster *eks.Cluster) error {
501
517
return nil
502
518
}
503
519
520
+ func (s * Service ) reconcileAccessConfig (accessConfig * eks.AccessConfigResponse ) error {
521
+ input := eks.UpdateClusterConfigInput {Name : aws .String (s .scope .KubernetesClusterName ())}
522
+
523
+ if s .scope .ControlPlane .Spec .AccessConfig == nil || s .scope .ControlPlane .Spec .AccessConfig .AuthenticationMode == "" {
524
+ return nil
525
+ }
526
+
527
+ expectedAuthenticationMode := string (s .scope .ControlPlane .Spec .AccessConfig .AuthenticationMode )
528
+ if expectedAuthenticationMode != aws .StringValue (accessConfig .AuthenticationMode ) {
529
+ input .AccessConfig = & eks.UpdateAccessConfigRequest {
530
+ AuthenticationMode : aws .String (expectedAuthenticationMode ),
531
+ }
532
+ }
533
+
534
+ if input .AccessConfig != nil {
535
+ if err := input .Validate (); err != nil {
536
+ return errors .Wrap (err , "created invalid UpdateClusterConfigInput" )
537
+ }
538
+
539
+ if err := wait .WaitForWithRetryable (wait .NewBackoff (), func () (bool , error ) {
540
+ if _ , err := s .EKSClient .UpdateClusterConfig (& input ); err != nil {
541
+ if aerr , ok := err .(awserr.Error ); ok {
542
+ return false , aerr
543
+ }
544
+ return false , err
545
+ }
546
+ conditions .MarkTrue (s .scope .ControlPlane , ekscontrolplanev1 .EKSControlPlaneUpdatingCondition )
547
+ record .Eventf (s .scope .ControlPlane , "InitiatedUpdateEKSControlPlane" , "Initiated auth config update for EKS control plane %s" , s .scope .KubernetesClusterName ())
548
+ return true , nil
549
+ }); err != nil {
550
+ record .Warnf (s .scope .ControlPlane , "FailedUpdateEKSControlPlane" , "Failed to update EKS control plane auth config: %v" , err )
551
+ return errors .Wrapf (err , "failed to update EKS cluster" )
552
+ }
553
+ }
554
+
555
+ return nil
556
+ }
557
+
504
558
func (s * Service ) reconcileLogging (logging * eks.Logging ) error {
505
559
input := eks.UpdateClusterConfigInput {Name : aws .String (s .scope .KubernetesClusterName ())}
506
560
0 commit comments