Help us shape the future of Go! Take the 2026 Go Developer Survey

extensions

package
v1.44.0 Latest Latest
Warning

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

Go to latest
Published: Oct 1, 2026 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Overview

Package extensions is the seam other product variants (today just Calico Enterprise) use to layer variant-specific behavior onto the core operator's render output, so core code never branches on variant.

Extensions holds one extension per controller a variant extends. Each is an interface the variant implements, covering two phases.

ExtendInputs is the controller phase. It has cluster access via controller.Inputs and does the side-effecting work a render hook can't: rejecting unsupported config, creating certificates, extending the trusted bundle.

The Modify methods are the render phase: pure hooks handed the component and the same typed config the core operator rendered it from, returning a component whose objects the variant has adjusted. Decorate does the wrapping.

A variant builds the whole set in one place at startup - see pkg/enterprise.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Decorate

func Decorate(base render.Component, ri render.Inputs, variant operatorv1.ProductVariant, modify Modifier) render.Component

Decorate wraps base so modify runs over its rendered objects. An Installation asking for a different variant gets base untouched.

func DegradedReason

func DegradedReason(err error) (operatorv1.TigeraStatusReason, bool)

DegradedReason returns the reason an extension attached to err, if it attached one.

func Degradedf

func Degradedf(reason operatorv1.TigeraStatusReason, format string, args ...any) error

Degradedf returns an error the controller degrades with under the given reason.

func FindObject

func FindObject[T client.Object](objs []client.Object, name string) (T, bool)

FindObject returns the first object of type T with the given name.

func InvalidConfigf

func InvalidConfigf(format string, args ...any) error

InvalidConfigf reports configuration the variant does not support.

func NotReadyf

func NotReadyf(format string, args ...any) error

NotReadyf reports a dependency the extension is waiting on. Controllers wait for a watch rather than failing.

Types

type APIServerExtension

type APIServerExtension interface {
	ExtendInputs(ctx context.Context, ci controller.Inputs) (controller.Inputs, []certificatemanagement.KeyPairInterface, error)
	Watches(c ctrlruntime.Controller) error

	// Modify layers the variant onto a component the controller rendered.
	Modify(c render.Component, ri render.Inputs) render.Component
}

APIServerExtension is the variant's hook into the apiserver controller.

type ClusterConnectionExtension

type ClusterConnectionExtension interface {
	ExtendInputs(ctx context.Context, ci controller.Inputs) (controller.Inputs, []certificatemanagement.KeyPairInterface, error)

	// ValidateAndDefault rejects fields the variant does not support and fills in
	// the ones it defaults.
	ValidateAndDefault(cr *operatorv1.ManagementClusterConnection) error
	// Watches registers the variant's watches. The clientset is for those that must
	// wait on a CRD.
	Watches(c ctrlruntime.Controller, cs kubernetes.Interface) error

	// Modify layers the variant onto a component the controller rendered.
	Modify(c render.Component, ri render.Inputs) render.Component
}

ClusterConnectionExtension is the variant's hook into the clusterconnection controller and the guardian components it renders.

type Extensions

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

Extensions is the variant behavior the operator runs with. The zero value extends nothing, so the accessors never return nil.

func New

func New(s Set) Extensions

New returns the extensions the operator runs with. A variant builds this once at startup; see pkg/enterprise.

func (Extensions) APIServer

func (e Extensions) APIServer() APIServerExtension

func (Extensions) ClusterConnection

func (e Extensions) ClusterConnection() ClusterConnectionExtension

func (Extensions) Installation

func (e Extensions) Installation() InstallationExtension

func (Extensions) Istio

func (e Extensions) Istio() IstioExtension

func (Extensions) Windows

func (e Extensions) Windows() WindowsExtension

type InstallationExtension

type InstallationExtension interface {
	// ExtendInputs does the reconcile work render cannot, returning keypairs for the
	// controller to manage. Rejects unsupported config with InvalidConfigf.
	ExtendInputs(ctx context.Context, ci controller.Inputs) (controller.Inputs, []certificatemanagement.KeyPairInterface, error)

	// Watches registers the watches the extension needs.
	Watches(c ctrlruntime.Controller) error

	// DeclareFelixConfiguration writes the variant's defaults into owned, merging with current
	// where needed, and returns the paths it declared.
	DeclareFelixConfiguration(install *operatorv1.InstallationSpec, current, owned *v3.FelixConfiguration) ([]string, error)

	// ProductVersion is the version the operator writes to the Installation status
	// for the variant the given spec installs.
	ProductVersion(install *operatorv1.InstallationSpec) string

	// Images overrides the images the rendered components resolve to.
	Images() *imageoverride.Overrides

	// Modify layers the variant onto a component the controller rendered.
	Modify(c render.Component, ri render.Inputs) render.Component
}

InstallationExtension is the variant's hook into the installation controller and the components it renders.

type IstioExtension

type IstioExtension interface {
	// PolicySyncRequired reports whether a variant feature needs Felix's policy-sync
	// socket, which the istio controller shares the FelixConfiguration field with.
	PolicySyncRequired(ctx context.Context, c client.Client) (bool, error)
}

IstioExtension is the variant's hook into the istio controller.

type Modifier

type Modifier func(create, delete []client.Object) (newCreate, newDelete []client.Object)

Modifier post-processes the objects a render component produced. Appending to delete cleans up what a prior variant left behind.

type Set

type Set struct {
	Installation      InstallationExtension
	Windows           WindowsExtension
	APIServer         APIServerExtension
	ClusterConnection ClusterConnectionExtension
	Istio             IstioExtension
}

Set is the extensions a variant supplies, one per extended controller. What it leaves unset runs the core behavior.

type WindowsExtension

type WindowsExtension interface {
	ExtendInputs(ctx context.Context, ci controller.Inputs) (controller.Inputs, []certificatemanagement.KeyPairInterface, error)
	Watches(c ctrlruntime.Controller) error

	// Modify layers the variant onto a component the controller rendered.
	Modify(c render.Component, ri render.Inputs) render.Component
	Images() *imageoverride.Overrides
}

WindowsExtension is the variant's hook into the windows controller.

Directories

Path Synopsis
Package extensionstest holds shared helpers for exercising an extension's Modify dispatch against raw object lists.
Package extensionstest holds shared helpers for exercising an extension's Modify dispatch against raw object lists.

Jump to

Keyboard shortcuts

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