predicate

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 14, 2020 License: Apache-2.0 Imports: 5 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DependentPredicate

type DependentPredicate struct {
	predicate.Funcs
}

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

Create filters out all events. It assumes that the controller reconciling the parent is the only client creating the dependent resources.

func (DependentPredicate) Delete

Delete passes all events through. This allows the controller to recreate deleted dependent resources if the primary resource is not deleted.

func (DependentPredicate) Generic

Generic filters out all events.

func (DependentPredicate) Update

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

type NoGenerationPredicate struct {
	predicate.Funcs
}

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/operator-framework/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

Update implements the default UpdateEvent filter for validating absence Generation.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL