mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-27 16:17:34 +00:00
[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 commit43df60cb87) * add unittest Signed-off-by: qiaozp <chivalry.pp@gmail.com> (cherry picked from commitdaacb88601) * reviewable Signed-off-by: qiaozp <chivalry.pp@gmail.com> (cherry picked from commit195585b69f) Co-authored-by: qiaozp <chivalry.pp@gmail.com>
This commit is contained in:
co-authored by
qiaozp
parent
58c2208e2a
commit
bc4812a12e
@@ -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...)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user