1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/controllers/generic/logging/controller.go
Mariam Fahmy d3dbd52f75
fix typo (#8399)
Signed-off-by: Mariam Fahmy <mariam.fahmy@nirmata.com>
2023-09-14 13:52:24 +00:00

69 lines
1.8 KiB
Go

package logging
import (
"github.com/go-logr/logr"
controllerutils "github.com/kyverno/kyverno/pkg/utils/controller"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/cache"
)
type Predicate = func(metav1.Object, metav1.Object) bool
func CheckVersion(old, obj metav1.Object) bool {
return old.GetResourceVersion() != obj.GetResourceVersion()
}
func CheckGeneration(old, obj metav1.Object) bool {
return old.GetGeneration() != obj.GetGeneration()
}
type controller struct {
logger logr.Logger
predicates []Predicate
}
type informer interface {
Informer() cache.SharedIndexInformer
}
func NewController(logger logr.Logger, objectType string, informer informer, predicates ...Predicate) {
c := controller{
logger: logger.WithValues("type", objectType),
predicates: predicates,
}
if _, err := controllerutils.AddEventHandlersT(informer.Informer(), c.add, c.update, c.delete); err != nil {
logger.Error(err, "failed to register event handlers")
}
}
func (c *controller) add(obj metav1.Object) {
name, err := cache.MetaNamespaceKeyFunc(obj)
if err != nil {
c.logger.Error(err, "failed to extract name", "object", obj)
name = "unknown"
}
c.logger.Info("resource added", "name", name)
}
func (c *controller) update(old, obj metav1.Object) {
for _, predicate := range c.predicates {
if !predicate(old, obj) {
return
}
}
name, err := cache.MetaNamespaceKeyFunc(obj)
if err != nil {
c.logger.Error(err, "failed to extract name", "object", obj)
name = "unknown"
}
c.logger.Info("resource updated", "name", name)
}
func (c *controller) delete(obj metav1.Object) {
name, err := cache.MetaNamespaceKeyFunc(obj)
if err != nil {
c.logger.Error(err, "failed to extract name", "object", obj)
name = "unknown"
}
c.logger.Info("resource deleted", "name", name)
}