reconciler

package
v0.15.0 Latest Latest
Warning

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

Go to latest
Published: Oct 13, 2020 License: Apache-2.0 Imports: 36 Imported by: 36

README

ResourceReconciler

ResourceReconciler reconciles a single Kubernetes object against the API Server.

It creates the object if it doesn't exist or removes it in case its desired state is absent.

It uses the ObjectMatcher library to be able to tell if an already existing object needs to be updated or not.

It depends on logr logger and the controller-runtime client that is available in a typical kubebuilder or operator-sdk project.

Example:

package main

import (
	corev1 "k8s.io/api/core/v1"
	github.com/go-logr/logr
	"github.com/banzaicloud/operator-tools/pkg/reconciler"
	runtimeClient "sigs.k8s.io/controller-runtime/pkg/client"
)

func example(client runtimeClient.Client, logger logr.Logger) {
  resourceReconciler := reconciler.NewReconcilerWith(client, reconciler.WithLog(logger))
  
  serviceObject := &corev1.Service{
    Spec: corev1.ServiceSpec{
      ...
    },
  }
  
  result, err := resourceReconciler.ReconcileResource(serviceObject, reconciler.StatePresent)
}

Documentation

Index

Constants

View Source
const (
	ReconciledObjectStateAbsent  reconciledObjectState = "Absent"
	ReconciledObjectStatePresent reconciledObjectState = "Present"
	ReconciledObjectStatePurged  reconciledObjectState = "Purged"
)

Variables

View Source
var DefaultBackoff = wait.Backoff{
	Duration: time.Second * 5,
	Factor:   1,
	Jitter:   0,
	Steps:    12,
}

Functions

func EnqueueByOwnerAnnotationMapper added in v0.11.0

func EnqueueByOwnerAnnotationMapper() handler.Mapper

func IgnoreManagedFields added in v0.12.0

func IgnoreManagedFields() patch.CalculateOption

func IstioSidecarInjectorExistsCheck added in v0.12.0

func IstioSidecarInjectorExistsCheck(c client.Client, namespace string) wait.CustomResourceConditionCheck

Types

type CombinedResult added in v0.7.0

type CombinedResult struct {
	Result reconcile.Result
	Err    error
}

Collects results and errors of all subcomponents instead of failing and bailing out immediately

func (*CombinedResult) Combine added in v0.7.0

func (c *CombinedResult) Combine(sub *reconcile.Result, err error)

func (*CombinedResult) CombineErr added in v0.7.0

func (c *CombinedResult) CombineErr(err error)

type ComponentLifecycle added in v0.14.0

type ComponentLifecycle interface {
	OnFinished(object runtime.Object) error
}

type ComponentReconciler added in v0.7.0

type ComponentReconciler interface {
	Reconcile(object runtime.Object) (*reconcile.Result, error)
	RegisterWatches(*builder.Builder)
}

type ComponentWithStatus added in v0.14.0

type ComponentWithStatus interface {
	Update(object runtime.Object, status types.ReconcileStatus, msg string) error
	IsSkipped(object runtime.Object) bool
	IsEnabled(object runtime.Object) bool
}

type ConditionChecker added in v0.12.0

type ConditionChecker struct {
	// contains filtered or unexported fields
}

func NewConditionChecker added in v0.12.0

func NewConditionChecker(client client.Client, scheme *runtime.Scheme, log logr.Logger) *ConditionChecker

func (*ConditionChecker) CheckResourceConditions added in v0.12.0

func (c *ConditionChecker) CheckResourceConditions(conditions []ResourceCondition, backoff *wait.Backoff) error

type ConditionType added in v0.12.0

type ConditionType string

type DefaultReconciledComponent added in v0.7.0

type DefaultReconciledComponent struct {
	// contains filtered or unexported fields
}

func (*DefaultReconciledComponent) PurgeTypes added in v0.7.0

func (*DefaultReconciledComponent) RegisterWatches added in v0.7.0

func (d *DefaultReconciledComponent) RegisterWatches(b *builder.Builder)

func (*DefaultReconciledComponent) ResourceBuilders added in v0.7.0

func (d *DefaultReconciledComponent) ResourceBuilders(parent ResourceOwner, object interface{}) []ResourceBuilder

type DesiredState

type DesiredState interface {
	BeforeUpdate(current, desired runtime.Object) error
	BeforeCreate(desired runtime.Object) error
	BeforeDelete(current runtime.Object) error
}

type DesiredStateHook

type DesiredStateHook func(object runtime.Object) error

func (DesiredStateHook) BeforeCreate added in v0.11.0

func (d DesiredStateHook) BeforeCreate(desired runtime.Object) error

func (DesiredStateHook) BeforeDelete added in v0.11.0

func (d DesiredStateHook) BeforeDelete(current runtime.Object) error

func (DesiredStateHook) BeforeUpdate

func (d DesiredStateHook) BeforeUpdate(current, desired runtime.Object) error

type DesiredStateShouldCreate added in v0.11.0

type DesiredStateShouldCreate interface {
	ShouldCreate(desired runtime.Object) (bool, error)
}

type DesiredStateShouldDelete added in v0.11.0

type DesiredStateShouldDelete interface {
	ShouldDelete(desired runtime.Object) (bool, error)
}

type DesiredStateShouldUpdate added in v0.11.0

type DesiredStateShouldUpdate interface {
	ShouldUpdate(current, desired runtime.Object) (bool, error)
}

type DesiredStateWithCreateOptions added in v0.11.0

type DesiredStateWithCreateOptions interface {
	GetCreateOptions() []runtimeClient.CreateOption
}

type DesiredStateWithDeleteOptions added in v0.11.0

type DesiredStateWithDeleteOptions interface {
	GetDeleteOptions() []runtimeClient.DeleteOption
}

type DesiredStateWithStaticState added in v0.11.0

type DesiredStateWithStaticState interface {
	DesiredState() StaticDesiredState
}

type DesiredStateWithUpdateOptions added in v0.11.0

type DesiredStateWithUpdateOptions interface {
	GetUpdateOptions() []runtimeClient.UpdateOption
}

type Dispatcher added in v0.7.0

type Dispatcher struct {
	client.Client
	Log                  logr.Logger
	ResourceGetter       func(req ctrl.Request) (runtime.Object, error)
	ResourceFilter       func(runtime.Object) (bool, error)
	CompletionHandler    func(runtime.Object, ctrl.Result, error) (ctrl.Result, error)
	ComponentReconcilers []ComponentReconciler
}

Dispatcher orchestrates reconciliation of multiple ComponentReconciler objects focusing on handing off reconciled object to all of its components and calculating an aggregated result to return. It requires a ResourceGetter callback and optionally can leverage a ResourceFilter and a CompletionHandler

func (*Dispatcher) Handle added in v0.7.0

func (r *Dispatcher) Handle(object runtime.Object) (ctrl.Result, error)

Handle receives a single object and dispatches it to all the components Components need to understand how to interpret the object

func (*Dispatcher) Reconcile added in v0.7.0

func (r *Dispatcher) Reconcile(req ctrl.Request) (ctrl.Result, error)

Reconcile implements reconcile.Reconciler in a generic way from the controller-runtime library

func (*Dispatcher) RegisterWatches added in v0.7.0

func (r *Dispatcher) RegisterWatches(b *builder.Builder) *builder.Builder

RegisterWatches dispatches the watch registration builder to all its components

func (*Dispatcher) SetupAdditionalWatches added in v0.11.0

func (r *Dispatcher) SetupAdditionalWatches(c controller.Controller) error

SetupAdditionalWatches dispatches the controller for watch registration to all its components

type GenericResourceReconciler

type GenericResourceReconciler struct {
	Log     logr.Logger
	Client  runtimeClient.Client
	Options ReconcilerOpts
}

GenericResourceReconciler generic resource reconciler

func NewGenericReconciler added in v0.12.0

func NewGenericReconciler(client runtimeClient.Client, log logr.Logger, opts ReconcilerOpts) *GenericResourceReconciler

NewGenericReconciler returns GenericResourceReconciler

func (*GenericResourceReconciler) CreateIfNotExist added in v0.7.0

func (r *GenericResourceReconciler) CreateIfNotExist(desired runtime.Object, desiredState DesiredState) (bool, runtime.Object, error)

func (*GenericResourceReconciler) CreateResource

func (r *GenericResourceReconciler) CreateResource(desired runtime.Object) error

CreateResource creates a resource if it doesn't exist

func (*GenericResourceReconciler) ReconcileResource

func (r *GenericResourceReconciler) ReconcileResource(desired runtime.Object, desiredState DesiredState) (*reconcile.Result, error)

ReconcileResource reconciles various kubernetes types

type NativeReconciledComponent added in v0.7.0

type NativeReconciledComponent interface {
	ResourceBuilders(parent ResourceOwner, object interface{}) []ResourceBuilder
	RegisterWatches(*builder.Builder)
	PurgeTypes() []schema.GroupVersionKind
}

func NewReconciledComponent added in v0.7.0

func NewReconciledComponent(b ResourceBuilders, w func(b *builder.Builder), p func() []schema.GroupVersionKind) NativeReconciledComponent

type NativeReconciler added in v0.7.0

type NativeReconciler struct {
	*GenericResourceReconciler
	client.Client
	// contains filtered or unexported fields
}

func NewNativeReconciler added in v0.7.0

func NewNativeReconciler(
	componentName string,
	rec *GenericResourceReconciler,
	client client.Client,
	reconciledComponent NativeReconciledComponent,
	resourceTranslate func(runtime.Object) (parent ResourceOwner, config interface{}),
	opts ...NativeReconcilerOpt) *NativeReconciler

func NewNativeReconcilerWithDefaults added in v0.12.0

func NewNativeReconcilerWithDefaults(
	component string,
	client client.Client,
	scheme *runtime.Scheme,
	logger logr.Logger,
	resourceBuilders ResourceBuilders,
	purgeTypes PurgeTypesFunc,
	resourceTranslate ResourceTranslate,
	opts ...NativeReconcilerOpt,
) *NativeReconciler

func (*NativeReconciler) GetReconciledObjectWithState added in v0.11.0

func (rec *NativeReconciler) GetReconciledObjectWithState(state reconciledObjectState) []runtime.Object

func (*NativeReconciler) Reconcile added in v0.7.0

func (rec *NativeReconciler) Reconcile(owner runtime.Object) (*reconcile.Result, error)

func (*NativeReconciler) RegisterWatches added in v0.7.0

func (rec *NativeReconciler) RegisterWatches(b *builder.Builder)

type NativeReconcilerOpt added in v0.7.0

type NativeReconcilerOpt func(*NativeReconciler)

func NativeReconcilerSetControllerRef added in v0.10.0

func NativeReconcilerSetControllerRef() NativeReconcilerOpt

func NativeReconcilerSetRESTMapper added in v0.11.0

func NativeReconcilerSetRESTMapper(mapper meta.RESTMapper) NativeReconcilerOpt

func NativeReconcilerWithScheme added in v0.7.0

func NativeReconcilerWithScheme(scheme *runtime.Scheme) NativeReconcilerOpt

func NativeReconcilerWithWait added in v0.12.0

func NativeReconcilerWithWait(backoff *wait.Backoff) NativeReconcilerOpt

type ObjectKeyWithGVK added in v0.12.0

type ObjectKeyWithGVK struct {
	ObjectKey client.ObjectKey        `json:"objectKey,omitempty"`
	GVK       schema.GroupVersionKind `json:"gvk,omitempty"`
}

type PendingStatusPredicate added in v0.12.0

type PendingStatusPredicate struct {
	predicate.Funcs
}

func (PendingStatusPredicate) Update added in v0.12.0

type PurgeTypesFunc added in v0.11.0

type PurgeTypesFunc func() []schema.GroupVersionKind

type ReconcileRetry added in v0.7.0

type ReconcileRetry struct {
	MaxRetries  int
	DefaultWait time.Duration
}

func (*ReconcileRetry) Reconcile added in v0.7.0

func (r *ReconcileRetry) Reconcile(component func() (*reconcile.Result, error)) error

type ReconcilerOpts

type ReconcilerOpts struct {
	Log                                              logr.Logger
	Scheme                                           *runtime.Scheme
	EnableRecreateWorkloadOnImmutableFieldChange     bool
	EnableRecreateWorkloadOnImmutableFieldChangeHelp string
}

Recommended to use NewReconcilerWith + ResourceReconcilerOptions

type ResourceBuilder added in v0.7.0

type ResourceBuilder func() (runtime.Object, DesiredState, error)

func GetResourceBuildersFromObjects added in v0.12.0

func GetResourceBuildersFromObjects(objects []runtime.Object, state DesiredState, modifierFuncs ...resources.ObjectModifierFunc) ([]ResourceBuilder, error)

type ResourceBuilders added in v0.7.0

type ResourceBuilders func(parent ResourceOwner, object interface{}) []ResourceBuilder

type ResourceCondition added in v0.12.0

type ResourceCondition struct {
	ID           string                              `json:"id,omitempty"`
	Description  string                              `json:"shortDescription,omitempty"`
	Checks       []wait.ResourceConditionCheck       `json:"checks,omitempty"`
	CustomChecks []wait.CustomResourceConditionCheck `json:"customChecks,omitempty"`
	Object       *ObjectKeyWithGVK                   `json:"object,omitempty"`
}

type ResourceOwner added in v0.7.0

type ResourceOwner interface {
	// to be aware of metadata
	metav1.Object
	// to be aware of the owner's type
	runtime.Object
}

type ResourceOwnerWithControlNamespace added in v0.11.0

type ResourceOwnerWithControlNamespace interface {
	ResourceOwner
	// control namespace dictates where namespaced objects should belong to
	GetControlNamespace() string
}

type ResourceReconciler added in v0.7.0

type ResourceReconciler interface {
	CreateIfNotExist(runtime.Object, DesiredState) (created bool, object runtime.Object, err error)
	ReconcileResource(runtime.Object, DesiredState) (*reconcile.Result, error)
}

func NewReconcilerWith added in v0.7.0

func NewReconcilerWith(client runtimeClient.Client, opts ...func(reconciler *ReconcilerOpts)) ResourceReconciler

type ResourceReconcilerOption added in v0.7.0

type ResourceReconcilerOption func(*ReconcilerOpts)

func WithEnableRecreateWorkload added in v0.7.0

func WithEnableRecreateWorkload() ResourceReconcilerOption

func WithLog added in v0.7.0

func WithScheme added in v0.7.0

func WithScheme(scheme *runtime.Scheme) ResourceReconcilerOption

type ResourceTranslate added in v0.11.0

type ResourceTranslate func(runtime.Object) (parent ResourceOwner, config interface{})

type SkipCreatePredicate added in v0.11.0

type SkipCreatePredicate struct {
	predicate.Funcs
}

func (SkipCreatePredicate) Create added in v0.11.0

type SkipDeletePredicate added in v0.11.0

type SkipDeletePredicate struct {
	predicate.Funcs
}

func (SkipDeletePredicate) Delete added in v0.11.0

type SkipUpdatePredicate added in v0.11.0

type SkipUpdatePredicate struct {
	predicate.Funcs
}

func (SkipUpdatePredicate) Update added in v0.11.0

type SpecChangePredicate added in v0.12.0

type SpecChangePredicate struct {
	predicate.Funcs
}

func (SpecChangePredicate) Update added in v0.12.0

type StaticDesiredState

type StaticDesiredState string
const (
	StateCreated StaticDesiredState = "Created"
	StateAbsent  StaticDesiredState = "Absent"
	StatePresent StaticDesiredState = "Present"
)

func (StaticDesiredState) BeforeCreate added in v0.11.0

func (s StaticDesiredState) BeforeCreate(desired runtime.Object) error

func (StaticDesiredState) BeforeDelete added in v0.11.0

func (s StaticDesiredState) BeforeDelete(current runtime.Object) error

func (StaticDesiredState) BeforeUpdate

func (s StaticDesiredState) BeforeUpdate(current, desired runtime.Object) error

type Watches added in v0.11.0

type Watches interface {
	SetupAdditionalWatches(c controller.Controller) error
}

Jump to

Keyboard shortcuts

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