reconciler

package
v0.10.2 Latest Latest
Warning

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

Go to latest
Published: May 7, 2020 License: Apache-2.0 Imports: 25 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 BanzaiCloudManagedComponent = "banzaicloud.io/managed-component"

Variables

This section is empty.

Functions

This section is empty.

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 ComponentReconciler added in v0.7.0

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

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(object runtime.Object) error
}

type DesiredStateHook

type DesiredStateHook func(object runtime.Object) error

func (DesiredStateHook) BeforeUpdate

func (d DesiredStateHook) BeforeUpdate(object runtime.Object) error

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

type GenericResourceReconciler

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

GenericResourceReconciler generic resource reconciler

func NewReconciler

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

NewReconciler returns GenericResourceReconciler

func (*GenericResourceReconciler) CreateIfNotExist added in v0.7.0

func (r *GenericResourceReconciler) CreateIfNotExist(desired runtime.Object) (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 (*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 NativeReconcilerWithScheme added in v0.7.0

func NativeReconcilerWithScheme(scheme *runtime.Scheme) NativeReconcilerOpt

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)

type ResourceBuilders added in v0.7.0

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

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
	// control namespace dictates where namespaced objects should belong to
	GetControlNamespace() string
}

type ResourceReconciler added in v0.7.0

type ResourceReconciler interface {
	CreateIfNotExist(runtime.Object) (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 StaticDesiredState

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

func (StaticDesiredState) BeforeUpdate

func (s StaticDesiredState) BeforeUpdate(object runtime.Object) error

Jump to

Keyboard shortcuts

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