From 285dccdd06dad7a529ec40b6fd550d47114a4ebe Mon Sep 17 00:00:00 2001 From: Michal Jura Date: Thu, 1 Aug 2024 10:40:31 +0200 Subject: [PATCH] Set information about CSI EBS driver Issue: https://github.com/rancher/eks-operator/issues/106 (cherry picked from commit c58527cfdbf123d18d077b7d0ee600935af33ace) --- controller/eks-cluster-config-handler.go | 4 ++-- controller/external.go | 15 +++++++++++++-- pkg/eks/get.go | 4 ++-- pkg/eks/get_test.go | 6 +++--- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/controller/eks-cluster-config-handler.go b/controller/eks-cluster-config-handler.go index 2e6b4e5d..2f46d147 100644 --- a/controller/eks-cluster-config-handler.go +++ b/controller/eks-cluster-config-handler.go @@ -310,7 +310,7 @@ func (h *Handler) checkAndUpdate(ctx context.Context, config *eksv1.EKSClusterCo return h.eksCC.UpdateStatus(config) } - upstreamSpec, clusterARN, err := BuildUpstreamClusterState(ctx, config.Spec.DisplayName, config.Status.ManagedLaunchTemplateID, clusterState, nodeGroupStates, awsSVCs.ec2, true) + upstreamSpec, clusterARN, err := BuildUpstreamClusterState(ctx, config.Spec.DisplayName, config.Status.ManagedLaunchTemplateID, clusterState, nodeGroupStates, awsSVCs, true) if err != nil { return config, err } @@ -1000,7 +1000,7 @@ func (h *Handler) updateUpstreamClusterState(ctx context.Context, upstreamSpec * // check if ebs csi driver needs to be enabled if aws.ToBool(config.Spec.EBSCSIDriver) { - installedArn, err := awsservices.CheckEBSAddon(ctx, awsSVCs.eks, config) + installedArn, err := awsservices.CheckEBSAddon(ctx, config.Spec.DisplayName, awsSVCs.eks) if err != nil { return nil, fmt.Errorf("error checking if ebs csi driver addon is installed: %w", err) } diff --git a/controller/external.go b/controller/external.go index d0185781..a256bf0c 100644 --- a/controller/external.go +++ b/controller/external.go @@ -5,6 +5,7 @@ import ( "encoding/base64" "fmt" "strconv" + "strings" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/eks" @@ -48,7 +49,7 @@ func NodeGroupIssueIsUpdatable(code string) bool { } // BuildUpstreamClusterState builds the upstream cluster state from the given eks cluster and node group states. -func BuildUpstreamClusterState(ctx context.Context, name, managedTemplateID string, clusterState *eks.DescribeClusterOutput, nodeGroupStates []*eks.DescribeNodegroupOutput, ec2Service services.EC2ServiceInterface, includeManagedLaunchTemplate bool) (*eksv1.EKSClusterConfigSpec, string, error) { +func BuildUpstreamClusterState(ctx context.Context, name, managedTemplateID string, clusterState *eks.DescribeClusterOutput, nodeGroupStates []*eks.DescribeNodegroupOutput, awsSVCs *awsServices, includeManagedLaunchTemplate bool) (*eksv1.EKSClusterConfigSpec, string, error) { upstreamSpec := &eksv1.EKSClusterConfigSpec{} upstreamSpec.Imported = true @@ -98,6 +99,16 @@ func BuildUpstreamClusterState(ctx context.Context, name, managedTemplateID stri } } + // set ebs csi driver + upstreamSpec.EBSCSIDriver = aws.Bool(false) + currentARN, err := awsservices.CheckEBSAddon(ctx, name, awsSVCs.eks) + if err != nil { + return nil, "", fmt.Errorf("error checking if ebs csi driver addon is installed: %w", err) + } + if strings.Contains(currentARN, "aws-ebs-csi-driver") { + upstreamSpec.EBSCSIDriver = aws.Bool(true) + } + // set node groups upstreamSpec.NodeGroups = make([]eksv1.NodeGroup, 0, len(nodeGroupStates)) for _, ng := range nodeGroupStates { @@ -142,7 +153,7 @@ func BuildUpstreamClusterState(ctx context.Context, name, managedTemplateID stri if managedTemplateID == aws.ToString(ngToAdd.LaunchTemplate.ID) { // If this is a rancher-managed launch template, then we move the data from the launch template to the node group. launchTemplateRequestOutput, err := awsservices.GetLaunchTemplateVersions(ctx, &awsservices.GetLaunchTemplateVersionsOpts{ - EC2Service: ec2Service, + EC2Service: awsSVCs.ec2, LaunchTemplateID: ngToAdd.LaunchTemplate.ID, Versions: []*string{ng.Nodegroup.LaunchTemplate.Version}, }) diff --git a/pkg/eks/get.go b/pkg/eks/get.go index abd8eb18..0c5d183f 100644 --- a/pkg/eks/get.go +++ b/pkg/eks/get.go @@ -49,10 +49,10 @@ func GetLaunchTemplateVersions(ctx context.Context, opts *GetLaunchTemplateVersi // CheckEBSAddon checks if the EBS CSI driver add-on is installed. If it is, it will return // the ARN of the add-on. If it is not, it will return an empty string. Otherwise, it will return an error -func CheckEBSAddon(ctx context.Context, eksService services.EKSServiceInterface, config *eksv1.EKSClusterConfig) (string, error) { +func CheckEBSAddon(ctx context.Context, clusterName string, eksService services.EKSServiceInterface) (string, error) { input := eks.DescribeAddonInput{ AddonName: aws.String(ebsCSIAddonName), - ClusterName: aws.String(config.Spec.DisplayName), + ClusterName: aws.String(clusterName), } output, err := eksService.DescribeAddon(ctx, &input) diff --git a/pkg/eks/get_test.go b/pkg/eks/get_test.go index ad71cdaa..83e1b6bf 100644 --- a/pkg/eks/get_test.go +++ b/pkg/eks/get_test.go @@ -141,7 +141,7 @@ var _ = Describe("GetLaunchTemplateVersions", func() { }, } eksServiceMock.EXPECT().DescribeAddon(ctx, gomock.Any()).Return(eksDescribeAddonOutput, nil) - addonArn, err := CheckEBSAddon(ctx, enableEBSCSIDriverInput.EKSService, enableEBSCSIDriverInput.Config) + addonArn, err := CheckEBSAddon(ctx, enableEBSCSIDriverInput.Config.Spec.DisplayName, enableEBSCSIDriverInput.EKSService) Expect(err).To(Succeed()) Expect(addonArn).To(Equal("arn:aws::ebs-csi-driver")) }) @@ -149,7 +149,7 @@ var _ = Describe("GetLaunchTemplateVersions", func() { It("should detect that addon is not installed", func() { eksDescribeAddonOutput = &eks.DescribeAddonOutput{} eksServiceMock.EXPECT().DescribeAddon(ctx, gomock.Any()).Return(eksDescribeAddonOutput, nil) - addonArn, err := CheckEBSAddon(ctx, enableEBSCSIDriverInput.EKSService, enableEBSCSIDriverInput.Config) + addonArn, err := CheckEBSAddon(ctx, enableEBSCSIDriverInput.Config.Spec.DisplayName, enableEBSCSIDriverInput.EKSService) Expect(err).To(Succeed()) Expect(addonArn).To(Equal("")) }) @@ -157,7 +157,7 @@ var _ = Describe("GetLaunchTemplateVersions", func() { It("should fail to check if addon is not installed", func() { eksDescribeAddonOutput = &eks.DescribeAddonOutput{} eksServiceMock.EXPECT().DescribeAddon(ctx, gomock.Any()).Return(nil, fmt.Errorf("failed to describe addon")) - _, err := CheckEBSAddon(ctx, enableEBSCSIDriverInput.EKSService, enableEBSCSIDriverInput.Config) + _, err := CheckEBSAddon(ctx, enableEBSCSIDriverInput.Config.Spec.DisplayName, enableEBSCSIDriverInput.EKSService) Expect(err).ToNot(Succeed()) }) })