util

package
v0.0.0-...-4563fb3 Latest Latest
Warning

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

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

Documentation

Overview

NOTE: Added to skip creating shadow manifests for localSecret struct +kubebuilder:skip

Index

Constants

View Source
const (
	// do not delete the vs in a vgs, only for testing
	SkipDeleteAnnotaion = "rgd.ramendr.openshift.io/do-not-delete"

	RGDOwnerLabel        = "ramendr.openshift.io/rgd"
	RGSOwnerLabel string = "ramendr.openshift.io/rgs"
)
View Source
const (

	// EventReasonValidationFailed is used when VolumeReplicationGroup validation fails
	EventReasonValidationFailed = "FailedValidation"

	// EventReasonPVCListFailed is used when VRG fails to get the list of PVCs
	EventReasonPVCListFailed = "PVCListFailed"

	// EventReasonVRCreateFailed is used when VRG fails to create VolRep resource
	EventReasonVRCreateFailed = "VRCreateFailed"

	// EventReasonVRCreateFailed is used when VRG fails to update VolRep resource
	EventReasonVRUpdateFailed = "VRUpdateFailed"

	// EventReasonProtectPVCFailed is used when VRG fails to protect PVC
	EventReasonProtectPVCFailed = "ProtectPVCFailed"

	// EventReasonUploadFailed is used when VRG fails to upload PV cluster data
	EventReasonUploadFailed = "UploadFailed"

	// EventReasonVrgUploadFailed is used when VRG fails to upload VRG object
	EventReasonVrgUploadFailed = "VrgUploadFailed"

	// EventReasonPrimarySuccess is an event generated when VRG is successfully
	// processed as Primary.
	EventReasonPrimarySuccess = "PrimaryVRGProcessSuccess"

	// EventReasonSecondarySuccess is an event generated when VRG is successfully
	// processed as Primary.
	EventReasonSecondarySuccess = "SecondaryVRGProcessSuccess"

	// EventReasonSecondarySuccess is an event generated when VRG is successfully
	// processed as Primary.
	EventReasonDeleteSuccess = "VRGDeleteSuccess"

	// EventReasonDeploying is generated when DRPC begins to deploy ramen manged cluster
	// component(s) and the application
	EventReasonDeploying = "DRPCDeploying"

	// EventReasonDeployFail is an event generated when DRPC fails to do
	// a successful initial deployment of the application and ramen managed
	// cluster component(s)
	EventReasonDeployFail = "DRPCDeployFailed"

	// EventReasonDeploySuccess is an event generated when DRPC successfully
	// deploys ramen and the application in the managed cluster initially
	EventReasonDeploySuccess = "DRPCDeploySuccess"

	// EventReasonFailingOver is an event generated when DRPC starts the failover
	// process
	EventReasonFailingOver = "DRPCFailingOver"

	// EventReasonFailoverSuccess is an evenet generated when DRPC does a successful
	// failover
	EventReasonFailoverSuccess = "DRPCFailoverSuccess"

	// EventReasonRelocating is an event generated when DRPC starts relocating
	EventReasonRelocating = "DRPCRelocating"

	// EventReasonRelocationSuccess is an event generated when DRPC successfully
	// relocates an application along with ramen managed cluster component(s)
	EventReasonRelocationSuccess = "DRPCRelocationSuccess"

	// EventReasonSwitchFailed is generated when DRPC fails to switch the cluster
	// where the app is placed
	EventReasonSwitchFailed = "DRPCClusterSwitchFailed"
)
View Source
const (
	MModesLabel             = "ramendr.openshift.io/maintenancemodes"
	SClassLabel             = "ramendr.openshift.io/storageclass"
	VSClassLabel            = "ramendr.openshift.io/volumesnapshotclass"
	VRClassLabel            = "ramendr.openshift.io/volumereplicationclass"
	ExcludeFromVeleroBackup = "velero.io/exclude-from-backup"
)
View Source
const (
	// Prefixes for various ClusterClaims
	CCSCPrefix  = "storage.class"
	CCVSCPrefix = "snapshot.class"
	CCVRCPrefix = "replication.class"
)
View Source
const (
	OCMBackupLabelKey   string = "cluster.open-cluster-management.io/backup"
	OCMBackupLabelValue string = "ramen"

	IsCGEnabledAnnotation = "drplacementcontrol.ramendr.openshift.io/is-cg-enabled"

	// When this annotation is set to true, VolSync will protect RBD PVCs.
	UseVolSyncAnnotation = "drplacementcontrol.ramendr.openshift.io/use-volsync-for-pvc-protection"
)
View Source
const (
	DrClusterManifestWorkName = "ramen-dr-cluster"

	// ManifestWorkNameFormat is a formated a string used to generate the manifest name
	// The format is name-namespace-type-mw where:
	// - name is the DRPC name
	// - namespace is the DRPC namespace
	// - type is "vrg"
	ManifestWorkNameFormat             string = "%s-%s-%s-mw"
	ManifestWorkNameFormatClusterScope string = "%s-%s-mw"
	ManifestWorkNameTypeFormat         string = "%s-mw"

	// ManifestWork Types
	MWTypeVRG       string = "vrg"
	MWTypeNS        string = "ns"
	MWTypeNF        string = "nf"
	MWTypeMMode     string = "mmode"
	MWTypeSClass    string = "sc"
	MWTypeVSClass   string = "vsc"
	MWTypeVRClass   string = "vrc"
	MWTypeDRCConfig string = "drcconfig"
)
View Source
const (
	CreatedByLabelKey          = "app.kubernetes.io/created-by"
	CreatedByLabelValueVolSync = "volsync"

	PodVolumePVCClaimIndexName    string = "spec.volumes.persistentVolumeClaim.claimName"
	VolumeAttachmentToPVIndexName string = "spec.source.persistentVolumeName"
)
View Source
const (

	//nolint:lll
	// See: https://github.com/stolostron/rhacm-docs/blob/2.4_stage/governance/custom_template.adoc#special-annotation-for-reprocessing
	PolicyTriggerAnnotation = "policy.open-cluster-management.io/trigger-update"

	// Finalizer on the secret
	SecretPolicyFinalizer string = "drpolicies.ramendr.openshift.io/policy-protection"

	VeleroSecretKeyNameDefault = "ramengenerated"
)
View Source
const (
	LastEventValidDuration = 10
)

This implementation of events infrastructure is mainly based on the way events is handled in the ocs-operator. https://github.com/openshift/ocs-operator/blob/master/controllers/util/events.go

Variables

This section is empty.

Functions

func AddAnnotation

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

func AddFinalizer

func AddFinalizer(obj client.Object, finalizer string) bool

func AddLabel

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

func AddOwnerReference

func AddOwnerReference(obj, owner metav1.Object, scheme *runtime.Scheme) (bool, error)

func BuildManagedClusterViewName

func BuildManagedClusterViewName(resourceName, resourceNamespace, resource string) string

outputs a string for use in creating a ManagedClusterView name example: when looking for a vrg with name 'demo' in the namespace 'ramen', input: ("demo", "ramen", "vrg") this will give output "demo-ramen-vrg-mcv"

func CheckImagesReadyToUse

func CheckImagesReadyToUse(
	ctx context.Context, k8sClient client.Client,
	latestImages map[string]*corev1.TypedLocalObjectReference,
	namespace string,
	log logr.Logger,
) (bool, error)

func CleanExpiredRDImages

func CleanExpiredRDImages(ctx context.Context,
	k8sClient client.Client, rgd *ramendrv1alpha1.ReplicationGroupDestination,
) error

func ClusterScopedResourceNameFromMCVName

func ClusterScopedResourceNameFromMCVName(mcvName string) string

func ConditionAppend

func ConditionAppend(
	object metav1.Object,
	conditions *[]metav1.Condition,
	conditionType string,
	status metav1.ConditionStatus,
	reason,
	message string,
)

func ConditionUpdate

func ConditionUpdate(
	object metav1.Object,
	condition *metav1.Condition,
	status metav1.ConditionStatus,
	reason,
	message string,
)

func CreateNamespaceIfNotExists

func CreateNamespaceIfNotExists(ctx context.Context, k8sClient client.Client, namespace string) error

func CreateRamenOpsNamespace

func CreateRamenOpsNamespace(ctx context.Context, k8sClient client.Client, ramenconfig *rmn.RamenConfig) error

func DRPolicyClusterNames

func DRPolicyClusterNames(drpolicy *rmn.DRPolicy) []string

func DRPolicyClusterNamesAsASet

func DRPolicyClusterNamesAsASet(drpolicy *rmn.DRPolicy) sets.String

func DRPolicyS3Profiles

func DRPolicyS3Profiles(drpolicy *rmn.DRPolicy, drclusters []rmn.DRCluster) sets.String

func DeferDeleteImage

func DeferDeleteImage(ctx context.Context,
	k8sClient client.Client, imageName, imageNamespace, rgdName string,
) error

func DeletePVC

func DeletePVC(ctx context.Context,
	k8sClient client.Client,
	pvcName, namespace string,
	log logr.Logger,
) error

func DeleteReplicationGroupDestination

func DeleteReplicationGroupDestination(
	ctx context.Context, k8sClient client.Client,
	replicationGroupDestinationName, replicationGroupDestinationNamespace string,
) error

func DeleteReplicationGroupSource

func DeleteReplicationGroupSource(
	ctx context.Context, k8sClient client.Client,
	replicationGroupSourceName, replicationGroupSourceNamespace string,
) error

func DrpolicyContainsDrcluster

func DrpolicyContainsDrcluster(drpolicy *rmn.DRPolicy, drcluster string) bool

func DrpolicyRegionNames

func DrpolicyRegionNames(drpolicy *rmn.DRPolicy, drClusters []rmn.DRCluster) []string

func DrpolicyRegionNamesAsASet

func DrpolicyRegionNamesAsASet(drpolicy *rmn.DRPolicy, drClusters []rmn.DRCluster) sets.String

func DrpolicyValidated

func DrpolicyValidated(drpolicy *rmn.DRPolicy) error

func EvaluateCheckHook

func EvaluateCheckHook(k8sClient client.Client, hook *kubeobjects.HookSpec, log logr.Logger) (bool, error)

func EvaluateCheckHookExp

func EvaluateCheckHookExp(booleanExpression string, jsonData interface{}) (bool, error)

func ExtractDRCConfigFromManifestWork

func ExtractDRCConfigFromManifestWork(mw *ocmworkv1.ManifestWork) (*rmn.DRClusterConfig, error)

func ExtractMModeFromManifestWork

func ExtractMModeFromManifestWork(mw *ocmworkv1.ManifestWork) (*rmn.MaintenanceMode, error)

func ExtractResourceFromManifestWork

func ExtractResourceFromManifestWork(
	mw *ocmworkv1.ManifestWork,
	object client.Object,
	gvk schema.GroupVersionKind,
) error

func ExtractVRGFromManifestWork

func ExtractVRGFromManifestWork(mw *ocmworkv1.ManifestWork) (*rmn.VolumeReplicationGroup, error)

func GeneratePolicyName

func GeneratePolicyName(name string, maxLen int) string

GeneratePolicyName generates a policy name by combining the word "vs-secret-" with the name. However, if the length of the passed-in name is less than or equal to the 'maxLen', the passed-in name is returned as-is.

If the passed-in name and the namespace length exceeds 'maxLen', a unique hash of the passed-in name is computed using MD5 prepended to it "vs-secret-". If this combined name still exceeds 'maxLen', it is trimmed to fit within the limit by removing characters from the end of the hash up to maxLen.

Parameters:

potentialPolicyName: The preferred name of the policy.
namespace: The namespace associated with the policy.
maxLen: The maximum length of the generated name

Returns:

"vs-secret" + the generated name, which is either the passed-in name or a modified version that fits
  within the allowed length.

func GeneratePolicyResourceNames

func GeneratePolicyResourceNames(
	secret string,
	format TargetSecretFormat,
) (policyName, plBindingName, plRuleName, configPolicyName string)

GeneratePolicyResourceNames returns names (in order) for policy resources that are created, policyName: Name of the policy plBindingName: Name of the PlacementBinding that ties a Policy to a PlacementRule plRuleName: Name of the PlacementRule configPolicyName: Name of the ConfigurationPolicy resource embedded within the Policy

func GenerateVeleroSecretName

func GenerateVeleroSecretName(sName string) string

func GenericStatusConditionSet

func GenericStatusConditionSet(
	object client.Object,
	conditions *[]metav1.Condition,
	conditionType string,
	status metav1.ConditionStatus,
	reason, message string,
	log logr.Logger,
) bool

func GetAllDRPolicies

func GetAllDRPolicies(ctx context.Context, client client.Reader) (rmn.DRPolicyList, error)

func GetPVC

func GetPVC(ctx context.Context, k8sClient client.Client, pvcNamespacedName types.NamespacedName,
) (*corev1.PersistentVolumeClaim, error)

func GetRawExtension

func GetRawExtension(
	manifests []ocmworkv1.Manifest,
	gvk schema.GroupVersionKind,
) (*runtime.RawExtension, error)

func GetSecondsFromSchedulingInterval

func GetSecondsFromSchedulingInterval(drpolicy *rmn.DRPolicy) (float64, error)

func GetVolumeGroupSnapshotClassFromPVCsStorageClass

func GetVolumeGroupSnapshotClassFromPVCsStorageClass(
	ctx context.Context,
	k8sClient client.Client,
	volumeGroupSnapshotClassSelector metav1.LabelSelector,
	pvcsConsistencyGroupSelector metav1.LabelSelector,
	namespace string,
	logger logr.Logger,
) (string, error)

func GetVolumeGroupSnapshotClasses

func GetVolumeGroupSnapshotClasses(
	ctx context.Context,
	k8sClient client.Client,
	volumeGroupSnapshotClassSelector metav1.LabelSelector,
) ([]groupsnapv1alpha1.VolumeGroupSnapshotClass, error)

func HasLabel

func HasLabel(obj client.Object, key string) bool

func HasLabelWithValue

func HasLabelWithValue(obj client.Object, key string, value string) bool

func IndexFieldsForVSHandler

func IndexFieldsForVSHandler(ctx context.Context, fieldIndexer client.FieldIndexer) error

VSHandler will either look at VolumeAttachments or pods to determine if a PVC is mounted To do this, it requires an index on pods and volumeattachments to keep track of persistent volume claims mounted

func IsCGEnabled

func IsCGEnabled(annotations map[string]string) bool

func IsManifestInAppliedState

func IsManifestInAppliedState(mw *ocmworkv1.ManifestWork) bool

func IsPVAttachedToNode

func IsPVAttachedToNode(ctx context.Context,
	k8sClient client.Client,
	log logr.Logger,
	pvc *corev1.PersistentVolumeClaim,
) (bool, error)

For CSI drivers that support it, volume attachments will be created for the PV to indicate which node they are attached to. If a volume attachment exists, then we know the PV may not be ready to have a final replication sync performed (I/Os may still not be completely written out). This is a best-effort, as some CSI drivers may not support volume attachments (CSI driver Spec.AttachRequired: false) in this case, we won't find a volumeattachment and will just assume the PV is not in use anymore.

func IsPVCInUseByPod

func IsPVCInUseByPod(ctx context.Context,
	k8sClient client.Client,
	log logr.Logger,
	pvcNamespacedName types.NamespacedName,
	inUsePodMustBeReady bool,
) (bool, error)

IsPVCInUseByPod determines if there are any pod resources that reference the pvcName in the current pvcNamespace and returns true if found. Further if inUsePodMustBeReady is true, returns true only if the pod is in Ready state. TODO: Should we trust the cached list here, or fetch it from the API server?

func IsPVCMarkedForVolSync

func IsPVCMarkedForVolSync(annotations map[string]string) bool

func IsReplicationGroupDestinationReady

func IsReplicationGroupDestinationReady(
	ctx context.Context, k8sClient client.Client,
	rgd *ramendrv1alpha1.ReplicationGroupDestination,
) (bool, error)

func IsValidJSONPathExpression

func IsValidJSONPathExpression(expr string) bool

func ListPVCsByPVCSelector

func ListPVCsByPVCSelector(
	ctx context.Context,
	k8sClient client.Client,
	logger logr.Logger,
	pvcLabelSelector metav1.LabelSelector,
	namespaces []string,
	volSyncDisabled bool,
) (*corev1.PersistentVolumeClaimList, error)

func ManifestWorkName

func ManifestWorkName(name, namespace, mwType string) string

func MapCopy

func MapCopy[M ~map[K]V, K, V comparable](src M, dst *M) bool

Copies src's key-value pairs into dst. Or, if dst is nil, assigns src to dst. Returns whether dst changes.

func MapCopyF

func MapCopyF[M ~map[K]V, K, V comparable](src M, dstGet func() M, dstSet func(M)) bool

func MapDelete

func MapDelete[M ~map[K]V, K, V comparable](src M, dst *M) bool

Deletes any key-value pairs from dst that are in src. Returns whether dst changes.

func MapDeleteF

func MapDeleteF[M ~map[K]V, K, V comparable](src M, dstGet func() M, dstSet func(M)) bool

func MapDoF

func MapDoF[M ~map[K]V, K, V comparable, R any](src M, dstGet func() M, dstSet func(M), mapDo func(M, *M) R) R

func MergeConditions

func MergeConditions(
	conditionSet func(*[]metav1.Condition, metav1.Condition),
	conditions *[]metav1.Condition,
	ignoreReasons []string,
	subConditions ...*metav1.Condition,
)

MergeConditions merges VRG conditions of the same type to generate a single condition for the Type

func Namespace

func Namespace(name string) *corev1.Namespace

func ObjectLabelsDelete

func ObjectLabelsDelete(object metav1.Object, labels map[string]string) bool

func ObjectLabelsDo

func ObjectLabelsDo[T any](object metav1.Object, labels map[string]string,
	do func(map[string]string, func() map[string]string, func(map[string]string)) T,
) T

func ObjectLabelsSet

func ObjectLabelsSet(object metav1.Object, labels map[string]string) bool

func ObjectMetaEmbedded

func ObjectMetaEmbedded(objectMeta *metav1.ObjectMeta) metav1.ObjectMeta

func ObjectOwnerSet

func ObjectOwnerSet(object, owner metav1.Object) bool

func ObjectOwnerUnsetIfSet

func ObjectOwnerUnsetIfSet(object, owner metav1.Object) bool

func ObjectsMap

func ObjectsMap[
	ObjectType any,
	ClientObject interface {
		*ObjectType
		client.Object
	},
](
	objects ...ObjectType,
) map[client.ObjectKey]ObjectType

func OptionalEqual

func OptionalEqual(a, b string) bool

OptionalEqual returns True if optional field values are equal, or one of them is unset.

func OwnerNamespaceNameAndName

func OwnerNamespaceNameAndName(labels Labels) (string, string, bool)

func OwnerNamespacedName

func OwnerNamespacedName(owner metav1.Object) types.NamespacedName

func OwnsAcrossNamespaces

func OwnsAcrossNamespaces(
	builder *builder.Builder,
	scheme *runtime.Scheme,
	object client.Object,
	opts ...builder.WatchesOption,
) *builder.Builder

func ProtectedPVCNamespacedName

func ProtectedPVCNamespacedName(pvc ramen.ProtectedPVC) types.NamespacedName

func QueryJSONPath

func QueryJSONPath(data interface{}, jsonPath string) (reflect.Value, error)

func ReportIfNotPresent

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

ReportIfNotPresent will report event if lastReportedEvent is not the same in last 10 minutes TODO: The duration 10 minutes can be changed to some other value if necessary

func ResourceIsDeleted

func ResourceIsDeleted(obj client.Object) bool

Return true if resource was marked for deletion.

func SecretFinalizer

func SecretFinalizer(format TargetSecretFormat) string

func TrimToK8sResourceNameLength

func TrimToK8sResourceNameLength(name string) string

func UpdateLabel

func UpdateLabel(obj client.Object, key, newValue string) bool

func UpdateStringMap

func UpdateStringMap(dst *map[string]string, src map[string]string)

UpdateStringMap copies all key/value pairs in src adding them to map referenced by the dst pointer. When a key in src is already present in dst, the value in dst will be overwritten by the value associated with the key in src. The dst map is created if needed.

func VolumeGroupSnapshotClassMatchStorageProviders

func VolumeGroupSnapshotClassMatchStorageProviders(
	volumeGroupSnapshotClass groupsnapv1alpha1.VolumeGroupSnapshotClass, storageClassProviders []string,
) bool

Types

type Comparison

type Comparison int
const (
	Different Comparison = iota
	Same
	Absent
)

func MapInsertOnlyAll

func MapInsertOnlyAll[M ~map[K]V, K, V comparable](src M, dst *M) Comparison

Copies src's key-value pairs into dst only if src's keys are all absent from dst. Or, if dst is nil, assigns src to dst. Returns state of src's key-value pairs in dst before any changes.

func MapInsertOnlyAllF

func MapInsertOnlyAllF[M ~map[K]V, K, V comparable](src M, dstGet func() M, dstSet func(M)) Comparison

func ObjectLabelInsertOnlyAll

func ObjectLabelInsertOnlyAll(object metav1.Object, labels map[string]string) Comparison

func ObjectOwnerSetIfNotAlready

func ObjectOwnerSetIfNotAlready(object, owner metav1.Object) Comparison

type CreateOrDeleteOrResourceVersionUpdatePredicate

type CreateOrDeleteOrResourceVersionUpdatePredicate struct{}

func (CreateOrDeleteOrResourceVersionUpdatePredicate) Create

func (CreateOrDeleteOrResourceVersionUpdatePredicate) Delete

func (CreateOrDeleteOrResourceVersionUpdatePredicate) Generic

func (CreateOrDeleteOrResourceVersionUpdatePredicate) Update

type CreateOrResourceVersionUpdatePredicate

type CreateOrResourceVersionUpdatePredicate struct{}

func (CreateOrResourceVersionUpdatePredicate) Create

func (CreateOrResourceVersionUpdatePredicate) Delete

func (CreateOrResourceVersionUpdatePredicate) Generic

func (CreateOrResourceVersionUpdatePredicate) Update

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

type Labels

type Labels map[string]string

func OwnerLabels

func OwnerLabels(owner metav1.Object) Labels

type MWUtil

type MWUtil struct {
	client.Client
	APIReader       client.Reader
	Ctx             context.Context
	Log             logr.Logger
	InstName        string
	TargetNamespace string
}

func (*MWUtil) BuildManifestWorkName

func (mwu *MWUtil) BuildManifestWorkName(mwType string) string

func (*MWUtil) CreateOrUpdateDRCConfigManifestWork

func (mwu *MWUtil) CreateOrUpdateDRCConfigManifestWork(cluster string, cConfig rmn.DRClusterConfig) error

DRClusterConfig ManifestWork creation

func (*MWUtil) CreateOrUpdateDrClusterManifestWork

func (mwu *MWUtil) CreateOrUpdateDrClusterManifestWork(
	clusterName string,
	objectsToAppend []interface{}, annotations map[string]string,
) error

func (*MWUtil) CreateOrUpdateMModeManifestWork

func (mwu *MWUtil) CreateOrUpdateMModeManifestWork(
	name, cluster string,
	mMode rmn.MaintenanceMode, annotations map[string]string,
) error

MaintenanceMode ManifestWork creation

func (*MWUtil) CreateOrUpdateNFManifestWork

func (mwu *MWUtil) CreateOrUpdateNFManifestWork(
	name, homeCluster string,
	nf csiaddonsv1alpha1.NetworkFence, annotations map[string]string,
) error

NetworkFence MW creation

func (*MWUtil) CreateOrUpdateNamespaceManifest

func (mwu *MWUtil) CreateOrUpdateNamespaceManifest(
	name string, namespaceName string, managedClusterNamespace string,
	annotations map[string]string,
) error

Namespace MW creation

func (*MWUtil) CreateOrUpdateVRGManifestWork

func (mwu *MWUtil) CreateOrUpdateVRGManifestWork(
	name, namespace, homeCluster string,
	vrg rmn.VolumeReplicationGroup, annotations map[string]string,
) (ctrlutil.OperationResult, error)

func (*MWUtil) DeleteManifestWork

func (mwu *MWUtil) DeleteManifestWork(mwName, mwNamespace string) error

func (*MWUtil) DeleteNamespaceManifestWork

func (mwu *MWUtil) DeleteNamespaceManifestWork(clusterName string, annotations map[string]string) error

func (*MWUtil) FindManifestWork

func (mwu *MWUtil) FindManifestWork(mwName, managedCluster string) (*ocmworkv1.ManifestWork, error)

func (*MWUtil) FindManifestWorkByType

func (mwu *MWUtil) FindManifestWorkByType(mwType, managedCluster string) (*ocmworkv1.ManifestWork, error)

func (*MWUtil) GenerateManifest

func (mwu *MWUtil) GenerateManifest(obj interface{}) (*ocmworkv1.Manifest, error)

func (*MWUtil) GetDrClusterManifestWork

func (mwu *MWUtil) GetDrClusterManifestWork(clusterName string) (*ocmworkv1.ManifestWork, error)

func (*MWUtil) IsManifestApplied

func (mwu *MWUtil) IsManifestApplied(cluster, mwType string) bool

func (*MWUtil) ListMModeManifests

func (mwu *MWUtil) ListMModeManifests(cluster string) (*ocmworkv1.ManifestWorkList, error)

func (*MWUtil) UpdateVRGManifestWork

func (mwu *MWUtil) UpdateVRGManifestWork(vrg *rmn.VolumeReplicationGroup, mw *ocmworkv1.ManifestWork) error

type ManagedClusterInstance

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

func NewManagedClusterInstance

func NewManagedClusterInstance(
	ctx context.Context,
	client client.Client,
	cluster string,
) (*ManagedClusterInstance, error)

NewManagedClusterInstance creates an ManagedClusterInstance instance, reading the ManagedCluster resource for cluster

func (*ManagedClusterInstance) ClusterID

func (mci *ManagedClusterInstance) ClusterID() (string, error)

ClusterID returns the clusterID claimed by the ManagedCluster, or error if it is empty or not found

func (*ManagedClusterInstance) StorageClassClaims

func (mci *ManagedClusterInstance) StorageClassClaims() []string

func (*ManagedClusterInstance) VolumeReplicationClassClaims

func (mci *ManagedClusterInstance) VolumeReplicationClassClaims() []string

func (*ManagedClusterInstance) VolumeSnapshotClassClaims

func (mci *ManagedClusterInstance) VolumeSnapshotClassClaims() []string

type ManagedClusterViewGetter

type ManagedClusterViewGetter interface {
	GetVRGFromManagedCluster(
		resourceName, resourceNamespace, managedCluster string,
		annotations map[string]string) (*rmn.VolumeReplicationGroup, error)

	GetNFFromManagedCluster(
		resourceName, resourceNamespace, managedCluster string,
		annotations map[string]string) (*csiaddonsv1alpha1.NetworkFence, error)

	GetMModeFromManagedCluster(
		resourceName, managedCluster string,
		annotations map[string]string) (*rmn.MaintenanceMode, error)

	ListMModesMCVs(managedCluster string) (*viewv1beta1.ManagedClusterViewList, error)

	GetSClassFromManagedCluster(
		resourceName, managedCluster string,
		annotations map[string]string) (*storagev1.StorageClass, error)

	ListSClassMCVs(managedCluster string) (*viewv1beta1.ManagedClusterViewList, error)

	GetVSClassFromManagedCluster(
		resourceName, managedCluster string,
		annotations map[string]string) (*snapv1.VolumeSnapshotClass, error)

	ListVSClassMCVs(managedCluster string) (*viewv1beta1.ManagedClusterViewList, error)

	GetVRClassFromManagedCluster(
		resourceName, managedCluster string,
		annotations map[string]string) (*volrep.VolumeReplicationClass, error)

	ListVRClassMCVs(managedCluster string) (*viewv1beta1.ManagedClusterViewList, error)

	GetResource(mcv *viewv1beta1.ManagedClusterView, resource interface{}) error

	DeleteManagedClusterView(clusterName, mcvName string, logger logr.Logger) error

	DeleteVRGManagedClusterView(resourceName, resourceNamespace, clusterName, resourceType string) error

	DeleteNamespaceManagedClusterView(resourceName, resourceNamespace, clusterName, resourceType string) error

	DeleteNFManagedClusterView(resourceName, resourceNamespace, clusterName, resourceType string) error
}

type ManagedClusterViewGetterImpl

type ManagedClusterViewGetterImpl struct {
	client.Client
	APIReader client.Reader
}

func (ManagedClusterViewGetterImpl) DeleteManagedClusterView

func (m ManagedClusterViewGetterImpl) DeleteManagedClusterView(clusterName, mcvName string, logger logr.Logger) error

func (ManagedClusterViewGetterImpl) DeleteNFManagedClusterView

func (m ManagedClusterViewGetterImpl) DeleteNFManagedClusterView(
	resourceName, resourceNamespace, clusterName, resourceType string,
) error

func (ManagedClusterViewGetterImpl) DeleteNamespaceManagedClusterView

func (m ManagedClusterViewGetterImpl) DeleteNamespaceManagedClusterView(
	resourceName, resourceNamespace, clusterName, resourceType string,
) error

func (ManagedClusterViewGetterImpl) DeleteVRGManagedClusterView

func (m ManagedClusterViewGetterImpl) DeleteVRGManagedClusterView(
	resourceName, resourceNamespace, clusterName, resourceType string,
) error

func (ManagedClusterViewGetterImpl) GetMModeFromManagedCluster

func (m ManagedClusterViewGetterImpl) GetMModeFromManagedCluster(resourceName, managedCluster string,
	annotations map[string]string,
) (*rmn.MaintenanceMode, error)

func (ManagedClusterViewGetterImpl) GetNFFromManagedCluster

func (m ManagedClusterViewGetterImpl) GetNFFromManagedCluster(resourceName, resourceNamespace, managedCluster string,
	annotations map[string]string,
) (*csiaddonsv1alpha1.NetworkFence, error)

func (ManagedClusterViewGetterImpl) GetResource

func (m ManagedClusterViewGetterImpl) GetResource(mcv *viewv1beta1.ManagedClusterView, resource interface{}) error

func (ManagedClusterViewGetterImpl) GetSClassFromManagedCluster

func (m ManagedClusterViewGetterImpl) GetSClassFromManagedCluster(resourceName, managedCluster string,
	annotations map[string]string,
) (*storagev1.StorageClass, error)

func (ManagedClusterViewGetterImpl) GetVRClassFromManagedCluster

func (m ManagedClusterViewGetterImpl) GetVRClassFromManagedCluster(resourceName, managedCluster string,
	annotations map[string]string,
) (*volrep.VolumeReplicationClass, error)

func (ManagedClusterViewGetterImpl) GetVRGFromManagedCluster

func (m ManagedClusterViewGetterImpl) GetVRGFromManagedCluster(resourceName, resourceNamespace, managedCluster string,
	annotations map[string]string,
) (*rmn.VolumeReplicationGroup, error)

func (ManagedClusterViewGetterImpl) GetVSClassFromManagedCluster

func (m ManagedClusterViewGetterImpl) GetVSClassFromManagedCluster(resourceName, managedCluster string,
	annotations map[string]string,
) (*snapv1.VolumeSnapshotClass, error)

func (ManagedClusterViewGetterImpl) ListMModesMCVs

func (ManagedClusterViewGetterImpl) ListSClassMCVs

func (ManagedClusterViewGetterImpl) ListVRClassMCVs

func (ManagedClusterViewGetterImpl) ListVSClassMCVs

type ResourceUpdater

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

func NewResourceUpdater

func NewResourceUpdater(obj client.Object) *ResourceUpdater

func (*ResourceUpdater) AddFinalizer

func (u *ResourceUpdater) AddFinalizer(finalizerName string) *ResourceUpdater

func (*ResourceUpdater) AddLabel

func (u *ResourceUpdater) AddLabel(key, value string) *ResourceUpdater

func (*ResourceUpdater) AddOwner

func (u *ResourceUpdater) AddOwner(owner metav1.Object, scheme *runtime.Scheme) *ResourceUpdater

func (*ResourceUpdater) RemoveFinalizer

func (u *ResourceUpdater) RemoveFinalizer(finalizerName string) *ResourceUpdater

func (*ResourceUpdater) Update

func (u *ResourceUpdater) Update(ctx context.Context, client client.Client) error

type ResourceVersionUpdatePredicate

type ResourceVersionUpdatePredicate struct{}

func (ResourceVersionUpdatePredicate) Create

func (ResourceVersionUpdatePredicate) Delete

func (ResourceVersionUpdatePredicate) Generic

func (ResourceVersionUpdatePredicate) Update

type SecretsUtil

type SecretsUtil struct {
	client.Client
	APIReader client.Reader
	Ctx       context.Context
	Log       logr.Logger
}

func (*SecretsUtil) AddSecretToCluster

func (sutil *SecretsUtil) AddSecretToCluster(
	secretName, clusterName, namespace, targetNS string,
	format TargetSecretFormat,
	veleroNS string,
) error

AddSecretToCluster takes in a secret (secretName) in the Ramen S3 secret format in a namespace and uses OCM Policy to deliver it to the desired cluster (clusterName), in the desired namespace (targetNS). It accepts a format that can help convert the secret in the hub cluster to a desired format on the target cluster. The format SecretFormatVelero needs an additional argument veleroNS which is the namespace for the velero formatted secret, to be delivered from the targetNS (which requires that the secret first be delivered to the targetNS)

func (*SecretsUtil) RemoveSecretFromCluster

func (sutil *SecretsUtil) RemoveSecretFromCluster(
	secretName, clusterName, namespace string,
	format TargetSecretFormat,
) error

RemoveSecretFromCluster removes the secret (secretName) in namespace, from clusterName in the format requested. If this was the last cluster that required the secret to be delivered in the requested format, then the related policy resources are also deleted as part of the removal.

type TargetSecretFormat

type TargetSecretFormat string

TargetSecretFormat defines the secret format to deliver to the cluster

const (
	SecretFormatRamen  TargetSecretFormat = "ramen"
	SecretFormatVelero TargetSecretFormat = "velero"
)

Jump to

Keyboard shortcuts

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