[Backport release-1.3] Fix: vela logs without specified resource name (#3608)

* Fix: vela logs without specified resource name

Signed-off-by: qiaozp <chivalry.pp@gmail.com>
(cherry picked from commit 43df60cb87)

* add unittest

Signed-off-by: qiaozp <chivalry.pp@gmail.com>
(cherry picked from commit daacb88601)

* reviewable

Signed-off-by: qiaozp <chivalry.pp@gmail.com>
(cherry picked from commit 195585b69f)

Co-authored-by: qiaozp <chivalry.pp@gmail.com>
This commit is contained in:
github-actions[bot]
2022-04-08 17:57:15 +08:00
committed by GitHub
co-authored by qiaozp
parent 58c2208e2a
commit bc4812a12e
2 changed files with 78 additions and 9 deletions
+24 -9
View File
@@ -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...)
}
+54
View File
@@ -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)
}
}