util

package
v4.0.0-...-1d6235c Latest Latest
Warning

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

Go to latest
Published: Dec 9, 2024 License: Apache-2.0 Imports: 41 Imported by: 0

Documentation

Index

Constants

View Source
const (
	StorageClassDriverNamePrefix = "openshift-storage"
	RbdDriverName                = StorageClassDriverNamePrefix + ".rbd.csi.ceph.com"
	CephFSDriverName             = StorageClassDriverNamePrefix + ".cephfs.csi.ceph.com"
	NfsDriverName                = StorageClassDriverNamePrefix + ".nfs.csi.ceph.com"
	ObcDriverName                = StorageClassDriverNamePrefix + ".ceph.rook.io/bucket"
)
View Source
const (
	// EventReasonValidationFailed is used when the StorageCluster spec validation fails
	EventReasonValidationFailed = "FailedValidation"

	// EventReasonUninstallPending is used when the StorageCluster uninstall is Pending
	EventReasonUninstallPending = "UninstallPending"
)
View Source
const (
	// WatchNamespaceEnvVar is the constant for env variable WATCH_NAMESPACE
	// which is the namespace where the watch activity happens.
	// this value is empty if the operator is running with clusterScope.
	WatchNamespaceEnvVar = "WATCH_NAMESPACE"

	// PodNamespaceEnvVar is the env variable for the pod namespace
	PodNamespaceEnvVar = "POD_NAMESPACE"

	// SingleNodeEnvVar is set if StorageCluster needs to be deployed on a single node
	SingleNodeEnvVar = "SINGLE_NODE"

	// This configmap is purely for the OCS operator to use.
	OcsOperatorConfigName = "ocs-operator-config"

	// This configmap is watched by rook-ceph-operator & is reserved only for manual overrides.
	RookCephOperatorConfigName = "rook-ceph-operator-config"

	// These are the keys in the ocs-operator-config configmap
	ClusterNameKey              = "CSI_CLUSTER_NAME"
	RookCurrentNamespaceOnlyKey = "ROOK_CURRENT_NAMESPACE_ONLY"
	EnableTopologyKey           = "CSI_ENABLE_TOPOLOGY"
	TopologyDomainLabelsKey     = "CSI_TOPOLOGY_DOMAIN_LABELS"
	EnableNFSKey                = "ROOK_CSI_ENABLE_NFS"
	DisableCSIDriverKey         = "ROOK_CSI_DISABLE_DRIVER"

	// This is the name for the FieldIndex
	OwnerUIDIndexName   = "ownerUID"
	AnnotationIndexName = "annotation"

	OdfInfoNamespacedNameClaimName      = "odfinfo.odf.openshift.io"
	ExitCodeThatShouldRestartTheProcess = 42

	//ForbidMirroringLabel is used to forbid mirroring for ceph resources such as CephBlockPool
	ForbidMirroringLabel                 = "ocs.openshift.io/forbid-mirroring"
	BlockPoolMirroringTargetIDAnnotation = "ocs.openshift.io/mirroring-target-id"
	RequestMaintenanceModeAnnotation     = "ocs.openshift.io/request-maintenance-mode"
	CephRBDMirrorName                    = "cephrbdmirror"
	OcsClientTimeout                     = 10 * time.Second
	StorageClientMappingConfigName       = "storage-client-mapping"
)
View Source
const (
	// ExternalClusterConnectingReason indicates the storage cluster is trying to connect to an external one.
	ExternalClusterConnectingReason = "ExternalClusterStateConnecting"
	// ExternalClusterUnknownReason is for unknown cluster condition/state
	ExternalClusterUnknownReason = "ExternalClusterStateUnknownCondition"
	// ExternalClusterErrorReason indicates an error state
	ExternalClusterErrorReason = "ExternalClusterStateError"
	// VersionValidReason indicates version in SC CR and operator is equal
	VersionValidReason = "VersionMatched"
)
View Source
const OperatorNamespaceEnvVar = "OPERATOR_NAMESPACE"

OperatorNamespaceEnvVar is the constant for env variable OPERATOR_NAMESPACE which is the namespace where operator pod is deployed.

Variables

View Source
var (
	// PhaseIgnored is used when a resource is ignored
	PhaseIgnored = "Ignored"
	// PhaseProgressing is used when SetProgressingCondition is called
	PhaseProgressing = "Progressing"
	// PhaseError is used when SetErrorCondition is called
	PhaseError = "Error"
	// PhaseReady is used when SetCompleteCondition is called
	PhaseReady = "Ready"
	// PhaseNotReady is used when waiting for system to be ready
	// after reconcile is successful
	PhaseNotReady = "Not Ready"
	// PhaseClusterExpanding is used when cluster is expanding capacity
	PhaseClusterExpanding = "Expanding Capacity"
	// PhaseDeleting is used when cluster is deleting
	PhaseDeleting = "Deleting"
	// PhaseConnecting is used when cluster is connecting to external cluster
	PhaseConnecting = "Connecting"
	// PhaseOnboarding is used when consumer is Onboarding
	PhaseOnboarding = "Onboarding"
)

These constants represent the overall Phase as used by .Status.Phase

Functions

func AddAnnotation

func AddAnnotation(obj metav1.Object, key string, value string) bool

func AddLabel

func AddLabel(obj metav1.Object, key string, value string) bool

func AnnotationIndexFieldFunc

func AnnotationIndexFieldFunc(obj client.Object) []string

func AssertEqual

func AssertEqual[T comparable](actual T, expected T, exitCode int)

func CalculateMD5Hash

func CalculateMD5Hash(value any) string

func ComposePredicates

func ComposePredicates(predicates ...predicate.Predicate) predicate.Predicate

ComposePredicates will compose a variable number of predicates and return a predicate that will allow events that are allowed by any of the given predicates.

func DetectDuplicateInStringSlice

func DetectDuplicateInStringSlice(slice []string) bool

func EventTypePredicate

func EventTypePredicate(create, update, del, generic bool) predicate.Predicate

EventTypePredicate return a predicate to filter events based on their respective event type. This helper allows for the selection of multiple types resulting in a predicate that can filter in more than a single event type

func Find

func Find[T any](list []T, f func(item *T) bool) *T

Find returns the first entry matching the function "f" or else return nil

func FindOwnerRefByKind

func FindOwnerRefByKind(obj client.Object, kind string) *v1.OwnerReference

func FnvHash

func FnvHash(s string) uint32

fnv64a is a 64-bit non-cryptographic hash algorithm with a low collision and a high distribution rate. https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function

func GenerateClientOnboardingToken

func GenerateClientOnboardingToken(tokenLifetimeInHours int, privateKeyPath string, storageQuotainGib *uint, storageClusterUID types.UID) (string, error)

GenerateClientOnboardingToken generates a ocs-client token valid for a duration of "tokenLifetimeInHours". The token content is predefined and signed by the private key which'll be read from supplied "privateKeyPath". The storageQuotaInGiB is optional, and it is used to limit the storage of PVC in the application cluster.

func GenerateNameForNonResilientCephBlockPoolSC

func GenerateNameForNonResilientCephBlockPoolSC(initData *ocsv1.StorageCluster) string

func GeneratePeerOnboardingToken

func GeneratePeerOnboardingToken(tokenLifetimeInHours int, privateKeyPath string, storageClusterUID types.UID) (string, error)

GeneratePeerOnboardingToken generates a ocs-peer token valid for a duration of "tokenLifetimeInHours". The token content is predefined and signed by the private key which'll be read from supplied "privateKeyPath".

func GetCephFSKernelMountOptions

func GetCephFSKernelMountOptions(sc *ocsv1.StorageCluster) string

GetCephFSKernelMountOptions returns the kernel mount options for CephFS based on the spec on the StorageCluster

func GetClusterID

func GetClusterID(ctx context.Context, kubeClient client.Client, logger *logr.Logger) string

getClusterID returns the cluster ID of the OCP-Cluster

func GetCountOfRunningPods

func GetCountOfRunningPods(podList *corev1.PodList) int

getCountOfRunningPods gives the count of pods in running state in a given pod list

func GetKeyRotationSpec

func GetKeyRotationSpec(sc *ocsv1.StorageCluster) (bool, string)

func GetOperatorNamespace

func GetOperatorNamespace() (string, error)

GetOperatorNamespace returns the namespace where the operator is deployed.

func GetPGBaseUnitSize

func GetPGBaseUnitSize(osdCount int) int

func GetPodNamespace

func GetPodNamespace() string

GetPodNamespace returns the namespace where the pod is deployed

func GetPodsWithLabels

func GetPodsWithLabels(ctx context.Context, kubeClient client.Client, namespace string, labelSelector map[string]string) (*corev1.PodList, error)

GetPodsWithLabels gives all the pods that are in a namespace after filtering them based on the given label selector

func GetReadAffinityOptions

func GetReadAffinityOptions(sc *ocsv1.StorageCluster) rookCephv1.ReadAffinitySpec

getReadAffinityyOptions returns the read affinity options based on the spec on the StorageCluster.

func GetStorageClassWithName

func GetStorageClassWithName(ctx context.Context, kubeClient client.Client, name string) *storagev1.StorageClass

GetStorageClassWithName returns the storage class object by name

func GetStorageClusterInNamespace

func GetStorageClusterInNamespace(ctx context.Context, cl client.Client, namespace string) (*ocsv1.StorageCluster, error)

func GetWatchNamespace

func GetWatchNamespace() (string, error)

GetWatchNamespace returns the namespace the operator should be watching for changes

func IsClusterOrDeviceSetEncrypted

func IsClusterOrDeviceSetEncrypted(sc *ocsv1.StorageCluster) bool

func IsSingleNodeDeployment

func IsSingleNodeDeployment() bool

IsSingleNodeDeployment returns true if StorageCluster needs to be deployed on a single node.

func MapCephClusterNegativeConditions

func MapCephClusterNegativeConditions(conditions *[]conditionsv1.Condition, found *cephv1.CephCluster)

MapCephClusterNegativeConditions maps the status states from CephCluster resource into ocs status conditions. This will only look for negative conditions: !Available, Degraded, Progressing

func MapCephClusterNoConditions

func MapCephClusterNoConditions(conditions *[]conditionsv1.Condition, reason string, message string)

MapCephClusterNoConditions sets status conditions to progressing. Used when component operator isn't reporting any status, and we have to assume progress.

func MapExternalCephClusterNegativeConditions

func MapExternalCephClusterNegativeConditions(conditions *[]conditionsv1.Condition, found *cephv1.CephCluster)

MapExternalCephClusterNegativeConditions maps the status states from CephCluster resource into ocs status conditions. This will only look for negative conditions: !Available, Degraded, Progressing

func MapNoobaaNegativeConditions

func MapNoobaaNegativeConditions(conditions *[]conditionsv1.Condition, found *nbv1.NooBaa)

MapNoobaaNegativeConditions records noobaa related conditions This will only look for negative conditions: !Available, Degraded, Progressing

func NamePredicate

func NamePredicate(name string) predicate.Predicate

Name Predicate return a predicate the filter events produced by resources that matches the given name

func NewK8sClient

func NewK8sClient(scheme *runtime.Scheme) (client.Client, error)

func OwnersIndexFieldFunc

func OwnersIndexFieldFunc(obj client.Object) []string

func RemoveDuplicatesFromStringSlice

func RemoveDuplicatesFromStringSlice(slice []string) []string

func RemoveExternalCephClusterNegativeConditions

func RemoveExternalCephClusterNegativeConditions(conditions *[]conditionsv1.Condition)

RemoveExternalCephClusterNegativeConditions removes the External cluster negative conditions

func RestartPod

func RestartPod(ctx context.Context, kubeClient client.Client, logger *logr.Logger, name string, namespace string)

RestartPod restarts the pod with the given name in the given namespace by deleting it and letting another one be created

func SetCompleteCondition

func SetCompleteCondition(conditions *[]conditionsv1.Condition, reason string, message string)

SetCompleteCondition sets the ConditionReconcileComplete to True and other Conditions to indicate that the reconciliation process has completed successfully.

func SetErrorCondition

func SetErrorCondition(conditions *[]conditionsv1.Condition, reason string, message string)

SetErrorCondition sets the ConditionReconcileComplete to False in case of any errors during the reconciliation process.

func SetProgressingCondition

func SetProgressingCondition(conditions *[]conditionsv1.Condition, reason string, message string)

SetProgressingCondition sets the ProgressingCondition to True and other conditions to false or Unknown. Used when we are just starting to reconcile, and there are no existing conditions.

func SetVersionMismatchCondition

func SetVersionMismatchCondition(conditions *[]conditionsv1.Condition, status corev1.ConditionStatus, reason string, message string)

SetVersionMismatchCondition sets the ConditionVersionMismatch to the status passed as argument, if the same status is not already present

Types

type Clusters

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

func GetClusters

func GetClusters(ctx context.Context, cli client.Client) (*Clusters, error)

func (*Clusters) AreOtherStorageClustersReady

func (c *Clusters) AreOtherStorageClustersReady(instance *ocsv1.StorageCluster) bool

AreOtherStorageClustersReady checks if all other storage clusters (internal and external) are ready.

func (*Clusters) GetExternalStorageClusters

func (c *Clusters) GetExternalStorageClusters() []ocsv1.StorageCluster

func (*Clusters) GetInternalStorageClusters

func (c *Clusters) GetInternalStorageClusters() []ocsv1.StorageCluster

func (*Clusters) GetNames

func (c *Clusters) GetNames() []string

func (*Clusters) GetNamespacedNames

func (c *Clusters) GetNamespacedNames() []string

func (*Clusters) GetNamespaces

func (c *Clusters) GetNamespaces() []string

func (*Clusters) GetStorageClusters

func (c *Clusters) GetStorageClusters() []ocsv1.StorageCluster

func (*Clusters) GetStorageClustersInNamespace

func (c *Clusters) GetStorageClustersInNamespace(namespace string) []ocsv1.StorageCluster

func (*Clusters) HasMultipleStorageClustersInNamespace

func (c *Clusters) HasMultipleStorageClustersInNamespace(namespace string) bool

func (*Clusters) HasMultipleStorageClustersWithSameName

func (c *Clusters) HasMultipleStorageClustersWithSameName(name string) bool

func (*Clusters) IsExternalStorageClusterExist

func (c *Clusters) IsExternalStorageClusterExist() bool

func (*Clusters) IsInternalAndExternalStorageClustersExist

func (c *Clusters) IsInternalAndExternalStorageClustersExist() bool

func (*Clusters) IsInternalStorageClusterExist

func (c *Clusters) IsInternalStorageClusterExist() bool

type EventReporter

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

EventReporter is custom events reporter type which allows user to limit the events

func NewEventReporter

func NewEventReporter(recorder record.EventRecorder) *EventReporter

NewEventReporter returns EventReporter object

func (*EventReporter) ReportIfNotPresent

func (rep *EventReporter) ReportIfNotPresent(instance runtime.Object, eventType, eventReason, msg string)

ReportIfNotPresent will report event if lastReportedEvent is not the same in last 60 minutes

type MetadataChangedPredicate

type MetadataChangedPredicate struct {
	predicate.Funcs
}

MetadataChangedPredicate will only allow events that changed labels, annotations, or finalizers

func (MetadataChangedPredicate) Update

Update implements the update event trap for StorageClusterChangedPredicate

Jump to

Keyboard shortcuts

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