diff --git a/pkg/models/resources/v1alpha3/pod/pods.go b/pkg/models/resources/v1alpha3/pod/pods.go index 2f8893b6a..298a5a435 100644 --- a/pkg/models/resources/v1alpha3/pod/pods.go +++ b/pkg/models/resources/v1alpha3/pod/pods.go @@ -28,9 +28,10 @@ import ( ) const ( - filedNameName = "nodeName" - filedPVCName = "pvcName" - filedServiceName = "serviceName" + fieldNodeName = "nodeName" + fieldPVCName = "pvcName" + fieldServiceName = "serviceName" + fieldStatus = "status" ) type podsGetter struct { @@ -82,12 +83,14 @@ func (p *podsGetter) filter(object runtime.Object, filter query.Filter) bool { return false } switch filter.Field { - case filedNameName: + case fieldNodeName: return pod.Spec.NodeName == string(filter.Value) - case filedPVCName: + case fieldPVCName: return p.podBindPVC(pod, string(filter.Value)) - case filedServiceName: + case fieldServiceName: return p.podBelongToService(pod, string(filter.Value)) + case fieldStatus: + return string(pod.Status.Phase) == string(filter.Value) default: return v1alpha3.DefaultObjectMetaFilter(pod.ObjectMeta, filter) } diff --git a/pkg/models/resources/v1alpha3/pod/pods_test.go b/pkg/models/resources/v1alpha3/pod/pods_test.go index cc861ef54..56215f3bd 100644 --- a/pkg/models/resources/v1alpha3/pod/pods_test.go +++ b/pkg/models/resources/v1alpha3/pod/pods_test.go @@ -51,7 +51,7 @@ func TestListPods(t *testing.T) { Filters: map[query.Field]query.Value{query.FieldNamespace: query.Value("default")}, }, &api.ListResult{ - Items: []interface{}{foo4, foo3, foo2, foo1}, + Items: []interface{}{foo5, foo4, foo3, foo2, foo1}, TotalItems: len(pods), }, nil, @@ -68,7 +68,7 @@ func TestListPods(t *testing.T) { Ascending: false, Filters: map[query.Field]query.Value{ query.FieldNamespace: query.Value("default"), - filedPVCName: query.Value(foo4.Spec.Volumes[0].PersistentVolumeClaim.ClaimName), + fieldPVCName: query.Value(foo4.Spec.Volumes[0].PersistentVolumeClaim.ClaimName), }, }, &api.ListResult{ @@ -77,6 +77,27 @@ func TestListPods(t *testing.T) { }, nil, }, + { + "test status filter", + "default", + &query.Query{ + Pagination: &query.Pagination{ + Limit: 10, + Offset: 0, + }, + SortBy: query.FieldName, + Ascending: false, + Filters: map[query.Field]query.Value{ + query.FieldNamespace: query.Value("default"), + fieldStatus: query.Value(corev1.PodRunning), + }, + }, + &api.ListResult{ + Items: []interface{}{foo5}, + TotalItems: 1, + }, + nil, + }, } getter := prepare() @@ -133,7 +154,16 @@ var ( }, }, } - pods = []interface{}{foo1, foo2, foo3, foo4} + foo5 = &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo5", + Namespace: "default", + }, + Status: corev1.PodStatus{ + Phase: corev1.PodRunning, + }, + } + pods = []interface{}{foo1, foo2, foo3, foo4, foo5} ) func prepare() v1alpha3.Interface {