remote

package
v2.0.10 Latest Latest
Warning

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

Go to latest
Published: Jun 6, 2025 License: MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DefaultRemoteDiff

type DefaultRemoteDiff[apiObject comparable] struct {
	// contains filtered or unexported fields
}

DefaultRemoteDiff is the default implementation of RemoteDiff interface

func (*DefaultRemoteDiff[apiObject]) AddDiff

func (h *DefaultRemoteDiff[apiObject]) AddDiff(diff string)

func (*DefaultRemoteDiff[apiObject]) Diff

func (h *DefaultRemoteDiff[apiObject]) Diff() string

func (*DefaultRemoteDiff[apiObject]) GetObjectToCreate

func (h *DefaultRemoteDiff[apiObject]) GetObjectToCreate() apiObject

func (*DefaultRemoteDiff[apiObject]) GetObjectToUpdate

func (h *DefaultRemoteDiff[apiObject]) GetObjectToUpdate() apiObject

func (*DefaultRemoteDiff[apiObject]) IsDiff

func (h *DefaultRemoteDiff[apiObject]) IsDiff() bool

func (*DefaultRemoteDiff[apiObject]) NeedCreate

func (h *DefaultRemoteDiff[apiObject]) NeedCreate() bool

func (*DefaultRemoteDiff[apiObject]) NeedUpdate

func (h *DefaultRemoteDiff[apiObject]) NeedUpdate() bool

func (*DefaultRemoteDiff[apiObject]) SetObjectToCreate

func (h *DefaultRemoteDiff[apiObject]) SetObjectToCreate(object apiObject)

func (*DefaultRemoteDiff[apiObject]) SetObjectToUpdate

func (h *DefaultRemoteDiff[apiObject]) SetObjectToUpdate(object apiObject)

type DefaultRemoteExternalReconciler

type DefaultRemoteExternalReconciler[k8sObject object.RemoteObject, apiObject comparable, apiClient any] struct {
	// contains filtered or unexported fields
}

DefaultRemoteExternalReconciler is the default implementation of RemoteExternalReconciler It only implement the Diff method, because of is generic with 3-way merge patch

func (*DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Build

func (h *DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Build(k8sO k8sObject) (object apiObject, err error)

func (*DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Client

func (h *DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Client() apiClient

func (*DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Create

func (h *DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Create(apiO apiObject, k8sO k8sObject) (err error)

func (*DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Delete

func (h *DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Delete(k8sO k8sObject) (err error)

func (*DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Diff

func (h *DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Diff(currentOject apiObject, expectedObject apiObject, originalObject apiObject, o k8sObject, ignoresDiff ...patch.CalculateOption) (patchResult *patch.PatchResult, err error)

func (*DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Get

func (h *DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Get(k8sO k8sObject) (object apiObject, err error)

func (*DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Update

func (h *DefaultRemoteExternalReconciler[k8sObject, apiObject, apiClient]) Update(apiO apiObject, k8sO k8sObject) (err error)

type DefaultRemoteRead

type DefaultRemoteRead[T any] struct {
	// contains filtered or unexported fields
}

DefaultRemoteRead is the default implementation of RemoteRead

func (*DefaultRemoteRead[apiObject]) GetCurrentObject

func (h *DefaultRemoteRead[apiObject]) GetCurrentObject() apiObject

func (*DefaultRemoteRead[apiObject]) GetExpectedObject

func (h *DefaultRemoteRead[apiObject]) GetExpectedObject() apiObject

func (*DefaultRemoteRead[apiObject]) SetCurrentObject

func (h *DefaultRemoteRead[apiObject]) SetCurrentObject(object apiObject)

func (*DefaultRemoteRead[apiObject]) SetExpectedObject

func (h *DefaultRemoteRead[apiObject]) SetExpectedObject(object apiObject)

type DefaultRemoteReconciler

type DefaultRemoteReconciler[k8sObject object.RemoteObject, apiObject comparable, apiClient any] struct {
	controller.Reconciler
}

DefaultRemoteReconciler is the default implementation of RemoteReconciler interface

func (*DefaultRemoteReconciler[k8sObject, apiObject, apiClient]) Reconcile

func (h *DefaultRemoteReconciler[k8sObject, apiObject, apiClient]) Reconcile(ctx context.Context, req reconcile.Request, o k8sObject, data map[string]interface{}, reconciler RemoteReconcilerAction[k8sObject, apiObject, apiClient]) (res reconcile.Result, err error)

type DefaultRemoteReconcilerAction

type DefaultRemoteReconcilerAction[k8sObject object.RemoteObject, apiObject comparable, apiClient any] struct {
	controller.ReconcilerAction
}

DefaultRemoteReconcilerAction is the default implementation of RemoteReconcilerAction

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Configure

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Configure(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], logger *logrus.Entry) (res reconcile.Result, err error)

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Create

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Create(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], object apiObject, logger *logrus.Entry) (res reconcile.Result, err error)

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Delete

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Delete(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], logger *logrus.Entry) (err error)

Delete can be call on your own version It only add some log / events

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Diff

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Diff(ctx context.Context, o k8sObject, read RemoteRead[apiObject], data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], logger *logrus.Entry, ignoreDiff ...patch.CalculateOption) (diff RemoteDiff[apiObject], res reconcile.Result, err error)

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) GetIgnoresDiff

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) GetIgnoresDiff() []patch.CalculateOption

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) GetRemoteHandler

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) GetRemoteHandler(ctx context.Context, req reconcile.Request, o k8sObject, logger *logrus.Entry) (handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], res reconcile.Result, err error)

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) OnError

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) OnError(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], currentErr error, logger *logrus.Entry) (res reconcile.Result, err error)

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) OnSuccess

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) OnSuccess(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], diff RemoteDiff[apiObject], logger *logrus.Entry) (res reconcile.Result, err error)

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Read

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Read(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], logger *logrus.Entry) (read RemoteRead[apiObject], res reconcile.Result, err error)

func (*DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Update

func (h *DefaultRemoteReconcilerAction[k8sObject, apiObject, apiClient]) Update(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], object apiObject, logger *logrus.Entry) (res reconcile.Result, err error)

Update can be call on your own version It only add some log / events

type RemoteDiff

type RemoteDiff[apiObject comparable] interface {
	// NeedCreate is true when need to create K8s object
	NeedCreate() bool

	// NeedUpdate is true when need to update K8s object
	NeedUpdate() bool

	// GetObjectsToCreate is the list of object to create on K8s
	GetObjectToCreate() apiObject

	// SetObjectsToCreate permit to set the list of object to create on K8s
	SetObjectToCreate(object apiObject)

	// GetObjectsToUpdate is the list of object to update on K8s
	GetObjectToUpdate() apiObject

	// SetObjectsToUpdate permit to set the list of object to update on K8s
	SetObjectToUpdate(object apiObject)

	// AddDiff permit to add diff
	// It add return line at the end
	AddDiff(diff string)

	// Diff permit to print human diff
	Diff() string

	// IsDiff permit to know is there are current diff to print
	IsDiff() bool
}

func NewRemoteDiff

func NewRemoteDiff[apiObject comparable]() RemoteDiff[apiObject]

NewBasicRemoteDiff is the basic contructor of RemoteDiff interface

type RemoteExternalReconciler

type RemoteExternalReconciler[k8sObject object.RemoteObject, apiObject comparable, apiClient any] interface {
	Build(k8sO k8sObject) (object apiObject, err error)
	Get(k8sO k8sObject) (object apiObject, err error)
	Create(apiO apiObject, k8sO k8sObject) (err error)
	Update(apiO apiObject, k8sO k8sObject) (err error)
	Delete(k8sO k8sObject) (err error)
	Diff(currentOject apiObject, expectedObject apiObject, originalObject apiObject, k8sO k8sObject, ignoresDiff ...patch.CalculateOption) (patchResult *patch.PatchResult, err error)
	Client() apiClient
}

RemoteExternalReconciler is the interface to call the remote API to handler resource

func NewRemoteExternalReconciler

func NewRemoteExternalReconciler[k8sObject object.RemoteObject, apiObject comparable, apiClient any](handler apiClient) RemoteExternalReconciler[k8sObject, apiObject, apiClient]

type RemoteRead

type RemoteRead[apiObject comparable] interface {
	// GetCurrentObject permit to get the current object
	GetCurrentObject() apiObject

	// SetCurrentObject permit to set the current object
	SetCurrentObject(object apiObject)

	// GetExpectedObject permit to get the  expected object
	GetExpectedObject() apiObject

	// SetExpectedObject permit to set the expected object
	SetExpectedObject(object apiObject)
}

RemoteRead is the interface to store the result of read on remote reconciler

func NewRemoteRead

func NewRemoteRead[apiObject comparable]() RemoteRead[apiObject]

NewRemoteRead is the default implementation of RemoteRead interface

type RemoteReconciler

type RemoteReconciler[k8sObject object.RemoteObject, apiObject comparable, apiClient any] interface {
	controller.Reconciler

	// Reconcile permit to reconcile the step (one K8s resource)
	Reconcile(ctx context.Context, req reconcile.Request, o k8sObject, data map[string]interface{}, reconciler RemoteReconcilerAction[k8sObject, apiObject, apiClient]) (res reconcile.Result, err error)
}

RemoteReconciler is the reconciler to reconcile the remote resource

func NewRemoteReconciler

func NewRemoteReconciler[k8sObject object.RemoteObject, apiObject comparable, apiClient any](client client.Client, name string, finalizer shared.FinalizerName, logger *logrus.Entry, recorder record.EventRecorder) (remoteReconciler RemoteReconciler[k8sObject, apiObject, apiClient])

NewRemoteReconciler permit to instanciate new basic multiphase resonciler

type RemoteReconcilerAction

type RemoteReconcilerAction[k8sObject object.RemoteObject, apiObject comparable, apiClient any] interface {
	controller.ReconcilerAction

	// GetRemoteHandler permit to get the handler to manage the remote resources
	GetRemoteHandler(ctx context.Context, req reconcile.Request, o k8sObject, logger *logrus.Entry) (handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], res reconcile.Result, err error)

	// Confirgure permit to init external provider driver (API client REST)
	// It can also permit to init condition on status
	Configure(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], logger *logrus.Entry) (res reconcile.Result, err error)

	// Read permit to read the actual resource state from provider and set it on data map
	Read(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], logger *logrus.Entry) (read RemoteRead[apiObject], res reconcile.Result, err error)

	// Create permit to create resource on provider
	// It only call if diff.NeeCreated is true
	Create(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], object apiObject, logger *logrus.Entry) (res reconcile.Result, err error)

	// Update permit to update resource on provider
	// It only call if diff.NeedUpdated is true
	Update(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], object apiObject, logger *logrus.Entry) (res reconcile.Result, err error)

	// Delete permit to delete resource on provider
	// It only call if you have specified finalizer name when you create reconciler and if resource as marked to be deleted
	Delete(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], logger *logrus.Entry) (err error)

	// OnError is call when error is throwing
	// It the right way to set status condition when error
	OnError(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], currentErr error, logger *logrus.Entry) (res reconcile.Result, err error)

	// OnSuccess is call at the end if no error
	// It's the right way to set status condition when everithink is good
	OnSuccess(ctx context.Context, o k8sObject, data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], diff RemoteDiff[apiObject], logger *logrus.Entry) (res reconcile.Result, err error)

	// Diff permit to compare the actual state and the expected state
	Diff(ctx context.Context, o k8sObject, read RemoteRead[apiObject], data map[string]any, handler RemoteExternalReconciler[k8sObject, apiObject, apiClient], logger *logrus.Entry, ignoreDiff ...patch.CalculateOption) (diff RemoteDiff[apiObject], res reconcile.Result, err error)

	GetIgnoresDiff() []patch.CalculateOption
}

RemoteReconcilerAction is the interface that use by reconciler remote to reconcile your remote resource Put logger param on each function, permit to set contextual fields like namespace and object name, object type

func NewRemoteReconcilerAction

func NewRemoteReconcilerAction[k8sObject object.RemoteObject, apiObject comparable, apiClient any](client client.Client, recorder record.EventRecorder) (remoteReconciler RemoteReconcilerAction[k8sObject, apiObject, apiClient])

NewRemoteReconcilerAction is the default implementation of RemoteReconcilerAction interface

Jump to

Keyboard shortcuts

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