1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/resourcecache/resourcecache.go
2020-11-17 13:07:30 -08:00

48 lines
1.6 KiB
Go

package resourcecache
import (
"github.com/go-logr/logr"
)
// RunAllInformers - run the informers for the GVR of all the resources available in GVRCacheData
func (resc *ResourceCache) RunAllInformers(log logr.Logger) {
for key := range resc.GVRCacheData {
resc.CreateResourceInformer(log, key)
log.V(4).Info("created informer for resource", "name", key)
}
}
// CreateResourceInformer - check the availability of the given resource in ResourceCache.
// if available then create an informer for that GVR and store that GenericInformer instance in the cache and start watching for that resource
func (resc *ResourceCache) CreateResourceInformer(log logr.Logger, resource string) (bool, error) {
res, ok := resc.GVRCacheData[resource]
if ok {
stopCh := make(chan struct{})
res.stopCh = stopCh
genInformer := resc.dinformer.ForResource(res.GVR)
res.genericInformer = genInformer
go startWatching(stopCh, genInformer.Informer())
}
return true, nil
}
// StopResourceInformer - delete the given resource information from ResourceCache and stop watching for the given resource
func (resc *ResourceCache) StopResourceInformer(log logr.Logger, resource string) bool {
res, ok := resc.GVRCacheData[resource]
if ok {
delete(resc.GVRCacheData, resource)
log.V(4).Info("deleted resource from gvr cache", "name", resource)
res.StopInformer()
log.V(4).Info("closed informer for resource", "name", resource)
}
return false
}
// GetGVRCache - get the GVRCache for a given resource if available
func (resc *ResourceCache) GetGVRCache(resource string) *GVRCache {
res, ok := resc.GVRCacheData[resource]
if ok {
return res
}
return nil
}