controllerutil

package
v0.6.0-alpha.9 Latest Latest
Warning

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

Go to latest
Published: Jun 1, 2023 License: AGPL-3.0 Imports: 34 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrFailedToAddFinalizer = errors.New("failed to add finalizer")

Functions

func BackgroundDeleteObject

func BackgroundDeleteObject(cli client.Client, ctx context.Context, obj client.Object) error

BackgroundDeleteObject delete the object in the background, usually used in the Reconcile method

func CheckResourceExists

func CheckResourceExists(
	ctx context.Context,
	cli client.Client,
	key client.ObjectKey,
	obj client.Object) (bool, error)

CheckResourceExists checks whether resource exist or not.

func CheckedRequeueWithError

func CheckedRequeueWithError(err error, logger logr.Logger, msg string, keysAndValues ...interface{}) (reconcile.Result, error)

CheckedRequeueWithError is a convenience wrapper around logging an error message separate from the stacktrace and then passing the error through to the controller manager, this will ignore not-found errors.

func CreateOrUpdatePodVolumes

func CreateOrUpdatePodVolumes(podSpec *corev1.PodSpec, volumes map[string]appsv1alpha1.ComponentTemplateSpec) error

func CreateOrUpdateVolume

func CreateOrUpdateVolume(volumes []corev1.Volume, volumeName string, createFn createVolumeFn, updateFn updateVolumeFn) ([]corev1.Volume, error)

func GetContainerByConfigSpec

func GetContainerByConfigSpec(podSpec *corev1.PodSpec, configs []appsv1alpha1.ComponentConfigSpec) *corev1.Container

GetContainerByConfigSpec function description: Search the container using the configmap of config from the pod

Return: The first container pointer of using configs

e.g.:
ClusterDefinition.configTemplateRef:
	 - Name: "mysql-8.0"
	   VolumeName: "mysql_config"

PodTemplate.containers[*].volumeMounts:
	 - mountPath: /data/config
	   name: mysql_config
	 - mountPath: /data
	   name: data
	 - mountPath: /log
	   name: log

func GetContainerByName

func GetContainerByName(containers []corev1.Container, name string) (int, *corev1.Container)

func GetContainerID

func GetContainerID(pod *corev1.Pod, containerName string) string

GetContainerID find the containerID from pod by name

func GetContainersByConfigmap

func GetContainersByConfigmap(containers []corev1.Container, volumeName string, filters ...containerNameFilter) []string

func GetCoreNum

func GetCoreNum(container corev1.Container) int64

GetCoreNum function description: if not Resource field return 0 else Resources.Limits.cpu

func GetIntOrPercentValue

func GetIntOrPercentValue(intOrStr *metautil.IntOrString) (int, bool, error)

func GetMemorySize

func GetMemorySize(container corev1.Container) int64

GetMemorySize function description: if not Resource field, return 0 else Resources.Limits.memory

func GetParentNameAndOrdinal

func GetParentNameAndOrdinal(pod *corev1.Pod) (string, int)

GetParentNameAndOrdinal gets the name of pod's parent StatefulSet and pod's ordinal as extracted from its Name. If the Pod was not created by a StatefulSet, its parent is considered to be empty string, and its ordinal is considered to be -1.

func GetPodCondition

func GetPodCondition(status *corev1.PodStatus, conditionType corev1.PodConditionType) *corev1.PodCondition

func GetPodContainerWithVolumeMount

func GetPodContainerWithVolumeMount(podSpec *corev1.PodSpec, volumeName string) []*corev1.Container

GetPodContainerWithVolumeMount function description: Search which containers mounting the volume

Case: When the configmap update, we restart all containers who using configmap

Return: all containers mount volumeName

func GetPodRevision

func GetPodRevision(pod *corev1.Pod) string

GetPodRevision gets the revision of Pod by inspecting the StatefulSetRevisionLabel. If pod has no revision the empty string is returned.

func GetPortByPortName

func GetPortByPortName(pod *corev1.Pod, portName string) (int32, error)

GetPortByPortName find the Port from pod by name

func GetProbeContainerName

func GetProbeContainerName(pod *corev1.Pod) (string, error)

GetProbeContainerName find the probe container from pod

func GetProbeGRPCPort

func GetProbeGRPCPort(pod *corev1.Pod) (int32, error)

func GetProbeHTTPPort

func GetProbeHTTPPort(pod *corev1.Pod) (int32, error)

func GetRequestMemorySize

func GetRequestMemorySize(container corev1.Container) int64

GetRequestMemorySize function description: if not Resource field, return 0 else Resources.Limits.memory

func GetUncachedObjects

func GetUncachedObjects() []client.Object

GetUncachedObjects returns a list of K8s objects, for these object types, and their list types, client.Reader will read directly from the API server instead of the cache, which may not be up-to-date. see sigs.k8s.io/controller-runtime/pkg/client/split.go to understand how client works with this UncachedObjects filter.

func GetVolumeMountByVolume

func GetVolumeMountByVolume(container *corev1.Container, volumeName string) *corev1.VolumeMount

func GetVolumeMountName

func GetVolumeMountName(volumes []corev1.Volume, resourceName string) *corev1.Volume

GetVolumeMountName function description: Find the volume of pod using name of cm

Case: When the configmap object of configuration is modified by user, we need to query whose volumeName

Return: The volume pointer of pod

func HandleCRDeletion

func HandleCRDeletion(reqCtx RequestCtx,
	r client.Writer,
	cr client.Object,
	finalizer string,
	deletionHandler func() (*ctrl.Result, error)) (*ctrl.Result, error)

HandleCRDeletion Handled CR deletion flow, will add finalizer if discovered a non-deleting object and remove finalizer during deletion process. Pass optional 'deletionHandler' func for external dependency deletion. Return Result pointer if required to return out of outer 'Reconcile' reconciliation loop.

func IgnoreIsAlreadyExists

func IgnoreIsAlreadyExists(err error) error

IgnoreIsAlreadyExists return errors that is not AlreadyExists

func InVolumeSnapshotV1Beta1

func InVolumeSnapshotV1Beta1() bool

func IsAvailable

func IsAvailable(pod *corev1.Pod, minReadySeconds int32) bool

func IsDelayedRequeueError added in v0.6.0

func IsDelayedRequeueError(err error) bool

func IsMatchConfigVersion

func IsMatchConfigVersion(obj client.Object, labelKey string, version string) bool

func IsNotFound

func IsNotFound(err error) bool

IsNotFound returns true if the specified error is the error type of ErrorTypeNotFound.

func IsTargetError

func IsTargetError(err error, errorType ErrorType) bool

IsTargetError checks if the error is the target error.

func ManagedByKubeBlocksFilterPredicate

func ManagedByKubeBlocksFilterPredicate(object client.Object) bool

ManagedByKubeBlocksFilterPredicate provides filter predicate for objects managed by kubeBlocks.

func NewDelayedRequeueError added in v0.6.0

func NewDelayedRequeueError(after time.Duration, reason string) error

NewDelayedRequeueError creates a delayed requeue error which only returns in the last step of the DAG.

func NewRequeueError added in v0.6.0

func NewRequeueError(after time.Duration, reason string) error

func PodIsControlledByLatestRevision

func PodIsControlledByLatestRevision(pod *corev1.Pod, sts *appsv1.StatefulSet) bool

PodIsControlledByLatestRevision checks if the pod is controlled by latest controller revision.

func PodIsReady

func PodIsReady(pod *corev1.Pod) bool

PodIsReady check the pod is ready

func PodIsReadyWithLabel

func PodIsReadyWithLabel(pod corev1.Pod) bool

PodIsReadyWithLabel checks whether pod is ready or not if the component is ConsensusSet or ReplicationSet, it will be available when the pod is ready and labeled with its role.

func Reconciled

func Reconciled() (reconcile.Result, error)

Reconciled returns an empty result with nil error to signal a successful reconcile to the controller manager

func RecordCreatedEvent

func RecordCreatedEvent(r record.EventRecorder, cr client.Object)

RecordCreatedEvent record an event when CR created successfully

func Requeue

func Requeue(logger logr.Logger, msg string, keysAndValues ...interface{}) (reconcile.Result, error)

func RequeueAfter

func RequeueAfter(duration time.Duration, logger logr.Logger, msg string, keysAndValues ...interface{}) (reconcile.Result, error)

func RequeueWithError

func RequeueWithError(err error, logger logr.Logger, msg string, keysAndValues ...interface{}) (reconcile.Result, error)

RequeueWithError requeue when an error occurs

func RequeueWithErrorAndRecordEvent

func RequeueWithErrorAndRecordEvent(obj client.Object, recorder record.EventRecorder, err error, logger logr.Logger) (reconcile.Result, error)

RequeueWithErrorAndRecordEvent requeue when an error occurs. if it is a not found error, send an event

func ResultToP

func ResultToP(res reconcile.Result, err error) (*reconcile.Result, error)

ResultToP converts a Result object to a pointer.

func SetOwnership

func SetOwnership(owner, obj client.Object, scheme *runtime.Scheme, finalizer string, useOwnerReference ...bool) error

SetOwnership provides helper function controllerutil.SetControllerReference/controllerutil.SetOwnerReference and controllerutil.AddFinalizer if not exists.

func ValidateReferenceCR

func ValidateReferenceCR(reqCtx RequestCtx, cli client.Client, obj client.Object,
	labelKey string, recordEvent func(), objLists ...client.ObjectList) (*ctrl.Result, error)

ValidateReferenceCR validate is exist referencing CRs. if exists, requeue reconcile after 30 seconds

func WorkloadFilterPredicate

func WorkloadFilterPredicate(object client.Object) bool

WorkloadFilterPredicate provides filter predicate for workload objects, i.e., deployment/statefulset/pod/pvc.

Types

type ByPodName

type ByPodName []corev1.Pod

ByPodName sorts a list of jobs by pod name

func (ByPodName) Len

func (c ByPodName) Len() int

Len return the length of byPodName, for the sort.Sort

func (ByPodName) Less

func (c ByPodName) Less(i, j int) bool

Less define how to compare items, for the sort.Sort

func (ByPodName) Swap

func (c ByPodName) Swap(i, j int)

Swap the items, for the sort.Sort

type CUEBuilder

type CUEBuilder struct {
	Value cue.Value
	// contains filtered or unexported fields
}

func NewCUEBuilder

func NewCUEBuilder(cueTpl CUETpl) CUEBuilder

func (*CUEBuilder) Fill

func (v *CUEBuilder) Fill(path string, jsonByte []byte) error

func (*CUEBuilder) FillObj

func (v *CUEBuilder) FillObj(path string, obj any) error

func (*CUEBuilder) FillRaw

func (v *CUEBuilder) FillRaw(path string, value interface{}) error

func (*CUEBuilder) Lookup

func (v *CUEBuilder) Lookup(path string) ([]byte, error)

type CUETpl

type CUETpl struct {
	Ctx   *cue.Context
	Value cue.Value
}

func NewCUETpl

func NewCUETpl(templateContents string) *CUETpl

func NewCUETplFromBytes

func NewCUETplFromBytes(b []byte, err error) (*CUETpl, error)

func NewCUETplFromPath

func NewCUETplFromPath(filePathString string) (*CUETpl, error)

type DelayedRequeueError added in v0.6.0

type DelayedRequeueError interface {
	RequeueError
	Delayed()
}

type Error

type Error struct {
	Type    ErrorType
	Message string
}

func NewBackupJobFailed

func NewBackupJobFailed(jobName string) *Error

NewBackupJobFailed returns a new Error with ErrorTypeBackupJobFailed.

func NewBackupNotSupported

func NewBackupNotSupported(backupType, backupPolicyName string) *Error

NewBackupNotSupported returns a new Error with ErrorTypeBackupNotSupported.

func NewBackupPVCNameIsEmpty

func NewBackupPVCNameIsEmpty(backupPolicyName string) *Error

NewBackupPVCNameIsEmpty returns a new Error with ErrorTypeBackupPVCNameIsEmpty.

func NewBackupPVTemplateNotFound

func NewBackupPVTemplateNotFound(cmName, cmNamespace string) *Error

NewBackupPVTemplateNotFound returns a new Error with ErrorTypeBackupPVTemplateNotFound.

func NewError

func NewError(errorType ErrorType, message string) *Error

func NewErrorf

func NewErrorf(errorType ErrorType, format string, a ...any) *Error

func NewNotFound

func NewNotFound(format string, a ...any) *Error

NewNotFound returns a new Error with ErrorTypeNotFound.

func ToControllerError

func ToControllerError(err error) *Error

ToControllerError converts the error to the Controller error.

func (*Error) Error

func (v *Error) Error() string

Error implements the error interface.

type ErrorType

type ErrorType string

ErrorType is explicit error type.

const (
	// ErrorWaitCacheRefresh waits for synchronization of the corresponding object cache in client-go from ApiServer.
	ErrorWaitCacheRefresh ErrorType = "WaitCacheRefresh"
	// ErrorTypeNotFound not found any resource.
	ErrorTypeNotFound ErrorType = "NotFound"

	ErrorTypeRequeue ErrorType = "Requeue" // requeue for reconcile.

	// ErrorType for backup
	ErrorTypeBackupNotSupported       ErrorType = "BackupNotSupported"       // this backup type not supported
	ErrorTypeBackupPVTemplateNotFound ErrorType = "BackupPVTemplateNotFound" // this pv template not found
	ErrorTypeBackupNotCompleted       ErrorType = "BackupNotCompleted"       // report backup not completed.
	ErrorTypeBackupPVCNameIsEmpty     ErrorType = "BackupPVCNameIsEmpty"     // pvc name for backup is empty
	ErrorTypeBackupJobFailed          ErrorType = "BackupJobFailed"          // backup job failed
	ErrorTypeStorageNotMatch          ErrorType = "ErrorTypeStorageNotMatch"
	ErrorTypeReconfigureFailed        ErrorType = "ErrorTypeReconfigureFailed"

	// ErrorType for cluster controller
	ErrorTypeBackupFailed ErrorType = "BackupFailed"
	ErrorTypeNeedWaiting  ErrorType = "NeedWaiting" // waiting for next reconcile

	// ErrorType for preflight
	ErrorTypePreflightCommon = "PreflightCommon"
	ErrorTypeSkipPreflight   = "SkipPreflight"
)

type RequestCtx

type RequestCtx struct {
	Ctx      context.Context
	Req      ctrl.Request
	Log      logr.Logger
	Recorder record.EventRecorder
}

RequestCtx wrapper for reconcile procedure context parameters

func (*RequestCtx) Event

func (r *RequestCtx) Event(object runtime.Object, eventtype, reason, message string)

Event is wrapper for Recorder.Event, if Recorder is nil, then it's no-op.

func (*RequestCtx) Eventf

func (r *RequestCtx) Eventf(object runtime.Object, eventtype, reason, messageFmt string, args ...interface{})

Eventf is wrapper for Recorder.Eventf, if Recorder is nil, then it's no-op.

func (*RequestCtx) UpdateCtxValue

func (r *RequestCtx) UpdateCtxValue(key, val any) context.Context

UpdateCtxValue update Context value, return parent Context.

func (*RequestCtx) WithValue

func (r *RequestCtx) WithValue(key, val any) context.Context

WithValue returns a copy of parent in which the value associated with key is val.

type RequeueError added in v0.6.0

type RequeueError interface {
	RequeueAfter() time.Duration
	Reason() string
}

type Task

type Task struct {
	Type         TaskType
	SubTasks     []Task
	PreFunction  TaskFunction
	ExecFunction TaskFunction
	PostFunction TaskFunction
	Context      map[string]interface{}
}

func NewTask

func NewTask() Task

func (*Task) Exec

func (t *Task) Exec(ctx RequestCtx, cli client.Client) error

type TaskFunction

type TaskFunction func(RequestCtx, client.Client, interface{}) error

TaskFunction REVIEW (cx): using interface{} is rather error-prone

type TaskType

type TaskType string
const (
	TaskTypeSerial   TaskType = "serial"
	TaskTypeParallel TaskType = "parallel"
)

type VolumeSnapshotCompatClient

type VolumeSnapshotCompatClient struct {
	client.Client
	roclient.ReadonlyClient
	Ctx context.Context
}

VolumeSnapshotCompatClient client is compatible both VolumeSnapshot v1 and v1beta1

func (*VolumeSnapshotCompatClient) CheckResourceExists

func (c *VolumeSnapshotCompatClient) CheckResourceExists(key client.ObjectKey, obj *snapshotv1.VolumeSnapshot) (bool, error)

CheckResourceExists checks whether resource exist or not.

func (*VolumeSnapshotCompatClient) Create

func (*VolumeSnapshotCompatClient) Delete

func (*VolumeSnapshotCompatClient) Get

func (*VolumeSnapshotCompatClient) List

func (*VolumeSnapshotCompatClient) Patch

Jump to

Keyboard shortcuts

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