open-cluster-management.io/governance-policy-propagator@v0.13.0/controllers/common/handler.go (about) 1 // Copyright (c) 2021 Red Hat, Inc. 2 // Copyright Contributors to the Open Cluster Management project 3 4 package common 5 6 import ( 7 "context" 8 9 "k8s.io/client-go/util/workqueue" 10 "sigs.k8s.io/controller-runtime/pkg/client" 11 "sigs.k8s.io/controller-runtime/pkg/event" 12 "sigs.k8s.io/controller-runtime/pkg/handler" 13 "sigs.k8s.io/controller-runtime/pkg/predicate" 14 ) 15 16 var _ handler.EventHandler = &EnqueueRequestsFromMapFunc{} 17 18 // EnqueueRequestsFromMapFunc same as original EnqueueRequestsFromMapFunc 19 // execept this doesn't queue old object for update 20 type EnqueueRequestsFromMapFunc struct { 21 // Mapper transforms the argument into a slice of keys to be reconciled 22 ToRequests handler.MapFunc 23 } 24 25 // Create implements EventHandler 26 func (e *EnqueueRequestsFromMapFunc) Create(ctx context.Context, evt event.CreateEvent, 27 q workqueue.RateLimitingInterface, 28 ) { 29 e.mapAndEnqueue(ctx, q, evt.Object) 30 } 31 32 // Update implements EventHandler 33 func (e *EnqueueRequestsFromMapFunc) Update(ctx context.Context, evt event.UpdateEvent, 34 q workqueue.RateLimitingInterface, 35 ) { 36 e.mapAndEnqueue(ctx, q, evt.ObjectNew) 37 } 38 39 // Delete implements EventHandler 40 func (e *EnqueueRequestsFromMapFunc) Delete(ctx context.Context, evt event.DeleteEvent, 41 q workqueue.RateLimitingInterface, 42 ) { 43 e.mapAndEnqueue(ctx, q, evt.Object) 44 } 45 46 // Generic implements EventHandler 47 func (e *EnqueueRequestsFromMapFunc) Generic(ctx context.Context, evt event.GenericEvent, 48 q workqueue.RateLimitingInterface, 49 ) { 50 e.mapAndEnqueue(ctx, q, evt.Object) 51 } 52 53 func (e *EnqueueRequestsFromMapFunc) mapAndEnqueue(ctx context.Context, q workqueue.RateLimitingInterface, 54 object client.Object, 55 ) { 56 for _, req := range e.ToRequests(ctx, object) { 57 q.Add(req) 58 } 59 } 60 61 var NeverEnqueue = predicate.NewPredicateFuncs(func(o client.Object) bool { return false })