Documentation ¶
Overview ¶
Package source provides event streams to hook up to Controllers with Controller.Watch. Events are used with handler.EventHandlers to enqueue reconcile.Requests and trigger Reconciles for Kubernetes objects.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ChannelOpt ¶ added in v0.18.0
type ChannelOpt[T any] func(*channel[T])
ChannelOpt allows to configure a source.Channel.
func WithBufferSize ¶ added in v0.18.0
func WithBufferSize[T any](bufferSize int) ChannelOpt[T]
WithBufferSize configures the buffer size for a source.Channel. By default, the buffer size is 1024.
func WithPredicates ¶ added in v0.18.0
func WithPredicates[T any](p ...predicate.TypedPredicate[T]) ChannelOpt[T]
WithPredicates adds the configured predicates to a source.Channel.
type Func ¶
type Func func(context.Context, workqueue.RateLimitingInterface) error
Func is a function that implements Source.
type Informer ¶ added in v0.1.5
type Informer struct { // Informer is the controller-runtime Informer Informer cache.Informer Handler handler.EventHandler Predicates []predicate.Predicate }
Informer is used to provide a source of events originating inside the cluster from Watches (e.g. Pod Create).
type Source ¶
type Source interface { // Start is internal and should be called only by the Controller to register an EventHandler with the Informer // to enqueue reconcile.Requests. Start(context.Context, workqueue.RateLimitingInterface) error }
Source is a source of events (e.g. Create, Update, Delete operations on Kubernetes Objects, Webhook callbacks, etc) which should be processed by event.EventHandlers to enqueue reconcile.Requests.
* Use Kind for events originating in the cluster (e.g. Pod Create, Pod Update, Deployment Update).
* Use Channel for events originating outside the cluster (e.g. GitHub Webhook callback, Polling external urls).
Users may build their own Source implementations.
func Channel ¶
func Channel[T any](source <-chan event.TypedGenericEvent[T], handler handler.TypedEventHandler[T], opts ...ChannelOpt[T]) Source
Channel is used to provide a source of events originating outside the cluster (e.g. GitHub Webhook callback). Channel requires the user to wire the external source (e.g. http handler) to write GenericEvents to the underlying channel.
Example ¶
This example reads GenericEvents from a channel and enqueues a reconcile.Request containing the Name and Namespace provided by the event.
package main import ( "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/source" ) var ctrl controller.Controller func main() { events := make(chan event.GenericEvent) err := ctrl.Watch( source.Channel( events, &handler.EnqueueRequestForObject{}, ), ) if err != nil { // handle it } }
Output:
type SyncingSource ¶ added in v0.5.4
SyncingSource is a source that needs syncing prior to being usable. The controller will call its WaitForSync prior to starting workers.
func Kind ¶
func Kind[T client.Object](cache cache.Cache, object T, handler handler.TypedEventHandler[T], predicates ...predicate.TypedPredicate[T]) SyncingSource
Kind creates a KindSource with the given cache provider.
Example ¶
This example Watches for Pod Events (e.g. Create / Update / Delete) and enqueues a reconcile.Request with the Name and Namespace of the Pod.
package main import ( corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/source" ) var mgr manager.Manager var ctrl controller.Controller func main() { err := ctrl.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}, &handler.TypedEnqueueRequestForObject[*corev1.Pod]{})) if err != nil { // handle it } }
Output: