2020-09-23 02:41:49 +05:30
|
|
|
package resourcecache
|
|
|
|
|
|
|
|
import (
|
|
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
2021-01-29 17:38:23 -08:00
|
|
|
"k8s.io/client-go/dynamic/dynamiclister"
|
2020-09-23 02:41:49 +05:30
|
|
|
"k8s.io/client-go/informers"
|
|
|
|
)
|
|
|
|
|
2021-01-29 17:38:23 -08:00
|
|
|
// GenericCache - allows operation on a single resource
|
|
|
|
type GenericCache interface {
|
2020-09-23 02:41:49 +05:30
|
|
|
StopInformer()
|
|
|
|
IsNamespaced() bool
|
2021-01-29 17:38:23 -08:00
|
|
|
Lister() dynamiclister.Lister
|
|
|
|
NamespacedLister(namespace string) dynamiclister.NamespaceLister
|
|
|
|
GVR() schema.GroupVersionResource
|
2020-09-23 02:41:49 +05:30
|
|
|
}
|
|
|
|
|
2021-01-29 17:38:23 -08:00
|
|
|
type genericCache struct {
|
2020-09-23 02:41:49 +05:30
|
|
|
// GVR Group Version Resource of a resource
|
2021-01-29 17:38:23 -08:00
|
|
|
gvr schema.GroupVersionResource
|
2020-09-23 02:41:49 +05:30
|
|
|
// Namespaced - identifies if a resource is namespaced or not
|
2021-01-29 17:38:23 -08:00
|
|
|
namespaced bool
|
2020-09-23 02:41:49 +05:30
|
|
|
// stopCh - channel to stop the informer when needed
|
|
|
|
stopCh chan struct{}
|
|
|
|
// genericInformer - contains instance of informers.GenericInformer for a specific resource
|
|
|
|
// which in turn contains Listers() which gives access to cached resources.
|
|
|
|
genericInformer informers.GenericInformer
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewGVRCache ...
|
2021-01-29 17:38:23 -08:00
|
|
|
func NewGVRCache(gvr schema.GroupVersionResource, namespaced bool, stopCh chan struct{}, genericInformer informers.GenericInformer) GenericCache {
|
|
|
|
return &genericCache{gvr: gvr, namespaced: namespaced, stopCh: stopCh, genericInformer: genericInformer}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GVR gets GroupVersionResource
|
|
|
|
func (gc *genericCache) GVR() schema.GroupVersionResource {
|
|
|
|
return gc.gvr
|
2020-09-23 02:41:49 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
// StopInformer ...
|
2021-01-29 17:38:23 -08:00
|
|
|
func (gc *genericCache) StopInformer() {
|
|
|
|
close(gc.stopCh)
|
2020-09-23 02:41:49 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
// IsNamespaced ...
|
2021-01-29 17:38:23 -08:00
|
|
|
func (gc *genericCache) IsNamespaced() bool {
|
|
|
|
return gc.namespaced
|
2020-09-23 02:41:49 +05:30
|
|
|
}
|
|
|
|
|
2021-01-29 17:38:23 -08:00
|
|
|
// Lister - get access to Lister() instance of a resource in GVRCache
|
|
|
|
func (gc *genericCache) Lister() dynamiclister.Lister {
|
|
|
|
return dynamiclister.New(gc.genericInformer.Informer().GetIndexer(), gc.GVR())
|
2020-09-23 02:41:49 +05:30
|
|
|
}
|
|
|
|
|
2021-01-29 17:38:23 -08:00
|
|
|
// NamespacedLister - get access to namespaced Lister() instance of a resource in GVRCache
|
|
|
|
func (gc *genericCache) NamespacedLister(namespace string) dynamiclister.NamespaceLister {
|
|
|
|
return dynamiclister.New(gc.genericInformer.Informer().GetIndexer(), gc.GVR()).Namespace(namespace)
|
2020-09-23 02:41:49 +05:30
|
|
|
}
|