diff --git a/apis/v1alpha1/ack-generate-metadata.yaml b/apis/v1alpha1/ack-generate-metadata.yaml index 53bd7ecb..915e004d 100755 --- a/apis/v1alpha1/ack-generate-metadata.yaml +++ b/apis/v1alpha1/ack-generate-metadata.yaml @@ -1,8 +1,8 @@ ack_generate_info: - build_date: "2025-09-19T17:11:39Z" - build_hash: 6b4211163dcc34776b01da9a18217bac0f4103fd - go_version: go1.24.6 - version: v0.52.0 + build_date: "2025-10-07T18:19:29Z" + build_hash: 37562000612658e62686882f1b4b924049d1e38c + go_version: go1.24.0 + version: v0.52.0-5-g3756200 api_directory_checksum: 2b5e65a1d5f0a032d51209f925b714aff4b6dc96 api_version: v1alpha1 aws_sdk_go_version: v1.37.0 diff --git a/config/crd/bases/eks.services.k8s.aws_accessentries.yaml b/config/crd/bases/eks.services.k8s.aws_accessentries.yaml index 9935fe1d..a7b29415 100644 --- a/config/crd/bases/eks.services.k8s.aws_accessentries.yaml +++ b/config/crd/bases/eks.services.k8s.aws_accessentries.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: accessentries.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/config/crd/bases/eks.services.k8s.aws_addons.yaml b/config/crd/bases/eks.services.k8s.aws_addons.yaml index 7492181c..57dbe04a 100644 --- a/config/crd/bases/eks.services.k8s.aws_addons.yaml +++ b/config/crd/bases/eks.services.k8s.aws_addons.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: addons.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/config/crd/bases/eks.services.k8s.aws_clusters.yaml b/config/crd/bases/eks.services.k8s.aws_clusters.yaml index 02c02009..93f40bad 100644 --- a/config/crd/bases/eks.services.k8s.aws_clusters.yaml +++ b/config/crd/bases/eks.services.k8s.aws_clusters.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: clusters.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/config/crd/bases/eks.services.k8s.aws_fargateprofiles.yaml b/config/crd/bases/eks.services.k8s.aws_fargateprofiles.yaml index adcb850e..ce964289 100644 --- a/config/crd/bases/eks.services.k8s.aws_fargateprofiles.yaml +++ b/config/crd/bases/eks.services.k8s.aws_fargateprofiles.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: fargateprofiles.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/config/crd/bases/eks.services.k8s.aws_identityproviderconfigs.yaml b/config/crd/bases/eks.services.k8s.aws_identityproviderconfigs.yaml index 9315444d..b70d4231 100644 --- a/config/crd/bases/eks.services.k8s.aws_identityproviderconfigs.yaml +++ b/config/crd/bases/eks.services.k8s.aws_identityproviderconfigs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: identityproviderconfigs.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/config/crd/bases/eks.services.k8s.aws_nodegroups.yaml b/config/crd/bases/eks.services.k8s.aws_nodegroups.yaml index 0875f9b6..8695676a 100644 --- a/config/crd/bases/eks.services.k8s.aws_nodegroups.yaml +++ b/config/crd/bases/eks.services.k8s.aws_nodegroups.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: nodegroups.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/config/crd/bases/eks.services.k8s.aws_podidentityassociations.yaml b/config/crd/bases/eks.services.k8s.aws_podidentityassociations.yaml index 527b2762..26d0caed 100644 --- a/config/crd/bases/eks.services.k8s.aws_podidentityassociations.yaml +++ b/config/crd/bases/eks.services.k8s.aws_podidentityassociations.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: podidentityassociations.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/helm/crds/eks.services.k8s.aws_accessentries.yaml b/helm/crds/eks.services.k8s.aws_accessentries.yaml index 9935fe1d..a7b29415 100644 --- a/helm/crds/eks.services.k8s.aws_accessentries.yaml +++ b/helm/crds/eks.services.k8s.aws_accessentries.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: accessentries.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/helm/crds/eks.services.k8s.aws_addons.yaml b/helm/crds/eks.services.k8s.aws_addons.yaml index 075f86c5..d73716d8 100644 --- a/helm/crds/eks.services.k8s.aws_addons.yaml +++ b/helm/crds/eks.services.k8s.aws_addons.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: addons.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/helm/crds/eks.services.k8s.aws_clusters.yaml b/helm/crds/eks.services.k8s.aws_clusters.yaml index 411cc3fb..dade39f9 100644 --- a/helm/crds/eks.services.k8s.aws_clusters.yaml +++ b/helm/crds/eks.services.k8s.aws_clusters.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: clusters.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/helm/crds/eks.services.k8s.aws_fargateprofiles.yaml b/helm/crds/eks.services.k8s.aws_fargateprofiles.yaml index adcb850e..ce964289 100644 --- a/helm/crds/eks.services.k8s.aws_fargateprofiles.yaml +++ b/helm/crds/eks.services.k8s.aws_fargateprofiles.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: fargateprofiles.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/helm/crds/eks.services.k8s.aws_identityproviderconfigs.yaml b/helm/crds/eks.services.k8s.aws_identityproviderconfigs.yaml index 9315444d..b70d4231 100644 --- a/helm/crds/eks.services.k8s.aws_identityproviderconfigs.yaml +++ b/helm/crds/eks.services.k8s.aws_identityproviderconfigs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: identityproviderconfigs.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/helm/crds/eks.services.k8s.aws_nodegroups.yaml b/helm/crds/eks.services.k8s.aws_nodegroups.yaml index 0875f9b6..8695676a 100644 --- a/helm/crds/eks.services.k8s.aws_nodegroups.yaml +++ b/helm/crds/eks.services.k8s.aws_nodegroups.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: nodegroups.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/helm/crds/eks.services.k8s.aws_podidentityassociations.yaml b/helm/crds/eks.services.k8s.aws_podidentityassociations.yaml index 6acc2f2a..170cdced 100644 --- a/helm/crds/eks.services.k8s.aws_podidentityassociations.yaml +++ b/helm/crds/eks.services.k8s.aws_podidentityassociations.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: podidentityassociations.eks.services.k8s.aws spec: group: eks.services.k8s.aws diff --git a/helm/crds/services.k8s.aws_adoptedresources.yaml b/helm/crds/services.k8s.aws_adoptedresources.yaml index b7be3224..d6cdd10f 100644 --- a/helm/crds/services.k8s.aws_adoptedresources.yaml +++ b/helm/crds/services.k8s.aws_adoptedresources.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: adoptedresources.services.k8s.aws spec: group: services.k8s.aws diff --git a/helm/crds/services.k8s.aws_fieldexports.yaml b/helm/crds/services.k8s.aws_fieldexports.yaml index 49b4f383..6e2c61e6 100644 --- a/helm/crds/services.k8s.aws_fieldexports.yaml +++ b/helm/crds/services.k8s.aws_fieldexports.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.2 + controller-gen.kubebuilder.io/version: v0.19.0 name: fieldexports.services.k8s.aws spec: group: services.k8s.aws diff --git a/pkg/resource/cluster/hook.go b/pkg/resource/cluster/hook.go index a0b647d5..3a8aa5e9 100644 --- a/pkg/resource/cluster/hook.go +++ b/pkg/resource/cluster/hook.go @@ -666,37 +666,54 @@ func (rm *resourceManager) updateComputeConfig( exit := rlog.Trace("rm.updateComputeConfig") defer exit(err) - // Convert []*string to []string for NodePools - nodePools := make([]string, 0, len(r.ko.Spec.ComputeConfig.NodePools)) - for _, nodePool := range r.ko.Spec.ComputeConfig.NodePools { - if nodePool != nil { - nodePools = append(nodePools, *nodePool) - } - } - + // All three fields must be initialized for EKS Auto Mode to be properly toggled. input := &svcsdk.UpdateClusterConfigInput{ - Name: r.ko.Spec.Name, - ComputeConfig: &svcsdktypes.ComputeConfigRequest{ - Enabled: r.ko.Spec.ComputeConfig.Enabled, - NodePools: nodePools, // Use the converted []string slice - NodeRoleArn: r.ko.Spec.ComputeConfig.NodeRoleARN, - }, + Name: r.ko.Spec.Name, + ComputeConfig: &svcsdktypes.ComputeConfigRequest{}, StorageConfig: &svcsdktypes.StorageConfigRequest{ - BlockStorage: &svcsdktypes.BlockStorage{ - Enabled: r.ko.Spec.StorageConfig.BlockStorage.Enabled, - }, + BlockStorage: &svcsdktypes.BlockStorage{}, }, KubernetesNetworkConfig: &svcsdktypes.KubernetesNetworkConfigRequest{ - ElasticLoadBalancing: &svcsdktypes.ElasticLoadBalancing{ - Enabled: r.ko.Spec.KubernetesNetworkConfig.ElasticLoadBalancing.Enabled, - }, - IpFamily: svcsdktypes.IpFamily(*r.ko.Spec.KubernetesNetworkConfig.IPFamily), - ServiceIpv4Cidr: r.ko.Spec.KubernetesNetworkConfig.ServiceIPv4CIDR, + ElasticLoadBalancing: &svcsdktypes.ElasticLoadBalancing{}, }, } + // Process compute configs + if r.ko.Spec.ComputeConfig != nil { + // Convert []*string to []string for NodePools + nodePools := make([]string, 0, len(r.ko.Spec.ComputeConfig.NodePools)) + for _, nodePool := range r.ko.Spec.ComputeConfig.NodePools { + if nodePool != nil { + nodePools = append(nodePools, *nodePool) + } + } + + input.ComputeConfig.Enabled = r.ko.Spec.ComputeConfig.Enabled + input.ComputeConfig.NodePools = nodePools // Use the converted []string slice + input.ComputeConfig.NodeRoleArn = r.ko.Spec.ComputeConfig.NodeRoleARN + } + + // Process storage configs + if r.ko.Spec.StorageConfig != nil && r.ko.Spec.StorageConfig.BlockStorage != nil { + input.StorageConfig.BlockStorage.Enabled = r.ko.Spec.StorageConfig.BlockStorage.Enabled + } + + // Process network configs + if r.ko.Spec.KubernetesNetworkConfig != nil { + if r.ko.Spec.KubernetesNetworkConfig.ElasticLoadBalancing != nil { + input.KubernetesNetworkConfig.ElasticLoadBalancing.Enabled = r.ko.Spec.KubernetesNetworkConfig.ElasticLoadBalancing.Enabled + } + + if r.ko.Spec.KubernetesNetworkConfig.IPFamily != nil { + input.KubernetesNetworkConfig.IpFamily = svcsdktypes.IpFamily(*r.ko.Spec.KubernetesNetworkConfig.IPFamily) + } + + input.KubernetesNetworkConfig.ServiceIpv4Cidr = r.ko.Spec.KubernetesNetworkConfig.ServiceIPv4CIDR + } + _, err = rm.sdkapi.UpdateClusterConfig(ctx, input) rm.metrics.RecordAPICall("UPDATE", "UpdateClusterConfig", err) + if err != nil { return err } diff --git a/pkg/resource/cluster/sdk.go b/pkg/resource/cluster/sdk.go index a0895fa9..9d43fb9a 100644 --- a/pkg/resource/cluster/sdk.go +++ b/pkg/resource/cluster/sdk.go @@ -410,6 +410,15 @@ func (rm *resourceManager) sdkFind( ko.Spec.ResourcesVPCConfig.SecurityGroupRefs = r.ko.Spec.ResourcesVPCConfig.SecurityGroupRefs } + desiredConfig := r.ko.Spec.KubernetesNetworkConfig + latestConfig := ko.Spec.KubernetesNetworkConfig + + // ElasticLoadBalancing can by default be initialized as false even when ACK is providing an empty input. + // This condition prevents unnecessary deltas when the desired value is empty and ElasticLoadBalancing is already disabled. + if desiredConfig != nil && desiredConfig.ElasticLoadBalancing == nil && latestConfig != nil { + latestConfig.ElasticLoadBalancing = nil + } + if !clusterActive(&resource{ko}) { // Setting resource synced condition to false will trigger a requeue of // the resource. No need to return a requeue error here. diff --git a/templates/hooks/cluster/sdk_read_one_post_set_output.go.tpl b/templates/hooks/cluster/sdk_read_one_post_set_output.go.tpl index eb9eb696..5031e7bb 100644 --- a/templates/hooks/cluster/sdk_read_one_post_set_output.go.tpl +++ b/templates/hooks/cluster/sdk_read_one_post_set_output.go.tpl @@ -5,6 +5,15 @@ if r.ko.Spec.ResourcesVPCConfig != nil && r.ko.Spec.ResourcesVPCConfig.SecurityGroupRefs != nil { ko.Spec.ResourcesVPCConfig.SecurityGroupRefs = r.ko.Spec.ResourcesVPCConfig.SecurityGroupRefs } + + desiredConfig := r.ko.Spec.KubernetesNetworkConfig + latestConfig := ko.Spec.KubernetesNetworkConfig + + // ElasticLoadBalancing can by default be initialized as false even when ACK is providing an empty input. + // This condition prevents unnecessary deltas when the desired value is empty and ElasticLoadBalancing is already disabled. + if desiredConfig != nil && desiredConfig.ElasticLoadBalancing == nil && latestConfig != nil { + latestConfig.ElasticLoadBalancing = nil + } if !clusterActive(&resource{ko}) { // Setting resource synced condition to false will trigger a requeue of