* add resource getter & reader Signed-off-by: Wenhao Zhou <wenhaozhou@yunify.com> * add resource v1beta1 handler * delete gvrToGvk map instead of using the dynamicRESTMapper for getting gvk, and rename the ResourceLister to ResourceGetter * add unregisteredMiddleware filter Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> * add secret contains benchmark & add fieldSelector to resourcev1beta1 Signed-off-by: Wenhao Zhou <wenhaozhou@yunify.com> * delete crds models Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> * delete parameterExtractor and instead of requestInfo Signed-off-by: Wenhao Zhou <wenhaozhou@yunify.com> * add benchmark test * move fieldSelector to DefaultObjectMetaFilter Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> * move fieldSelector to DefaultObjectMetaFilter * change registeredGv type to set Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> * update filter chains Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> * fix fieldSelector cannot work Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> * fix: list known type do not need served label Signed-off-by: wenhaozhou <wenhaozhou@yunify.com> --------- Signed-off-by: Wenhao Zhou <wenhaozhou@yunify.com> Signed-off-by: wenhaozhou <wenhaozhou@yunify.com>
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package v1beta1
|
|
|
|
import (
|
|
"context"
|
|
|
|
"k8s.io/apimachinery/pkg/api/meta"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"sigs.k8s.io/controller-runtime/pkg/cache"
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
|
|
"kubesphere.io/kubesphere/pkg/apiserver/query"
|
|
)
|
|
|
|
type resourceCache struct {
|
|
cache cache.Cache
|
|
}
|
|
|
|
func NewResourceCache(cache cache.Cache) Interface {
|
|
return &resourceCache{cache: cache}
|
|
}
|
|
|
|
func (u *resourceCache) Get(name, namespace string, object client.Object) error {
|
|
return u.cache.Get(context.Background(), client.ObjectKey{Namespace: namespace, Name: name}, object)
|
|
}
|
|
|
|
func (u *resourceCache) List(namespace string, query *query.Query, list client.ObjectList) error {
|
|
listOpt := &client.ListOptions{
|
|
LabelSelector: query.Selector(),
|
|
Namespace: namespace,
|
|
}
|
|
err := u.cache.List(context.Background(), list, listOpt)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
extractList, err := meta.ExtractList(list)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
filtered := DefaultList(extractList, query, compare, filter)
|
|
if err := meta.SetList(list, filtered); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func compare(left, right runtime.Object, field query.Field) bool {
|
|
l, err := meta.Accessor(left)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
r, err := meta.Accessor(right)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return DefaultObjectMetaCompare(l, r, field)
|
|
}
|
|
|
|
func filter(object runtime.Object, filter query.Filter) bool {
|
|
o, err := meta.Accessor(object)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return DefaultObjectMetaFilter(o, filter)
|
|
}
|