From 7040ad205766f842d8f6fbe71c39c87d2544121e Mon Sep 17 00:00:00 2001 From: Simon Wakenhut Date: Fri, 4 Oct 2024 09:47:21 +0200 Subject: [PATCH] feat(eks): Add accessConfig lateInit & observation Signed-off-by: Simon Wakenhut --- apis/eks/v1beta1/types.go | 9 +++++++++ apis/eks/v1beta1/zz_generated.deepcopy.go | 16 ++++++++++++++++ .../crds/eks.aws.crossplane.io_clusters.yaml | 7 +++++++ pkg/clients/eks/eks.go | 18 +++++++++++++++--- 4 files changed, 47 insertions(+), 3 deletions(-) diff --git a/apis/eks/v1beta1/types.go b/apis/eks/v1beta1/types.go index 516d712f92..1703652b9a 100644 --- a/apis/eks/v1beta1/types.go +++ b/apis/eks/v1beta1/types.go @@ -360,6 +360,9 @@ type ClusterObservation struct { // in the Amazon EKS User Guide. ResourcesVpcConfig VpcConfigResponse `json:"resourcesVpcConfig,omitempty"` + // The access configuration for the cluster. + AccessConfig AccessConfigResponse `json:"accessConfig,omitempty"` + // The current status of the cluster. Status ClusterStatusType `json:"status,omitempty"` } @@ -464,6 +467,12 @@ type VpcConfigResponse struct { VpcID string `json:"vpcId,omitempty"` } +// AccessConfigResponse is the observed access configuration for a cluster. +type AccessConfigResponse struct { + // The authentication mode used for the cluster. + AuthenticationMode AuthenticationMode `json:"authenticationMode,omitempty"` +} + // A ClusterSpec defines the desired state of an EKS Cluster. type ClusterSpec struct { xpv1.ResourceSpec `json:",inline"` diff --git a/apis/eks/v1beta1/zz_generated.deepcopy.go b/apis/eks/v1beta1/zz_generated.deepcopy.go index a851d1394f..cd89eaa879 100644 --- a/apis/eks/v1beta1/zz_generated.deepcopy.go +++ b/apis/eks/v1beta1/zz_generated.deepcopy.go @@ -45,6 +45,21 @@ func (in *AccessConfig) DeepCopy() *AccessConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessConfigResponse) DeepCopyInto(out *AccessConfigResponse) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessConfigResponse. +func (in *AccessConfigResponse) DeepCopy() *AccessConfigResponse { + if in == nil { + return nil + } + out := new(AccessConfigResponse) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Cluster) DeepCopyInto(out *Cluster) { *out = *in @@ -115,6 +130,7 @@ func (in *ClusterObservation) DeepCopyInto(out *ClusterObservation) { in.OutpostConfig.DeepCopyInto(&out.OutpostConfig) out.KubernetesNetworkConfig = in.KubernetesNetworkConfig out.ResourcesVpcConfig = in.ResourcesVpcConfig + out.AccessConfig = in.AccessConfig } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterObservation. diff --git a/package/crds/eks.aws.crossplane.io_clusters.yaml b/package/crds/eks.aws.crossplane.io_clusters.yaml index 7cb8d9c006..18de9423b8 100644 --- a/package/crds/eks.aws.crossplane.io_clusters.yaml +++ b/package/crds/eks.aws.crossplane.io_clusters.yaml @@ -765,6 +765,13 @@ spec: atProvider: description: ClusterObservation is the observed state of a cluster. properties: + accessConfig: + description: The access configuration for the cluster. + properties: + authenticationMode: + description: The authentication mode used for the cluster. + type: string + type: object arn: description: The Amazon Resource Name (ARN) of the cluster. type: string diff --git a/pkg/clients/eks/eks.go b/pkg/clients/eks/eks.go index 8029a35440..d354a69e27 100644 --- a/pkg/clients/eks/eks.go +++ b/pkg/clients/eks/eks.go @@ -36,7 +36,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/utils/ptr" "github.com/crossplane-contrib/provider-aws/apis/eks/v1beta1" "github.com/crossplane-contrib/provider-aws/pkg/utils/jsonpatch" @@ -294,6 +293,12 @@ func GenerateObservation(cluster *ekstypes.Cluster) v1beta1.ClusterObservation { } } + if cluster.AccessConfig != nil { + o.AccessConfig = v1beta1.AccessConfigResponse{ + AuthenticationMode: v1beta1.AuthenticationMode(cluster.AccessConfig.AuthenticationMode), + } + } + if cluster.CertificateAuthority != nil { o.CertificateAuthorityData = pointer.StringValue(cluster.CertificateAuthority.Data) } @@ -361,8 +366,15 @@ func LateInitialize(in *v1beta1.ClusterParameters, cluster *ekstypes.Cluster) { } } if cluster.AccessConfig != nil { - in.AccessConfig = &v1beta1.AccessConfig{ - AuthenticationMode: ptr.To(v1beta1.AuthenticationMode(string(cluster.AccessConfig.AuthenticationMode))), + currentAuthenticationMode := v1beta1.AuthenticationMode(cluster.AccessConfig.AuthenticationMode) + if in.AccessConfig == nil { + in.AccessConfig = &v1beta1.AccessConfig{ + AuthenticationMode: ¤tAuthenticationMode, + } + } else { + in.AccessConfig = &v1beta1.AccessConfig{ + AuthenticationMode: pointer.LateInitialize(in.AccessConfig.AuthenticationMode, ¤tAuthenticationMode), + } } }