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 })