mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-31 03:45:17 +00:00
fix: check resource version on update notification (#5179)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
This commit is contained in:
parent
2dcd48ef6f
commit
05d90afe1b
2 changed files with 30 additions and 17 deletions
|
@ -85,8 +85,8 @@ func NewController(
|
||||||
cbgscanEnqueue: controllerutils.AddDefaultEventHandlers(logger, cbgscanr.Informer(), queue),
|
cbgscanEnqueue: controllerutils.AddDefaultEventHandlers(logger, cbgscanr.Informer(), queue),
|
||||||
metadataCache: metadataCache,
|
metadataCache: metadataCache,
|
||||||
}
|
}
|
||||||
controllerutils.AddEventHandlers(polInformer.Informer(), c.addPolicy, c.updatePolicy, c.deletePolicy)
|
controllerutils.AddEventHandlersT(polInformer.Informer(), c.addPolicy, c.updatePolicy, c.deletePolicy)
|
||||||
controllerutils.AddEventHandlers(cpolInformer.Informer(), c.addPolicy, c.updatePolicy, c.deletePolicy)
|
controllerutils.AddEventHandlersT(cpolInformer.Informer(), c.addPolicy, c.updatePolicy, c.deletePolicy)
|
||||||
c.metadataCache.AddEventHandler(func(uid types.UID, _ schema.GroupVersionKind, resource resource.Resource) {
|
c.metadataCache.AddEventHandler(func(uid types.UID, _ schema.GroupVersionKind, resource resource.Resource) {
|
||||||
selector, err := reportutils.SelectorResourceUidEquals(uid)
|
selector, err := reportutils.SelectorResourceUidEquals(uid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -108,8 +108,8 @@ func (c *controller) Run(ctx context.Context, workers int) {
|
||||||
controllerutils.Run(ctx, logger, ControllerName, time.Second, c.queue, workers, maxRetries, c.reconcile)
|
controllerutils.Run(ctx, logger, ControllerName, time.Second, c.queue, workers, maxRetries, c.reconcile)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) addPolicy(obj interface{}) {
|
func (c *controller) addPolicy(obj kyvernov1.PolicyInterface) {
|
||||||
selector, err := reportutils.SelectorPolicyDoesNotExist(obj.(kyvernov1.PolicyInterface))
|
selector, err := reportutils.SelectorPolicyDoesNotExist(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err, "failed to create label selector")
|
logger.Error(err, "failed to create label selector")
|
||||||
}
|
}
|
||||||
|
@ -118,18 +118,20 @@ func (c *controller) addPolicy(obj interface{}) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) updatePolicy(_, obj interface{}) {
|
func (c *controller) updatePolicy(old, obj kyvernov1.PolicyInterface) {
|
||||||
selector, err := reportutils.SelectorPolicyNotEquals(obj.(kyvernov1.PolicyInterface))
|
if old.GetResourceVersion() != obj.GetResourceVersion() {
|
||||||
|
selector, err := reportutils.SelectorPolicyNotEquals(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err, "failed to create label selector")
|
logger.Error(err, "failed to create label selector")
|
||||||
}
|
}
|
||||||
if err := c.enqueue(selector); err != nil {
|
if err := c.enqueue(selector); err != nil {
|
||||||
logger.Error(err, "failed to enqueue")
|
logger.Error(err, "failed to enqueue")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) deletePolicy(obj interface{}) {
|
func (c *controller) deletePolicy(obj kyvernov1.PolicyInterface) {
|
||||||
selector, err := reportutils.SelectorPolicyExists(obj.(kyvernov1.PolicyInterface))
|
selector, err := reportutils.SelectorPolicyExists(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err, "failed to create label selector")
|
logger.Error(err, "failed to create label selector")
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
"k8s.io/client-go/util/workqueue"
|
"k8s.io/client-go/util/workqueue"
|
||||||
)
|
)
|
||||||
|
@ -118,18 +119,28 @@ func ExplicitKey[K any](parseKey func(K) cache.ExplicitKey) keyFunc {
|
||||||
|
|
||||||
func AddFunc(logger logr.Logger, enqueue EnqueueFunc) addFunc {
|
func AddFunc(logger logr.Logger, enqueue EnqueueFunc) addFunc {
|
||||||
return func(obj interface{}) {
|
return func(obj interface{}) {
|
||||||
_ = enqueue(obj)
|
if err := enqueue(obj); err != nil {
|
||||||
|
logger.Error(err, "failed to enqueue object", "obj", obj)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateFunc(logger logr.Logger, enqueue EnqueueFunc) updateFunc {
|
func UpdateFunc(logger logr.Logger, enqueue EnqueueFunc) updateFunc {
|
||||||
return func(_, obj interface{}) {
|
return func(old, obj interface{}) {
|
||||||
_ = enqueue(obj)
|
oldMeta := old.(metav1.Object)
|
||||||
|
objMeta := obj.(metav1.Object)
|
||||||
|
if oldMeta.GetResourceVersion() != objMeta.GetResourceVersion() {
|
||||||
|
if err := enqueue(obj); err != nil {
|
||||||
|
logger.Error(err, "failed to enqueue object", "obj", obj)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteFunc(logger logr.Logger, enqueue EnqueueFunc) deleteFunc {
|
func DeleteFunc(logger logr.Logger, enqueue EnqueueFunc) deleteFunc {
|
||||||
return func(obj interface{}) {
|
return func(obj interface{}) {
|
||||||
_ = enqueue(obj)
|
if err := enqueue(obj); err != nil {
|
||||||
|
logger.Error(err, "failed to enqueue object", "obj", obj)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue