Feat: support pause reconcile (#5732)

Signed-off-by: Somefive <yd219913@alibaba-inc.com>
This commit is contained in:
Somefive
2023-03-24 13:19:44 +08:00
committed by GitHub
parent d694dff4de
commit 4aa14fc337
5 changed files with 45 additions and 3 deletions

2
go.mod
View File

@@ -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

4
go.sum
View File

@@ -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=

View File

@@ -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")

View File

@@ -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())
})
})
})

View File

@@ -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'