reconciler

package
v0.0.0-...-b0f89fb Latest Latest
Warning

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

Go to latest
Published: Jan 22, 2025 License: AGPL-3.0 Imports: 27 Imported by: 2

Documentation

Index

Constants

View Source
const (
	AnnotationShouldReconcileKey string = "kloudlite.io/operator.should-reconcile"
	AnnotationClearStatusKey     string = "kloudlite.io/operator.clear-status"
	AnnotationResetCheckKey      string = "kloudlite.io/operator.reset-check"
	AnnotationRestartKey         string = "kloudlite.io/do-restart"
)
View Source
const (
	AnnotationResourceReady  string = "kloudlite.io/operator.resource.ready"
	AnnotationResourceChecks string = "kloudlite.io/operator.checks"
)
View Source
const (
	CommonFinalizer        string = "kloudlite.io/finalizer"
	ForegroundFinalizer    string = "foregroundDeletion"
	BillingFinalizer       string = "finalizers.kloudlite.io/billing-watcher"
	StatusWatcherFinalizer string = "finalizers.kloudlite.io/status-watcher"

	GenericFinalizer string = "kloudlite.io/finalizer"
)

Finalizers

View Source
const (
	AnnotationDescriptionKey string = "kloudlite.io/description"

	LastAppliedKey string = "kloudlite.io/last-applied"
	GVKKey         string = "kloudlite.io/group-version-kind"
)

Generic Keys

View Source
const (
	ReasonGenerationUpdated      string = "GENERATION_UPDATED"
	ReasonDeletionTimestamp      string = "DELETION_TIMESTAMP"
	ReasonLabelsUpdated          string = "LABELS_UPDATED"
	ReasonAnnotationsUpdated     string = "ANNOTATIONS_UPDATED"
	ReasonFinalizersUpdated      string = "FINALIZERS_UPDATED"
	ReasonOwnerReferencesUpdated string = "OWNER_REFERENCES_UPDATED"
	ReasonStatusIsReadyChanged   string = "STATUS_IS_READY_CHANGED"
	ReasonStatusChecksUpdated    string = "CHECKS_UPDATED"
)
View Source
const (
	KloudliteDNSHostnameKey string = "kloudlite.io/dns.hostname"
)

Variables

This section is empty.

Functions

func AreChecksEqual

func AreChecksEqual(c1 Check, c2 Check) bool

func Get

func Get[T client.Object](ctx context.Context, cli client.Client, nn types.NamespacedName, obj T) (T, error)

func GetLocal

func GetLocal[T any, V Resource](r *Request[V], key string) (T, bool)

func GetRaw

func GetRaw[T any](ctx context.Context, cli client.Client, nn types.NamespacedName, obj *unstructured.Unstructured) (*T, error)

func NewRunningCheck

func NewRunningCheck[T Resource](name string, req *Request[T]) *checkWrapper[T]

func ReconcileFilter

func ReconcileFilter(eventRecorder ...record.EventRecorder) predicate.Funcs

func SetLocal

func SetLocal[T any, V Resource](r *Request[V], key string, value T)

Types

type Check

type Check struct {
	Status     bool   `json:"status"`
	Message    string `json:"message,omitempty"`
	Generation int64  `json:"generation,omitempty"`

	State State `json:"state,omitempty"`

	StartedAt *metav1.Time `json:"startedAt,omitempty"`

	Info  string `json:"info,omitempty"`
	Debug string `json:"debug,omitempty"`
	Error string `json:"error,omitempty"`
}

+kubebuilder:object:generate=true

func (*Check) DeepCopy

func (in *Check) DeepCopy() *Check

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Check.

func (*Check) DeepCopyInto

func (in *Check) DeepCopyInto(out *Check)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CheckMeta

type CheckMeta struct {
	Name        string  `json:"name"`
	Title       string  `json:"title"`
	Description *string `json:"description,omitempty"`
	Debug       bool    `json:"debug,omitempty"`
	Hide        bool    `json:"hide,omitempty"`
}

+kubebuilder:object:generate=true

func (*CheckMeta) DeepCopy

func (in *CheckMeta) DeepCopy() *CheckMeta

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheckMeta.

func (*CheckMeta) DeepCopyInto

func (in *CheckMeta) DeepCopyInto(out *CheckMeta)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type KV

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

func (*KV) Get

func (kv *KV) Get(k string) (any, error)

func (*KV) Set

func (kv *KV) Set(k string, v any)

type NamedReconciler

type NamedReconciler interface {
	GetName() string
}

type Reconciler

type Reconciler interface {
	reconcile.Reconciler
	// SetupWithManager(mgr ctrl.Manager, logger logging.Logger) error
	SetupWithManager(mgr ctrl.Manager) error
	GetName() string
}

type Reconciler2

type Reconciler2 struct {
	reconcile.Reconciler
	NamedReconciler
}

type Request

type Request[T Resource] struct {
	Object T

	Logger *slog.Logger

	KV KV
	// contains filtered or unexported fields
}

func NewRequest

func NewRequest[T Resource](ctx context.Context, c client.Client, nn types.NamespacedName, resource T) (*Request[T], error)

func (*Request[T]) AddToOwnedResources

func (r *Request[T]) AddToOwnedResources(refs ...ResourceRef)

func (*Request[T]) CleanupOwnedResources

func (r *Request[T]) CleanupOwnedResources(check *checkWrapper[T]) stepResult.Result

func (*Request[T]) ClearStatusIfAnnotated

func (r *Request[T]) ClearStatusIfAnnotated() stepResult.Result

func (*Request[T]) Context

func (r *Request[T]) Context() context.Context

func (*Request[T]) Done

func (r *Request[T]) Done(result ...ctrl.Result) stepResult.Result

func (*Request[T]) EnsureCheckList

func (r *Request[T]) EnsureCheckList(expected []CheckMeta) stepResult.Result

func (*Request[T]) EnsureChecks

func (r *Request[T]) EnsureChecks(names ...string) stepResult.Result

func (*Request[T]) EnsureFinalizers

func (r *Request[T]) EnsureFinalizers(finalizers ...string) stepResult.Result

func (*Request[T]) EnsureLabelsAndAnnotations

func (r *Request[T]) EnsureLabelsAndAnnotations() stepResult.Result

func (*Request[T]) Finalize

func (r *Request[T]) Finalize() stepResult.Result

func (*Request[T]) ForceCleanupOwnedResources

func (r *Request[T]) ForceCleanupOwnedResources(check *checkWrapper[T]) stepResult.Result

INFO: this should only be used for very specific cases, where there is no other way to cleanup owned resources Like, when deleting ManagedService

  • all managed resources should be deleted, but since owner is already getting deleted, there is no point in their proper cleanup

func (*Request[T]) GetAnchorName

func (r *Request[T]) GetAnchorName() string

func (*Request[T]) GetClient

func (r *Request[T]) GetClient() client.Client

func (*Request[T]) GetOwnedK8sResources

func (r *Request[T]) GetOwnedK8sResources() []client.Object

func (*Request[T]) GetOwnedResources

func (r *Request[T]) GetOwnedResources() []ResourceRef

func (*Request[T]) LogPostCheck

func (r *Request[T]) LogPostCheck(checkName string)

func (*Request[T]) LogPreCheck

func (r *Request[T]) LogPreCheck(checkName string)

func (*Request[T]) Next

func (r *Request[T]) Next() stepResult.Result

func (*Request[T]) PostReconcile

func (r *Request[T]) PostReconcile()

func (*Request[T]) PreReconcile

func (r *Request[T]) PreReconcile()

func (*Request[T]) RestartIfAnnotated

func (r *Request[T]) RestartIfAnnotated() stepResult.Result

func (*Request[T]) ShouldReconcile

func (r *Request[T]) ShouldReconcile() bool

type Resource

type Resource interface {
	client.Object
	runtime.Object
	EnsureGVK()
	GetStatus() *Status
	GetEnsuredLabels() map[string]string
	GetEnsuredAnnotations() map[string]string
}

type ResourceRef

type ResourceRef struct {
	metav1.TypeMeta `json:",inline" graphql:"children-required"`
	Namespace       string `json:"namespace"`
	Name            string `json:"name"`
}

+kubebuilder:object:generate=true

func ParseResourceRef

func ParseResourceRef(obj client.Object) ResourceRef

func (*ResourceRef) DeepCopy

func (in *ResourceRef) DeepCopy() *ResourceRef

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceRef.

func (*ResourceRef) DeepCopyInto

func (in *ResourceRef) DeepCopyInto(out *ResourceRef)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type State

type State string

+kubebuilder:object:generate=true

const (
	WaitingState   State = "yet-to-be-reconciled"
	RunningState   State = "under-reconcilation"
	ErroredState   State = "errored-during-reconcilation"
	CompletedState State = "finished-reconcilation"
)

type Status

type Status struct {
	// +kubebuilder:validation:Optional
	IsReady   bool          `json:"isReady"`
	Resources []ResourceRef `json:"resources,omitempty"`

	CheckList           []CheckMeta      `json:"checkList,omitempty"`
	Checks              map[string]Check `json:"checks,omitempty"`
	LastReadyGeneration int64            `json:"lastReadyGeneration,omitempty"`
	LastReconcileTime   *metav1.Time     `json:"lastReconcileTime,omitempty"`
}

+kubebuilder:object:generate=true +kubebuilder:printcolumn:JSONPath=".status.isReady",name=Ready,type=boolean +kubebuilder:printcolumn:JSONPath=".metadata.creationTimestamp",name=Age,type=date

func (*Status) DeepCopy

func (in *Status) DeepCopy() *Status

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Status.

func (*Status) DeepCopyInto

func (in *Status) DeepCopyInto(out *Status)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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