ResourceGetter v1beta1 (#5416)
* 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>
This commit is contained in:
66
pkg/models/resources/v1beta1/cache.go
Normal file
66
pkg/models/resources/v1beta1/cache.go
Normal file
@@ -0,0 +1,66 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user