2022-05-23 15:45:04 +02:00
|
|
|
package controller
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/go-logr/logr"
|
|
|
|
kubeutils "github.com/kyverno/kyverno/pkg/utils/kube"
|
|
|
|
"k8s.io/client-go/tools/cache"
|
|
|
|
"k8s.io/client-go/util/workqueue"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
|
|
|
addFunc func(interface{})
|
|
|
|
updateFunc func(interface{}, interface{})
|
|
|
|
deleteFunc func(interface{})
|
|
|
|
)
|
|
|
|
|
|
|
|
func AddEventHandlers(informer cache.SharedInformer, a addFunc, u updateFunc, d deleteFunc) {
|
|
|
|
informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
|
|
|
|
AddFunc: a,
|
|
|
|
UpdateFunc: u,
|
|
|
|
DeleteFunc: d,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func AddDefaultEventHandlers(logger logr.Logger, informer cache.SharedInformer, queue workqueue.RateLimitingInterface) {
|
2022-09-18 11:12:29 +02:00
|
|
|
AddEventHandlers(informer, AddFunc(logger, queue), UpdateFunc(logger, queue), DeleteFunc(logger, queue))
|
2022-05-23 15:45:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func Enqueue(logger logr.Logger, queue workqueue.RateLimitingInterface, obj interface{}) {
|
|
|
|
if key, err := cache.MetaNamespaceKeyFunc(obj); err != nil {
|
|
|
|
logger.Error(err, "failed to compute key name")
|
|
|
|
} else {
|
|
|
|
queue.Add(key)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-18 11:12:29 +02:00
|
|
|
func AddFunc(logger logr.Logger, queue workqueue.RateLimitingInterface) addFunc {
|
2022-05-23 15:45:04 +02:00
|
|
|
return func(obj interface{}) {
|
|
|
|
Enqueue(logger, queue, obj)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-18 11:12:29 +02:00
|
|
|
func UpdateFunc(logger logr.Logger, queue workqueue.RateLimitingInterface) updateFunc {
|
2022-05-23 15:45:04 +02:00
|
|
|
return func(_, obj interface{}) {
|
|
|
|
Enqueue(logger, queue, obj)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-18 11:12:29 +02:00
|
|
|
func DeleteFunc(logger logr.Logger, queue workqueue.RateLimitingInterface) deleteFunc {
|
2022-05-23 15:45:04 +02:00
|
|
|
return func(obj interface{}) {
|
|
|
|
Enqueue(logger, queue, kubeutils.GetObjectWithTombstone(obj))
|
|
|
|
}
|
|
|
|
}
|