From 4ddfe32fc460819ae6065aade1a8297cb34dc574 Mon Sep 17 00:00:00 2001 From: barnettZQG Date: Fri, 15 Apr 2022 14:38:01 +0800 Subject: [PATCH] Fix: can not query the instance list for the app with apply once policy (#3670) * Fix: can not query the instance list for the app with apply once policy Signed-off-by: barnettZQG * Fix: change the test case about ListResourcesInApp Signed-off-by: barnettZQG --- pkg/velaql/providers/query/collector.go | 15 ++++-- pkg/velaql/providers/query/handler_test.go | 56 +++++++++++++++++++++- 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/pkg/velaql/providers/query/collector.go b/pkg/velaql/providers/query/collector.go index a78110c23..ef55592b8 100644 --- a/pkg/velaql/providers/query/collector.go +++ b/pkg/velaql/providers/query/collector.go @@ -136,6 +136,7 @@ func (c *AppCollector) FindResourceFromResourceTrackerSpec(app *v1beta1.Applicat ctx := context.Background() rootRT, currentRT, historyRTs, _, err := resourcetracker.ListApplicationResourceTrackers(ctx, c.k8sClient, app) if err != nil { + klog.Errorf("query the resourcetrackers failure %s", err.Error()) return nil, err } var resources = []Resource{} @@ -151,11 +152,19 @@ func (c *AppCollector) FindResourceFromResourceTrackerSpec(app *v1beta1.Applicat existResources[managedResource.ClusterObjectReference] = true obj, err := managedResource.ToUnstructuredWithData() if err != nil { - klog.Errorf("get obj from resource tracker failure %s", err.Error()) - continue + // For the application with apply once policy, there is no data in RT. + _, obj, err = getObjectCreatedByComponent(c.k8sClient, managedResource.ObjectReference, managedResource.Cluster) + if err != nil { + klog.Errorf("get obj from the cluster failure %s", err.Error()) + continue + } + } + clusterName := managedResource.Cluster + if clusterName == "" { + clusterName = multicluster.ClusterLocalName } resources = append(resources, Resource{ - Cluster: managedResource.Cluster, + Cluster: clusterName, Revision: oam.GetPublishVersion(rt), Component: managedResource.Component, Object: obj, diff --git a/pkg/velaql/providers/query/handler_test.go b/pkg/velaql/providers/query/handler_test.go index 4bae26e0f..63346aee5 100644 --- a/pkg/velaql/providers/query/handler_test.go +++ b/pkg/velaql/providers/query/handler_test.go @@ -31,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/klog" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" @@ -83,7 +84,8 @@ var _ = Describe("Test Query Provider", func() { Name: "test", Namespace: "test", Annotations: map[string]string{ - "oam.dev/kubevela-version": "v1.2.0-beta.2", + oam.AnnotationKubeVelaVersion: "v1.3.1", + oam.AnnotationPublishVersion: "v1", }, }, Spec: v1beta1.ApplicationSpec{ @@ -154,6 +156,53 @@ var _ = Describe("Test Query Provider", func() { }) Expect(k8sClient.Create(ctx, appService)).Should(BeNil()) + rt := &v1beta1.ResourceTracker{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("%s-v1-%s", oldApp.Name, oldApp.Namespace), + Labels: map[string]string{ + oam.LabelAppName: oldApp.Name, + oam.LabelAppNamespace: oldApp.Namespace, + }, + Annotations: map[string]string{ + oam.AnnotationPublishVersion: "v1", + }, + }, + Spec: v1beta1.ResourceTrackerSpec{ + ManagedResources: []v1beta1.ManagedResource{ + { + ClusterObjectReference: common.ClusterObjectReference{ + Cluster: "", + ObjectReference: corev1.ObjectReference{ + APIVersion: "v1", + Kind: "Service", + Namespace: namespace, + Name: "web", + }, + }, + OAMObjectReference: common.OAMObjectReference{ + Component: "web", + }, + }, + { + ClusterObjectReference: common.ClusterObjectReference{ + Cluster: "", + ObjectReference: corev1.ObjectReference{ + APIVersion: "apps/v1", + Kind: "Deployment", + Namespace: namespace, + Name: "web", + }, + }, + OAMObjectReference: common.OAMObjectReference{ + Component: "web", + }, + }, + }, + Type: v1beta1.ResourceTrackerTypeVersioned, + }, + } + Expect(k8sClient.Create(ctx, rt)).Should(BeNil()) + prd := provider{cli: k8sClient} opt := `app: { name: "test" @@ -170,6 +219,9 @@ var _ = Describe("Test Query Provider", func() { appResList := new(AppResourcesList) Expect(v.UnmarshalTo(appResList)).Should(BeNil()) + if appResList.Err != "" { + klog.Error(appResList.Err) + } Expect(len(appResList.List)).Should(Equal(2)) @@ -180,7 +232,7 @@ var _ = Describe("Test Query Provider", func() { Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(&app), updateApp)).Should(BeNil()) updateApp.ObjectMeta.Annotations = map[string]string{ - "oam.dev/kubevela-version": "master", + oam.AnnotationKubeVelaVersion: "v1.1.0", } Expect(k8sClient.Update(ctx, updateApp)).Should(BeNil()) newValue, err := value.NewValue(opt, nil, "")