Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DependentPredicate ¶
DependentPredicate is a predicate that filters events for resources created as dependents of a primary resource. It follows the following rules:
- Create events are ignored because it is assumed that the controller reconciling the parent is the client creating the dependent resources.
- Update events that change only the dependent resource status are ignored because it is not typical for the controller of a primary resource to write to the status of one its dependent resources.
- Deletion events are always handled because a controller will typically want to recreate deleted dependent resources if the primary resource is not deleted.
- Generic events are ignored.
DependentPredicate is most often used in conjunction with controller-runtime's handler.EnqueueRequestForOwner
func (DependentPredicate) Create ¶
func (DependentPredicate) Create(e event.CreateEvent) bool
Create filters out all events. It assumes that the controller reconciling the parent is the only client creating the dependent resources.
func (DependentPredicate) Delete ¶
func (DependentPredicate) Delete(e event.DeleteEvent) bool
Delete passes all events through. This allows the controller to recreate deleted dependent resources if the primary resource is not deleted.
func (DependentPredicate) Generic ¶
func (DependentPredicate) Generic(e event.GenericEvent) bool
Generic filters out all events.
func (DependentPredicate) Update ¶
func (DependentPredicate) Update(e event.UpdateEvent) bool
Update filters out events that change only the dependent resource status. It is not typical for the controller of a primary resource to write to the status of one its dependent resources.
type NoGenerationPredicate ¶
NoGenerationPredicate implements a update predicate function for objects with no Generation value, like a Pod.
This predicate will allow update events on objects that never have their metadata.generation field updated by the system, i.e. do not respect Generation semantics: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#metadata This allows a controller to update objects that may have had their spec changed but, because the object does not use a generation, will inform on that change in some other manner.
This predicate can be useful by itself, but is intended to be used in conjunction with sigs.k8s.io/controller-runtime/pkg/predicate.GenerationChangedPredicate to allow update events on all potentially changed objects, those that respect Generation semantics or those that do not:
import ( corev1 "k8s.io/api/core/v1" appsv1 "k8s.io/api/apps/v1" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/event" ctrlpredicate "sigs.k8s.io/controller-runtime/pkg/predicate" libpredicate "github.com/piccobit/operator-lib/predicate" "github.com/example/my-operator/api/v1alpha1" ) func (r *MyTypeReconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). For(&v1alpha1.MyType{}). Owns(&corev1.Pod{}). // Does not respect Generation. Owns(&appsv1.Deployment{}). // Respects Generation. WithEventFilter(ctrlpredicate.Or(ctrlpredicate.GenerationChangedPredicate{}, libpredicate.NoGenerationPredicate{})). Complete(r) }
func (NoGenerationPredicate) Update ¶
func (NoGenerationPredicate) Update(e event.UpdateEvent) bool
Update implements the default UpdateEvent filter for validating absence Generation.