From bc4812a12ea4d45e71b27afb648ccb9d711972ed Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Apr 2022 17:57:15 +0800 Subject: [PATCH] [Backport release-1.3] Fix: vela logs without specified resource name (#3608) * Fix: vela logs without specified resource name Signed-off-by: qiaozp (cherry picked from commit 43df60cb87eb0da27736d71774a4b20627be098a) * add unittest Signed-off-by: qiaozp (cherry picked from commit daacb886015936d0388ac17cada20d41e9081136) * reviewable Signed-off-by: qiaozp (cherry picked from commit 195585b69f638f661fd35a57fd083a14fe3607b9) Co-authored-by: qiaozp --- pkg/utils/common/common.go | 33 ++++++++++++++------ pkg/utils/common/common_test.go | 54 +++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 9 deletions(-) diff --git a/pkg/utils/common/common.go b/pkg/utils/common/common.go index c398db891..def6c7443 100644 --- a/pkg/utils/common/common.go +++ b/pkg/utils/common/common.go @@ -312,9 +312,17 @@ func clusterObjectReferenceTypeFilterGenerator(allowedKinds ...string) clusterOb var isWorkloadClusterObjectReferenceFilter = clusterObjectReferenceTypeFilterGenerator("Deployment", "StatefulSet", "CloneSet", "Job", "Configuration") var isPortForwardEndpointClusterObjectReferenceFilter = clusterObjectReferenceTypeFilterGenerator("Deployment", "StatefulSet", "CloneSet", "Job", "Service", "HelmRelease") -var resourceNameClusterObjectReferenceFilter = func(resourceName string) clusterObjectReferenceFilter { +var resourceNameClusterObjectReferenceFilter = func(resourceName []string) clusterObjectReferenceFilter { return func(reference common.ClusterObjectReference) bool { - return resourceName == reference.Name + if len(resourceName) == 0 { + return true + } + for _, r := range resourceName { + if r == reference.Name { + return true + } + } + return false } } @@ -421,24 +429,31 @@ func filterClusterObjectRefFromAddonObservability(resources []common.ClusterObje return resources } +func removeEmptyString(items []string) []string { + r := []string{} + for _, i := range items { + if i != "" { + r = append(r, i) + } + } + return r +} + // AskToChooseOneEnvResource will ask users to select one applied resource of the application if more than one // resource is a map for component to applied resources // return the selected ClusterObjectReference func AskToChooseOneEnvResource(app *v1beta1.Application, resourceName ...string) (*common.ClusterObjectReference, error) { filters := []clusterObjectReferenceFilter{isWorkloadClusterObjectReferenceFilter} - for _, n := range resourceName { - filters = append(filters, resourceNameClusterObjectReferenceFilter(n)) - } + _resourceName := removeEmptyString(resourceName) + filters = append(filters, resourceNameClusterObjectReferenceFilter(_resourceName)) return askToChooseOneResource(app, filters...) } // AskToChooseOnePortForwardEndpoint will ask user to select one applied resource as port forward endpoint func AskToChooseOnePortForwardEndpoint(app *v1beta1.Application, resourceName ...string) (*common.ClusterObjectReference, error) { filters := []clusterObjectReferenceFilter{isPortForwardEndpointClusterObjectReferenceFilter} - for _, n := range resourceName { - filters = append(filters, resourceNameClusterObjectReferenceFilter(n)) - } - + _resourceName := removeEmptyString(resourceName) + filters = append(filters, resourceNameClusterObjectReferenceFilter(_resourceName)) return askToChooseOneResource(app, filters...) } diff --git a/pkg/utils/common/common_test.go b/pkg/utils/common/common_test.go index 15601f3fe..aa2ea69c5 100644 --- a/pkg/utils/common/common_test.go +++ b/pkg/utils/common/common_test.go @@ -32,6 +32,7 @@ import ( "github.com/crossplane/crossplane-runtime/pkg/test" "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" + corev1 "k8s.io/api/core/v1" "github.com/oam-dev/kubevela/apis/core.oam.dev/common" "github.com/oam-dev/kubevela/apis/types" @@ -369,3 +370,56 @@ func TestFilterClusterObjectRefFromAddonObservability(t *testing.T) { assert.Equal(t, "Service", res[0].Kind) assert.Equal(t, "v1", res[0].APIVersion) } + +func TestResourceNameClusterObjectReferenceFilter(t *testing.T) { + fooRef := common.ClusterObjectReference{ + ObjectReference: corev1.ObjectReference{ + Name: "foo", + }} + barRef := common.ClusterObjectReference{ + ObjectReference: corev1.ObjectReference{ + Name: "bar", + }} + bazRef := common.ClusterObjectReference{ + ObjectReference: corev1.ObjectReference{ + Name: "baz", + }} + var refs = []common.ClusterObjectReference{ + fooRef, barRef, bazRef, + } + + testCases := []struct { + caseName string + filter clusterObjectReferenceFilter + filteredRefs []common.ClusterObjectReference + }{ + { + caseName: "filter one resource", + filter: resourceNameClusterObjectReferenceFilter([]string{"foo"}), + filteredRefs: []common.ClusterObjectReference{fooRef}, + }, + { + caseName: "not filter resources", + filter: resourceNameClusterObjectReferenceFilter([]string{}), + filteredRefs: []common.ClusterObjectReference{fooRef, barRef, bazRef}, + }, + { + caseName: "filter multi resources", + filter: resourceNameClusterObjectReferenceFilter([]string{"foo", "bar"}), + filteredRefs: []common.ClusterObjectReference{fooRef, barRef}, + }, + } + for _, c := range testCases { + filteredResource := filterResource(refs, c.filter) + assert.Equal(t, c.filteredRefs, filteredResource, c.caseName) + } +} + +func TestRemoveEmptyString(t *testing.T) { + withEmpty := []string{"foo", "bar", "", "baz", ""} + noEmpty := removeEmptyString(withEmpty) + assert.Equal(t, len(noEmpty), 3) + for _, s := range noEmpty { + assert.NotEmpty(t, s) + } +}