From 2c26caedd38bf9555659eb349731087f2d0a7f62 Mon Sep 17 00:00:00 2001 From: "Jian.Li" Date: Thu, 30 Dec 2021 16:47:18 +0800 Subject: [PATCH] fix asi Signed-off-by: Jian.Li --- .../core.oam.dev/v1beta1/application_types.go | 30 +++++++++++++++++++ .../application/application_controller.go | 7 ++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/apis/core.oam.dev/v1beta1/application_types.go b/apis/core.oam.dev/v1beta1/application_types.go index b8a5ae050..0a7fb0b42 100644 --- a/apis/core.oam.dev/v1beta1/application_types.go +++ b/apis/core.oam.dev/v1beta1/application_types.go @@ -17,7 +17,10 @@ package v1beta1 import ( + "encoding/json" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "github.com/oam-dev/kubevela/apis/core.oam.dev/common" @@ -138,3 +141,30 @@ func (app *Application) GetComponent(workloadType string) *common.ApplicationCom } return nil } + +// Unstructured convert application to unstructured.Unstructured. +func (app *Application) Unstructured() (*unstructured.Unstructured, error) { + var obj = &unstructured.Unstructured{} + app.SetGroupVersionKind(ApplicationKindVersionKind) + bt, err := json.Marshal(app) + if err != nil { + return nil, err + } + if err := obj.UnmarshalJSON(bt); err != nil { + return nil, err + } + + if app.Status.Services == nil { + unstructured.SetNestedSlice(obj.Object, []interface{}{}, "status", "services") + } + + if app.Status.AppliedResources == nil { + unstructured.SetNestedSlice(obj.Object, []interface{}{}, "status", "appliedResources") + } + + if wfStatus := app.Status.Workflow; wfStatus != nil && wfStatus.Steps == nil { + unstructured.SetNestedSlice(obj.Object, []interface{}{}, "status", "workflow", "steps") + } + + return obj, nil +} 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 4795cf1fa..1bec4fead 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go @@ -388,7 +388,12 @@ func (r *Reconciler) patchStatus(ctx context.Context, app *v1beta1.Application, func (r *Reconciler) updateStatus(ctx context.Context, app *v1beta1.Application, phase common.ApplicationPhase) error { app.Status.Phase = phase updateObservedGeneration(app) - return r.Status().Update(ctx, app) + + obj, err := app.Unstructured() + if err != nil { + return err + } + return r.Status().Update(ctx, obj) } func (r *Reconciler) doWorkflowFinish(app *v1beta1.Application, wf workflow.Workflow) error {