diff --git a/pkg/workflow/context/context.go b/pkg/workflow/context/context.go index 107377f02..a63d5138e 100644 --- a/pkg/workflow/context/context.go +++ b/pkg/workflow/context/context.go @@ -26,8 +26,12 @@ import ( "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" + "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/pkg/cue/model" "github.com/oam-dev/kubevela/pkg/cue/model/value" "github.com/oam-dev/kubevela/pkg/oam/util" @@ -256,35 +260,9 @@ func (comp *ComponentManifest) unmarshal(v string) error { return nil } -// NewContext new workflow context. -func NewContext(cli client.Client, ns, rev string) (Context, error) { - - var ( - ctx = context.Background() - manifestCm corev1.ConfigMap - ) - - if err := cli.Get(ctx, client.ObjectKey{ - Namespace: ns, - Name: rev, - }, &manifestCm); err != nil { - return nil, errors.WithMessagef(err, "Get manifest ConfigMap %s/%s ", ns, rev) - } - - wfCtx, err := newContext(cli, ns, rev) - if err != nil { - return nil, err - } - if err := wfCtx.LoadFromConfigMap(manifestCm); err != nil { - return nil, errors.WithMessagef(err, "load from ConfigMap %s/%s", ns, rev) - } - - return wfCtx, wfCtx.Commit() -} - -// NewEmptyContext new workflow context without initialize data. -func NewEmptyContext(cli client.Client, ns, app string) (Context, error) { - wfCtx, err := newContext(cli, ns, app) +// NewContext new workflow context without initialize data. +func NewContext(cli client.Client, ns, app string, appUID types.UID) (Context, error) { + wfCtx, err := newContext(cli, ns, app, appUID) if err != nil { return nil, err } @@ -292,13 +270,22 @@ func NewEmptyContext(cli client.Client, ns, app string) (Context, error) { return wfCtx, wfCtx.Commit() } -func newContext(cli client.Client, ns, app string) (*WorkflowContext, error) { +func newContext(cli client.Client, ns, app string, appUID types.UID) (*WorkflowContext, error) { var ( ctx = context.Background() store corev1.ConfigMap ) store.Name = generateStoreName(app) store.Namespace = ns + store.SetOwnerReferences([]metav1.OwnerReference{ + { + APIVersion: v1beta1.SchemeGroupVersion.String(), + Kind: v1beta1.ApplicationKind, + Name: app, + UID: appUID, + Controller: pointer.BoolPtr(true), + }, + }) if err := cli.Get(ctx, client.ObjectKey{Name: store.Name, Namespace: store.Namespace}, &store); err != nil { if kerrors.IsNotFound(err) { if err := cli.Create(ctx, &store); err != nil { diff --git a/pkg/workflow/context/context_test.go b/pkg/workflow/context/context_test.go index a87546250..b616367d4 100644 --- a/pkg/workflow/context/context_test.go +++ b/pkg/workflow/context/context_test.go @@ -259,14 +259,11 @@ func TestContext(t *testing.T) { }, } - wfCtx, err := NewContext(cli, "default", "app-v1") + wfCtx, err := NewContext(cli, "default", "app-v1", "testuid") assert.NilError(t, err) err = wfCtx.Commit() assert.NilError(t, err) - _, err = NewContext(cli, "default", "app-not-found") - assert.Equal(t, err != nil, true) - wfCtx, err = LoadContext(cli, "default", "app-v1") assert.NilError(t, err) err = wfCtx.Commit() @@ -276,7 +273,7 @@ func TestContext(t *testing.T) { _, err = LoadContext(cli, "default", "app-v1") assert.Equal(t, err != nil, true) - wfCtx, err = NewEmptyContext(cli, "default", "app-v1") + wfCtx, err = NewContext(cli, "default", "app-v1", "testuid") assert.NilError(t, err) assert.Equal(t, len(wfCtx.GetComponents()), 0) _, err = wfCtx.GetComponent("server") diff --git a/pkg/workflow/hooks/data_passing_test.go b/pkg/workflow/hooks/data_passing_test.go index 797641465..2197a33d3 100644 --- a/pkg/workflow/hooks/data_passing_test.go +++ b/pkg/workflow/hooks/data_passing_test.go @@ -106,7 +106,7 @@ func mockContext(t *testing.T) wfContext.Context { return nil }, } - wfCtx, err := wfContext.NewEmptyContext(cli, "default", "v1") + wfCtx, err := wfContext.NewContext(cli, "default", "v1", "testuid") require.NoError(t, err) return wfCtx } diff --git a/pkg/workflow/workflow.go b/pkg/workflow/workflow.go index bc9c308f0..3a8394a46 100644 --- a/pkg/workflow/workflow.go +++ b/pkg/workflow/workflow.go @@ -144,7 +144,7 @@ func (w *workflow) makeContext(appName string) (wfCtx wfContext.Context, err err return } - wfCtx, err = wfContext.NewEmptyContext(w.cli, w.app.Namespace, appName) + wfCtx, err = wfContext.NewContext(w.cli, w.app.Namespace, appName, w.app.GetUID()) if err != nil { err = errors.WithMessage(err, "new context") diff --git a/pkg/workflow/workflow_test.go b/pkg/workflow/workflow_test.go index 87c9b0aeb..351014920 100644 --- a/pkg/workflow/workflow_test.go +++ b/pkg/workflow/workflow_test.go @@ -363,6 +363,7 @@ var _ = Describe("Test Workflow", func() { func makeTestCase(steps []oamcore.WorkflowStep) (*oamcore.Application, []wfTypes.TaskRunner) { app := &oamcore.Application{ + ObjectMeta: metav1.ObjectMeta{UID: "test-uid"}, Spec: oamcore.ApplicationSpec{ Workflow: &oamcore.Workflow{ Steps: steps,