From d5769905494e05ba5d23eb833fe542b4282e68ed Mon Sep 17 00:00:00 2001 From: cjc7373 Date: Tue, 28 May 2024 09:33:25 +0800 Subject: [PATCH] fix: cluster creation error when serviceVersion is not set in ComponentDefinition (#7415) (cherry picked from commit 19eb56a98e60150bf465e28dad3ee3f86d648c74) --- .../apps/componentversion_controller.go | 5 ++- .../apps/componentversion_controller_test.go | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/controllers/apps/componentversion_controller.go b/controllers/apps/componentversion_controller.go index c653572aeb7..b78320dc8d1 100644 --- a/controllers/apps/componentversion_controller.go +++ b/controllers/apps/componentversion_controller.go @@ -404,8 +404,11 @@ func serviceVersionToCompDefinitions(ctx context.Context, cli client.Reader, return nil, err } + serviceVersions := sets.New[string]() // add definition's service version as default, in case there is no component versions provided - serviceVersions := sets.New[string](compDef.Spec.ServiceVersion) + if compDef.Spec.ServiceVersion != "" { + serviceVersions.Insert(compDef.Spec.ServiceVersion) + } for _, compVersion := range compVersions { serviceVersions = serviceVersions.Union(compatibleServiceVersions4Definition(compDef, compVersion)) } diff --git a/controllers/apps/componentversion_controller_test.go b/controllers/apps/componentversion_controller_test.go index 7df9794a077..16e1a063d4a 100644 --- a/controllers/apps/componentversion_controller_test.go +++ b/controllers/apps/componentversion_controller_test.go @@ -548,4 +548,39 @@ var _ = Describe("ComponentVersion Controller", func() { updateNCheckCompDefinitionImages(compDef, resolvedServiceVersion, "r6", "") // app is r6 and another one is "" }) }) + + Context("resolve component definition, service version without serviceVersion in componentDefinition", func() { + BeforeEach(func() { + compDefs := createCompDefinitionObjs() + for _, compDef := range compDefs { + compDefKey := client.ObjectKeyFromObject(compDef) + Eventually(testapps.GetAndChangeObj(&testCtx, compDefKey, func(compDef *appsv1alpha1.ComponentDefinition) { + compDef.Spec.ServiceVersion = "" + })).Should(Succeed()) + } + compVersionObj = createCompVersionObj() + }) + + AfterEach(func() { + cleanEnv() + }) + + It("full match", func() { + By("with definition v1.0 and service version v0") + compDef, resolvedServiceVersion, err := resolveCompDefinitionNServiceVersion(testCtx.Ctx, testCtx.Cli, testapps.CompDefName("v1.0"), testapps.ServiceVersion("v1")) + Expect(err).Should(Succeed()) + Expect(compDef.Name).Should(Equal(testapps.CompDefName("v1.0"))) + Expect(resolvedServiceVersion).Should(Equal(testapps.ServiceVersion("v1"))) + updateNCheckCompDefinitionImages(compDef, resolvedServiceVersion, "r4", "r4") + }) + + It("w/o service version", func() { + By("with definition v1.0") + compDef, resolvedServiceVersion, err := resolveCompDefinitionNServiceVersion(testCtx.Ctx, testCtx.Cli, testapps.CompDefName("v1.0"), "") + Expect(err).Should(Succeed()) + Expect(compDef.Name).Should(Equal(testapps.CompDefName("v1.0"))) + Expect(resolvedServiceVersion).Should(Equal(testapps.ServiceVersion("v2"))) + updateNCheckCompDefinitionImages(compDef, resolvedServiceVersion, "r3", "r2") + }) + }) })