namespaces.go 2.0 KB
Newer Older
Z
zryfish 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
package namespace

import (
    v1 "k8s.io/api/core/v1"
    "k8s.io/apimachinery/pkg/labels"
    "k8s.io/apimachinery/pkg/runtime"
    "k8s.io/client-go/informers"
    "kubesphere.io/kubesphere/pkg/api"
    "kubesphere.io/kubesphere/pkg/apiserver/query"
    "kubesphere.io/kubesphere/pkg/models/resources/v1alpha3"
    "strings"
)

type namespaceGetter struct {
    informers informers.SharedInformerFactory
}

func NewNamespaceGetter(informers informers.SharedInformerFactory) v1alpha3.Interface {
    return &namespaceGetter{informers:informers}
}

func (n namespaceGetter) Get(_, name string) (runtime.Object, error) {
    return n.informers.Core().V1().Namespaces().Lister().Get(name)
}

func (n namespaceGetter) List(_ string, query *query.Query) (*api.ListResult, error) {
    ns, err := n.informers.Core().V1().Namespaces().Lister().List(labels.Everything())
    if err != nil {
        return nil, err
    }

    var result []runtime.Object
    for _, item := range ns {
        result = append(result, item)
    }

    return v1alpha3.DefaultList(result, query, n.compare, n.filter), nil
}

func (n namespaceGetter) filter(item runtime.Object, filter query.Filter) bool {
    namespace, ok := item.(*v1.Namespace)
    if !ok {
        return false
    }

    switch filter.Field {
    case query.FieldName:
        return query.ComparableString(namespace.Name).Contains(filter.Value)
    case query.FieldStatus:
        return query.ComparableString(namespace.Status.Phase).Compare(filter.Value) == 0
    default:
        return false
    }
}

func (n namespaceGetter) compare(left runtime.Object, right runtime.Object, field query.Field) bool {
    leftNs, ok := left.(*v1.Namespace)
    if !ok {
        return false
    }

    rightNs, ok := right.(*v1.Namespace)
    if !ok {
        return true
    }

    switch field {
    case query.FieldName:
        return strings.Compare(leftNs.Name, rightNs.Name) > 0
    case query.FieldCreationTimeStamp:
        return leftNs.CreationTimestamp.After(rightNs.CreationTimestamp.Time)
    default:
        return false
    }
}