From 4aa14fc337a621ec1ccfebbcca289be252825000 Mon Sep 17 00:00:00 2001 From: Somefive Date: Fri, 24 Mar 2023 13:19:44 +0800 Subject: [PATCH] Feat: support pause reconcile (#5732) Signed-off-by: Somefive --- go.mod | 2 +- go.sum | 4 ++-- .../application/application_controller.go | 3 +++ .../multicluster_test.go | 24 +++++++++++++++++++ .../testdata/app/app-pause.yaml | 15 ++++++++++++ 5 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 test/e2e-multicluster-test/testdata/app/app-pause.yaml diff --git a/go.mod b/go.mod index dff9d84c7..38d4089b5 100644 --- a/go.mod +++ b/go.mod @@ -50,7 +50,7 @@ require ( github.com/hashicorp/hcl/v2 v2.16.2 github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 github.com/imdario/mergo v0.3.13 - github.com/kubevela/pkg v0.0.0-20230316114047-e2b41b377bac + github.com/kubevela/pkg v0.0.0-20230324033653-d7022ead033c github.com/kubevela/prism v1.7.0-alpha.1 github.com/kubevela/workflow v0.4.1-0.20230313085319-59e7c1c967fe github.com/kyokomi/emoji v2.2.4+incompatible diff --git a/go.sum b/go.sum index 34c23b505..f0c73a0fb 100644 --- a/go.sum +++ b/go.sum @@ -949,8 +949,8 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kubevela/pkg v0.0.0-20230316114047-e2b41b377bac h1:TLQchMx+BRTnHyebDpOWF2RpF2eTczFBtJro3/H9vwI= -github.com/kubevela/pkg v0.0.0-20230316114047-e2b41b377bac/go.mod h1:GilLxt+9L4sU2tLeZAGHga8wiYmjjfPX/Q6JkyuuXSM= +github.com/kubevela/pkg v0.0.0-20230324033653-d7022ead033c h1:8Bid3mOVTNXTnyuUJ8dcd0SGFNvrHlbx7bcwAsIA5dk= +github.com/kubevela/pkg v0.0.0-20230324033653-d7022ead033c/go.mod h1:GilLxt+9L4sU2tLeZAGHga8wiYmjjfPX/Q6JkyuuXSM= github.com/kubevela/prism v1.7.0-alpha.1 h1:oeZFn1Oy6gxSSFzMTfsWjLOCKaaooMVm1JGNK4j4Mlo= github.com/kubevela/prism v1.7.0-alpha.1/go.mod h1:AJSDfdA+RkRSnWx3xEcogbmOTpX+l7RSIwqVHxwUtaI= github.com/kubevela/workflow v0.4.1-0.20230313085319-59e7c1c967fe h1:Ke96MD4rRhXkua9AbuXvcprptkwE8mD/At4AZsL14ls= diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go b/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go index 88c02838e..a5a98f6eb 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go @@ -123,6 +123,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu return r.result(client.IgnoreNotFound(err)).ret() } ctx = withOriginalApp(ctx, app) + if ctrlrec.IsPaused(app) { + return ctrl.Result{}, nil + } if !r.matchControllerRequirement(app) { logCtx.Info("skip app: not match the controller requirement of app") diff --git a/test/e2e-multicluster-test/multicluster_test.go b/test/e2e-multicluster-test/multicluster_test.go index 8d4864acf..b29f9eab5 100644 --- a/test/e2e-multicluster-test/multicluster_test.go +++ b/test/e2e-multicluster-test/multicluster_test.go @@ -24,6 +24,7 @@ import ( "strings" "time" + "github.com/kubevela/pkg/controller/reconciler" workflowv1alpha1 "github.com/kubevela/workflow/api/v1alpha1" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -987,5 +988,28 @@ var _ = Describe("Test multicluster scenario", func() { g.Expect(app.Status.Services[0].Traits[0].Healthy).Should(BeTrue()) }).WithTimeout(20 * time.Second).Should(Succeed()) }) + + It("Test pause application", func() { + app := &v1beta1.Application{} + bs, err := os.ReadFile("./testdata/app/app-pause.yaml") + Expect(err).Should(Succeed()) + Expect(yaml.Unmarshal(bs, app)).Should(Succeed()) + app.SetNamespace(namespace) + Expect(k8sClient.Create(hubCtx, app)).Should(Succeed()) + time.Sleep(10 * time.Second) + appKey := client.ObjectKeyFromObject(app) + Expect(k8sClient.Get(hubCtx, appKey, app)).Should(Succeed()) + Expect(app.Status.Workflow).Should(BeNil()) + Eventually(func(g Gomega) { + g.Expect(k8sClient.Get(hubCtx, appKey, app)).Should(Succeed()) + reconciler.SetPause(app, false) + g.Expect(k8sClient.Update(hubCtx, app)).Should(Succeed()) + }).WithTimeout(5 * time.Second).WithPolling(time.Second).Should(Succeed()) + Eventually(func(g Gomega) { + g.Expect(k8sClient.Get(hubCtx, appKey, app)).Should(Succeed()) + g.Expect(app.Status.Phase).Should(Equal(common.ApplicationRunning)) + }).WithTimeout(15 * time.Second).WithPolling(3 * time.Second).Should(Succeed()) + Expect(k8sClient.Delete(hubCtx, app)).Should(Succeed()) + }) }) }) diff --git a/test/e2e-multicluster-test/testdata/app/app-pause.yaml b/test/e2e-multicluster-test/testdata/app/app-pause.yaml new file mode 100644 index 000000000..c0e021aa9 --- /dev/null +++ b/test/e2e-multicluster-test/testdata/app/app-pause.yaml @@ -0,0 +1,15 @@ +apiVersion: core.oam.dev/v1beta1 +kind: Application +metadata: + name: busybox + labels: + controller.core.oam.dev/pause: "true" +spec: + components: + - name: data-worker + type: worker + properties: + image: busybox + cmd: + - sleep + - '1000000' \ No newline at end of file