From 8a5f341181298de82e06592b293f6cabc7bf3b9c Mon Sep 17 00:00:00 2001 From: Abhijeet Shakya Date: Fri, 3 Jan 2025 19:11:05 +0530 Subject: [PATCH] Labeling resources created by Ramen Introducing a label to be added to all the resources created by Ramen. Signed-off-by: Abhijeet Shakya --- internal/controller/cephfscg/cghandler.go | 5 +++++ .../cephfscg/replicationgroupdestination.go | 2 ++ .../cephfscg/volumegroupsourcehandler.go | 5 +++++ internal/controller/core/labels.go | 22 +++++++++++++++++++ internal/controller/drcluster_controller.go | 6 +++++ .../controller/drclusterconfig_controller.go | 3 +++ internal/controller/drplacementcontrol.go | 3 +++ .../drplacementcontrol_controller.go | 4 ++++ .../controller/kubeobjects/velero/requests.go | 4 ++++ internal/controller/util/mcv_util.go | 4 ++++ internal/controller/util/misc.go | 2 ++ internal/controller/util/mw_util.go | 3 +++ internal/controller/util/secrets_util.go | 21 ++++++++++++++++-- internal/controller/volsync/deploy_volsync.go | 2 ++ .../controller/volsync/secret_propagator.go | 7 ++++++ internal/controller/volsync/secretgen.go | 3 +++ internal/controller/volsync/vshandler.go | 15 +++++++++++++ internal/controller/vrg_volrep.go | 4 +++- 18 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 internal/controller/core/labels.go diff --git a/internal/controller/cephfscg/cghandler.go b/internal/controller/cephfscg/cghandler.go index a21afdf7be..2c9fea72c7 100644 --- a/internal/controller/cephfscg/cghandler.go +++ b/internal/controller/cephfscg/cghandler.go @@ -11,6 +11,7 @@ import ( "github.com/go-logr/logr" snapv1 "github.com/kubernetes-csi/external-snapshotter/client/v8/apis/volumesnapshot/v1" ramendrv1alpha1 "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" "github.com/ramendr/ramen/internal/controller/util" "github.com/ramendr/ramen/internal/controller/volsync" corev1 "k8s.io/api/core/v1" @@ -118,6 +119,8 @@ func (c *cgHandler) CreateOrUpdateReplicationGroupDestination( }, } + core.ObjectCreatedByRamenSetLabel(rgd) + _, err := ctrlutil.CreateOrUpdate(c.ctx, c.Client, rgd, func() error { if err := ctrl.SetControllerReference(c.instance, rgd, c.Client.Scheme()); err != nil { return err @@ -204,6 +207,8 @@ func (c *cgHandler) CreateOrUpdateReplicationGroupSource( }, } + core.ObjectCreatedByRamenSetLabel(rgs) + _, err = ctrlutil.CreateOrUpdate(c.ctx, c.Client, rgs, func() error { if err := ctrl.SetControllerReference(c.instance, rgs, c.Client.Scheme()); err != nil { return err diff --git a/internal/controller/cephfscg/replicationgroupdestination.go b/internal/controller/cephfscg/replicationgroupdestination.go index fd76b7abd1..48738fe828 100644 --- a/internal/controller/cephfscg/replicationgroupdestination.go +++ b/internal/controller/cephfscg/replicationgroupdestination.go @@ -13,6 +13,7 @@ import ( "github.com/backube/volsync/controllers/statemachine" "github.com/go-logr/logr" ramendrv1alpha1 "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" "github.com/ramendr/ramen/internal/controller/util" "github.com/ramendr/ramen/internal/controller/volsync" corev1 "k8s.io/api/core/v1" @@ -263,6 +264,7 @@ func (m *rgdMachine) CreateReplicationDestinations( } util.AddLabel(rd, util.RGDOwnerLabel, m.ReplicationGroupDestination.Name) + core.ObjectCreatedByRamenSetLabel(rd) util.AddAnnotation(rd, volsync.OwnerNameAnnotation, m.ReplicationGroupDestination.Name) util.AddAnnotation(rd, volsync.OwnerNamespaceAnnotation, m.ReplicationGroupDestination.Namespace) diff --git a/internal/controller/cephfscg/volumegroupsourcehandler.go b/internal/controller/cephfscg/volumegroupsourcehandler.go index 271034c732..e954afbb83 100644 --- a/internal/controller/cephfscg/volumegroupsourcehandler.go +++ b/internal/controller/cephfscg/volumegroupsourcehandler.go @@ -13,6 +13,7 @@ import ( vgsv1beta1 "github.com/kubernetes-csi/external-snapshotter/client/v8/apis/volumegroupsnapshot/v1beta1" vsv1 "github.com/kubernetes-csi/external-snapshotter/client/v8/apis/volumesnapshot/v1" ramendrv1alpha1 "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" "github.com/ramendr/ramen/internal/controller/util" "github.com/ramendr/ramen/internal/controller/volsync" @@ -126,6 +127,7 @@ func (h *volumeGroupSourceHandler) CreateOrUpdateVolumeGroupSnapshot( return err } + core.ObjectCreatedByRamenSetLabel(volumeGroupSnapshot) util.AddLabel(volumeGroupSnapshot, util.RGSOwnerLabel, owner.GetName()) util.AddAnnotation(volumeGroupSnapshot, volsync.OwnerNameAnnotation, owner.GetName()) util.AddAnnotation(volumeGroupSnapshot, volsync.OwnerNamespaceAnnotation, owner.GetNamespace()) @@ -354,6 +356,7 @@ func (h *volumeGroupSourceHandler) RestoreVolumesFromSnapshot( return err } + core.ObjectCreatedByRamenSetLabel(restoredPVC) util.AddLabel(restoredPVC, util.RGSOwnerLabel, owner.GetName()) util.AddAnnotation(restoredPVC, volsync.OwnerNameAnnotation, owner.GetName()) util.AddAnnotation(restoredPVC, volsync.OwnerNamespaceAnnotation, owner.GetNamespace()) @@ -440,6 +443,7 @@ func (h *volumeGroupSourceHandler) CreateOrUpdateReplicationSourceForRestoredPVC Namespace: replicationSourceNamepspace, }, } + rdService := getRemoteServiceNameForRDFromPVCName(restoredPVC.SourcePVCName, replicationSourceNamepspace) op, err := ctrlutil.CreateOrUpdate(ctx, h.Client, replicationSource, func() error { @@ -447,6 +451,7 @@ func (h *volumeGroupSourceHandler) CreateOrUpdateReplicationSourceForRestoredPVC return err } + core.ObjectCreatedByRamenSetLabel(replicationSource) util.AddLabel(replicationSource, util.RGSOwnerLabel, owner.GetName()) util.AddAnnotation(replicationSource, volsync.OwnerNameAnnotation, owner.GetName()) util.AddAnnotation(replicationSource, volsync.OwnerNamespaceAnnotation, owner.GetNamespace()) diff --git a/internal/controller/core/labels.go b/internal/controller/core/labels.go new file mode 100644 index 0000000000..e455bb75b1 --- /dev/null +++ b/internal/controller/core/labels.go @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: The RamenDR authors +// SPDX-License-Identifier: Apache-2.0 + +package core + +import ( + "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + CreatedByRamenLabel = "ramendr.openshift.io/resource-created-by-ramen" +) + +func ObjectCreatedByRamenSetLabel(object client.Object) { + labels := object.GetLabels() + if labels == nil { + labels = make(map[string]string) + } + + labels[CreatedByRamenLabel] = "true" + object.SetLabels(labels) +} diff --git a/internal/controller/drcluster_controller.go b/internal/controller/drcluster_controller.go index 00fda4fbf9..aacf2f2fa7 100644 --- a/internal/controller/drcluster_controller.go +++ b/internal/controller/drcluster_controller.go @@ -32,6 +32,7 @@ import ( csiaddonsv1alpha1 "github.com/csi-addons/kubernetes-csi-addons/api/csiaddons/v1alpha1" "github.com/go-logr/logr" ramen "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" "github.com/ramendr/ramen/internal/controller/util" ) @@ -75,6 +76,7 @@ const ( const ( DRClusterNameAnnotation = "drcluster.ramendr.openshift.io/drcluster-name" + createdByRamenLabel = "ramendr.openshift.io/resource-created-by-ramen" ) // SetupWithManager sets up the controller with the Manager. @@ -652,6 +654,7 @@ func (u *drclusterInstance) ensureDRClusterConfig() error { return nil } +//nolint:funlen func (u *drclusterInstance) generateDRClusterConfig() (*ramen.DRClusterConfig, error) { mc, err := util.NewManagedClusterInstance(u.ctx, u.client, u.object.GetName()) if err != nil { @@ -676,6 +679,8 @@ func (u *drclusterInstance) generateDRClusterConfig() (*ramen.DRClusterConfig, e }, } + core.ObjectCreatedByRamenSetLabel(&drcConfig) + drpolicies, err := util.GetAllDRPolicies(u.ctx, u.reconciler.APIReader) if err != nil { return nil, err @@ -1455,6 +1460,7 @@ func generateNF(targetCluster *ramen.DRCluster) (csiaddonsv1alpha1.NetworkFence, Cidrs: targetCluster.Spec.CIDRs, }, } + core.ObjectCreatedByRamenSetLabel(&nf) if err := fillStorageDetails(targetCluster, &nf); err != nil { return nf, fmt.Errorf("failed to create network fence resource with storage detai: %w", err) diff --git a/internal/controller/drclusterconfig_controller.go b/internal/controller/drclusterconfig_controller.go index a772f4e78e..f617508257 100644 --- a/internal/controller/drclusterconfig_controller.go +++ b/internal/controller/drclusterconfig_controller.go @@ -29,6 +29,7 @@ import ( "github.com/go-logr/logr" "github.com/google/uuid" ramen "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" "github.com/ramendr/ramen/internal/controller/util" ) @@ -307,6 +308,8 @@ func (r *DRClusterConfigReconciler) ensureClusterClaim( }, } + core.ObjectCreatedByRamenSetLabel(cc) + if _, err := ctrl.CreateOrUpdate(ctx, r.Client, cc, func() error { util.NewResourceUpdater(cc).AddLabel(drCConfigOwnerLabel, drCConfigOwnerName) diff --git a/internal/controller/drplacementcontrol.go b/internal/controller/drplacementcontrol.go index 4920b333ac..031a4c1eb9 100644 --- a/internal/controller/drplacementcontrol.go +++ b/internal/controller/drplacementcontrol.go @@ -21,6 +21,7 @@ import ( clrapiv1beta1 "open-cluster-management.io/api/cluster/v1beta1" rmn "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" rmnutil "github.com/ramendr/ramen/internal/controller/util" "sigs.k8s.io/controller-runtime/pkg/client" @@ -1866,6 +1867,8 @@ func (d *DRPCInstance) newVRG( }, } + core.ObjectCreatedByRamenSetLabel(&vrg) + d.updateVRGOptionalFields(&vrg, vrgFromView, dstCluster) return vrg diff --git a/internal/controller/drplacementcontrol_controller.go b/internal/controller/drplacementcontrol_controller.go index 228e132cf8..38d935b00a 100644 --- a/internal/controller/drplacementcontrol_controller.go +++ b/internal/controller/drplacementcontrol_controller.go @@ -1097,6 +1097,8 @@ func (r *DRPlacementControlReconciler) clonePlacementRule(ctx context.Context, clonedPlRule := &plrv1.PlacementRule{} + recipecore.ObjectCreatedByRamenSetLabel(clonedPlRule) + userPlRule.DeepCopyInto(clonedPlRule) clonedPlRule.Name = clonedPlRuleName @@ -1703,6 +1705,8 @@ func (r *DRPlacementControlReconciler) createPlacementDecision(ctx context.Conte rmnutil.ExcludeFromVeleroBackup: "true", } + recipecore.ObjectCreatedByRamenSetLabel(plDecision) + owner := metav1.NewControllerRef(placement, clrapiv1beta1.GroupVersion.WithKind("Placement")) plDecision.ObjectMeta.OwnerReferences = []metav1.OwnerReference{*owner} diff --git a/internal/controller/kubeobjects/velero/requests.go b/internal/controller/kubeobjects/velero/requests.go index c01c2d1dfd..64fd48fb73 100644 --- a/internal/controller/kubeobjects/velero/requests.go +++ b/internal/controller/kubeobjects/velero/requests.go @@ -16,6 +16,7 @@ import ( "fmt" "github.com/go-logr/logr" + "github.com/ramendr/ramen/internal/controller/core" "github.com/ramendr/ramen/internal/controller/kubeobjects" velero "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" corev1 "k8s.io/api/core/v1" @@ -467,6 +468,9 @@ func backupRequestCreate( caCertificates, labels, ) + + core.ObjectCreatedByRamenSetLabel(backupLocation) + if err := w.objectCreate(backupLocation); err != nil { return backupLocation, nil, err } diff --git a/internal/controller/util/mcv_util.go b/internal/controller/util/mcv_util.go index a7e62079fe..7a49534439 100644 --- a/internal/controller/util/mcv_util.go +++ b/internal/controller/util/mcv_util.go @@ -21,6 +21,7 @@ import ( csiaddonsv1alpha1 "github.com/csi-addons/kubernetes-csi-addons/api/csiaddons/v1alpha1" rmn "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" viewv1beta1 "open-cluster-management.io/multicloud-operators-subscription/pkg/apis/view/v1beta1" ctrl "sigs.k8s.io/controller-runtime" ) @@ -386,6 +387,7 @@ func (m ManagedClusterViewGetterImpl) getOrCreateManagedClusterView( meta metav1.ObjectMeta, viewscope viewv1beta1.ViewScope, logger logr.Logger, ) (*viewv1beta1.ManagedClusterView, error) { key := types.NamespacedName{Name: meta.Name, Namespace: meta.Namespace} + mcv := &viewv1beta1.ManagedClusterView{ ObjectMeta: meta, Spec: viewv1beta1.ViewSpec{ @@ -393,6 +395,8 @@ func (m ManagedClusterViewGetterImpl) getOrCreateManagedClusterView( }, } + core.ObjectCreatedByRamenSetLabel(mcv) + err := m.Get(context.TODO(), key, mcv) if err != nil { if !k8serrors.IsNotFound(err) { diff --git a/internal/controller/util/misc.go b/internal/controller/util/misc.go index c06ed082c4..d4e6ba429d 100644 --- a/internal/controller/util/misc.go +++ b/internal/controller/util/misc.go @@ -10,6 +10,7 @@ import ( "reflect" rmn "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -231,6 +232,7 @@ func CreateNamespaceIfNotExists(ctx context.Context, k8sClient client.Client, na if err != nil { if k8serrors.IsNotFound(err) { ns.Name = namespace + core.ObjectCreatedByRamenSetLabel(ns) err = k8sClient.Create(ctx, ns) if err != nil { diff --git a/internal/controller/util/mw_util.go b/internal/controller/util/mw_util.go index 76b8c798de..1b251d8ffc 100644 --- a/internal/controller/util/mw_util.go +++ b/internal/controller/util/mw_util.go @@ -25,6 +25,7 @@ import ( csiaddonsv1alpha1 "github.com/csi-addons/kubernetes-csi-addons/api/csiaddons/v1alpha1" rmn "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) @@ -594,6 +595,8 @@ func (mwu *MWUtil) newManifestWork(name string, mcNamespace string, }, } + core.ObjectCreatedByRamenSetLabel(mw) + if annotations != nil { mw.ObjectMeta.Annotations = annotations } diff --git a/internal/controller/util/secrets_util.go b/internal/controller/util/secrets_util.go index 36ed9250a6..7b463e7829 100644 --- a/internal/controller/util/secrets_util.go +++ b/internal/controller/util/secrets_util.go @@ -13,6 +13,7 @@ import ( "fmt" "github.com/go-logr/logr" + "github.com/ramendr/ramen/internal/controller/core" plrv1 "github.com/stolostron/multicloud-operators-placementrule/pkg/apis/apps/v1" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -274,7 +275,7 @@ func (in *localSecret) DeepCopyInto(out *localSecret) { } func newS3ConfigurationSecret(s3SecretRef corev1.SecretReference, targetns string) *localSecret { - return &localSecret{ + localsecret := &localSecret{ TypeMeta: metav1.TypeMeta{ Kind: "Secret", APIVersion: "v1", @@ -294,10 +295,14 @@ func newS3ConfigurationSecret(s3SecretRef corev1.SecretReference, targetns strin "\"AWS_SECRET_ACCESS_KEY\" hub}}", }, } + + core.ObjectCreatedByRamenSetLabel(localsecret) + + return localsecret } func newVeleroSecret(s3SecretRef corev1.SecretReference, fromNS, veleroNS, keyName string) *localSecret { - return &localSecret{ + localsecret := &localSecret{ TypeMeta: metav1.TypeMeta{ Kind: "Secret", APIVersion: "v1", @@ -324,6 +329,10 @@ func newVeleroSecret(s3SecretRef corev1.SecretReference, fromNS, veleroNS, keyNa ") | base64enc }}", }, } + + core.ObjectCreatedByRamenSetLabel(localsecret) + + return localsecret } func newConfigurationPolicy(name string, object *runtime.RawExtension) *cpcv1.ConfigurationPolicy { @@ -373,6 +382,7 @@ func newPolicy(name, namespace, triggerValue string, object runtime.RawExtension } } +// nolint:funlen func (sutil *SecretsUtil) createPolicyResources( secret *corev1.Secret, cluster, namespace, targetNS string, @@ -401,6 +411,8 @@ func (sutil *SecretsUtil) createPolicyResources( } plRuleBindingObject := newPlacementRuleBinding(plBindingName, namespace, plRuleName, subjects) + core.ObjectCreatedByRamenSetLabel(plRuleBindingObject) + if err := sutil.Client.Create(sutil.Ctx, plRuleBindingObject); err != nil && !k8serrors.IsAlreadyExists(err) { sutil.Log.Error(err, "unable to create placement binding", "secret", secret.Name, "cluster", cluster) @@ -410,11 +422,14 @@ func (sutil *SecretsUtil) createPolicyResources( // Create a Policy object for the secret configObject := newConfigurationPolicy(configPolicyName, sutil.policyObject(secret.Name, namespace, targetNS, format, veleroNS)) + core.ObjectCreatedByRamenSetLabel(configObject) sutil.Log.Info("Initializing secret policy trigger", "secret", secret.Name, "trigger", secret.ResourceVersion) policyObject := newPolicy(policyName, namespace, secret.ResourceVersion, runtime.RawExtension{Object: configObject}) + core.ObjectCreatedByRamenSetLabel(policyObject) + if err := sutil.Client.Create(sutil.Ctx, policyObject); err != nil && !k8serrors.IsAlreadyExists(err) { sutil.Log.Error(err, "unable to create policy", "secret", secret.Name, "cluster", cluster) @@ -423,6 +438,8 @@ func (sutil *SecretsUtil) createPolicyResources( // Create a PlacementRule, including cluster plRuleObject := newPlacementRule(plRuleName, namespace, []string{cluster}) + core.ObjectCreatedByRamenSetLabel(plRuleObject) + if err := sutil.Client.Create(sutil.Ctx, plRuleObject); err != nil && !k8serrors.IsAlreadyExists(err) { sutil.Log.Error(err, "unable to create placement rule", "secret", secret.Name, "cluster", cluster) diff --git a/internal/controller/volsync/deploy_volsync.go b/internal/controller/volsync/deploy_volsync.go index 18c8c280af..9036c4e026 100644 --- a/internal/controller/volsync/deploy_volsync.go +++ b/internal/controller/volsync/deploy_volsync.go @@ -8,6 +8,7 @@ import ( "fmt" "github.com/go-logr/logr" + "github.com/ramendr/ramen/internal/controller/core" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/controller-runtime/pkg/client" @@ -57,6 +58,7 @@ func reconcileVolSyncManagedClusterAddOn(ctx context.Context, k8sClient client.C Version: ManagedClusterAddOnVersion, Kind: ManagedClusterAddOnKind, }) + core.ObjectCreatedByRamenSetLabel(vsMCAO) op, err := ctrlutil.CreateOrUpdate(ctx, k8sClient, vsMCAO, func() error { // Do not update the ManagedClusterAddOn if it already exists - let users update settings if required diff --git a/internal/controller/volsync/secret_propagator.go b/internal/controller/volsync/secret_propagator.go index ff88a1e8c4..48531df091 100644 --- a/internal/controller/volsync/secret_propagator.go +++ b/internal/controller/volsync/secret_propagator.go @@ -16,6 +16,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "github.com/ramendr/ramen/internal/controller/core" "github.com/ramendr/ramen/internal/controller/util" plrulev1 "github.com/stolostron/multicloud-operators-placementrule/pkg/apis/apps/v1" cfgpolicyv1 "open-cluster-management.io/config-policy-controller/api/v1" @@ -167,6 +168,8 @@ func (sp *secretPropagator) reconcileSecretPropagationPolicy() error { }, } + core.ObjectCreatedByRamenSetLabel(policy) + op, err := ctrlutil.CreateOrUpdate(sp.Context, sp.Client, policy, func() error { if err := ctrl.SetControllerReference(sp.Owner, policy, sp.Client.Scheme()); err != nil { sp.Log.Error(err, "unable to set controller reference on policy") @@ -259,6 +262,8 @@ func (sp *secretPropagator) reconcileSecretPropagationPlacementRule() error { }, } + core.ObjectCreatedByRamenSetLabel(placementRule) + clustersToApply := []plrulev1.GenericClusterReference{} for _, clusterName := range sp.DestClusters { clustersToApply = append(clustersToApply, plrulev1.GenericClusterReference{Name: clusterName}) @@ -304,6 +309,8 @@ func (sp *secretPropagator) reconcileSecretPropagationPlacementBinding() error { }, } + core.ObjectCreatedByRamenSetLabel(placementBinding) + op, err := ctrlutil.CreateOrUpdate(sp.Context, sp.Client, placementBinding, func() error { if err := ctrl.SetControllerReference(sp.Owner, placementBinding, sp.Client.Scheme()); err != nil { sp.Log.Error(err, "unable to set controller reference") diff --git a/internal/controller/volsync/secretgen.go b/internal/controller/volsync/secretgen.go index 0de5ea5653..abe6ce6c81 100644 --- a/internal/controller/volsync/secretgen.go +++ b/internal/controller/volsync/secretgen.go @@ -10,6 +10,7 @@ import ( "fmt" "github.com/go-logr/logr" + "github.com/ramendr/ramen/internal/controller/core" rmnutil "github.com/ramendr/ramen/internal/controller/util" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" @@ -85,6 +86,8 @@ func generateNewVolSyncReplicationSecret(secretName, secretNamespace string, log }, } + core.ObjectCreatedByRamenSetLabel(secret) + return secret, nil } diff --git a/internal/controller/volsync/vshandler.go b/internal/controller/volsync/vshandler.go index c1f96baedf..f2a85b79ea 100644 --- a/internal/controller/volsync/vshandler.go +++ b/internal/controller/volsync/vshandler.go @@ -29,6 +29,7 @@ import ( volsyncv1alpha1 "github.com/backube/volsync/api/v1alpha1" ramendrv1alpha1 "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" "github.com/ramendr/ramen/internal/controller/util" ) @@ -200,6 +201,7 @@ func RDStatusReady(rd *volsyncv1alpha1.ReplicationDestination, log logr.Logger) return true } +//nolint:funlen func (v *VSHandler) createOrUpdateRD( rdSpec ramendrv1alpha1.VolSyncReplicationDestinationSpec, pskSecretName string, dstPVC *string) (*volsyncv1alpha1.ReplicationDestination, error, @@ -223,6 +225,8 @@ func (v *VSHandler) createOrUpdateRD( }, } + core.ObjectCreatedByRamenSetLabel(rd) + op, err := ctrlutil.CreateOrUpdate(v.ctx, v.client, rd, func() error { if !v.vrgInAdminNamespace { if err := ctrl.SetControllerReference(v.owner, rd, v.client.Scheme()); err != nil { @@ -447,6 +451,8 @@ func (v *VSHandler) createOrUpdateRS(rsSpec ramendrv1alpha1.VolSyncReplicationSo }, } + core.ObjectCreatedByRamenSetLabel(rs) + // Handle final sync by retaining the PV and creating a tmpPVC used for final sync stop := v.setupForFinalSync(&rsSpec, runFinalSync) if stop { @@ -1408,6 +1414,8 @@ func (v *VSHandler) EnsurePVCforDirectCopy(ctx context.Context, }, } + core.ObjectCreatedByRamenSetLabel(pvc) + op, err := ctrlutil.CreateOrUpdate(ctx, v.client, pvc, func() error { if !v.vrgInAdminNamespace { if err := ctrl.SetControllerReference(v.owner, pvc, v.client.Scheme()); err != nil { @@ -1574,6 +1582,8 @@ func (v *VSHandler) ensurePVCFromSnapshot(rdSpec ramendrv1alpha1.VolSyncReplicat }, } + core.ObjectCreatedByRamenSetLabel(pvc) + pvcRequestedCapacity := rdSpec.ProtectedPVC.Resources.Requests.Storage() if snapRestoreSize != nil { if pvcRequestedCapacity == nil || snapRestoreSize.Cmp(*pvcRequestedCapacity) > 0 { @@ -2135,6 +2145,7 @@ func (v *VSHandler) reconcileLocalRD(rdSpec ramendrv1alpha1.VolSyncReplicationDe } } + core.ObjectCreatedByRamenSetLabel(lrd) util.AddLabel(lrd, VRGOwnerNameLabel, v.owner.GetName()) util.AddLabel(lrd, VRGOwnerNamespaceLabel, v.owner.GetNamespace()) util.AddLabel(lrd, VolSyncDoNotDeleteLabel, VolSyncDoNotDeleteLabelVal) @@ -2208,6 +2219,7 @@ func (v *VSHandler) reconcileLocalRS(rd *volsyncv1alpha1.ReplicationDestination, } } + core.ObjectCreatedByRamenSetLabel(lrs) util.AddLabel(lrs, VRGOwnerNameLabel, v.owner.GetName()) util.AddLabel(lrs, VRGOwnerNamespaceLabel, v.owner.GetNamespace()) @@ -2337,6 +2349,7 @@ func (v *VSHandler) setupLocalRS(rd *volsyncv1alpha1.ReplicationDestination, return v.createPVCFromSnapshot(rd, rdSpec, snapshotRef, restoreSize) } +//nolint:funlen func (v *VSHandler) createPVCFromSnapshot(rd *volsyncv1alpha1.ReplicationDestination, rdSpec *ramendrv1alpha1.VolSyncReplicationDestinationSpec, snapshotRef *corev1.TypedLocalObjectReference, @@ -2356,6 +2369,8 @@ func (v *VSHandler) createPVCFromSnapshot(rd *volsyncv1alpha1.ReplicationDestina }, } + core.ObjectCreatedByRamenSetLabel(pvc) + pvcRequestedCapacity := rd.Spec.RsyncTLS.Capacity if snapRestoreSize != nil { if pvcRequestedCapacity == nil || snapRestoreSize.Cmp(*pvcRequestedCapacity) > 0 { diff --git a/internal/controller/vrg_volrep.go b/internal/controller/vrg_volrep.go index f7189daf46..17d479e5d6 100644 --- a/internal/controller/vrg_volrep.go +++ b/internal/controller/vrg_volrep.go @@ -23,6 +23,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ramendrv1alpha1 "github.com/ramendr/ramen/api/v1alpha1" + "github.com/ramendr/ramen/internal/controller/core" rmnutil "github.com/ramendr/ramen/internal/controller/util" ) @@ -1232,7 +1233,6 @@ func (v *VRGInstance) createVR(vrNamespacedName types.NamespacedName, state volr ObjectMeta: metav1.ObjectMeta{ Name: vrNamespacedName.Name, Namespace: vrNamespacedName.Namespace, - Labels: rmnutil.OwnerLabels(v.instance), }, Spec: volrep.VolumeReplicationSpec{ DataSource: corev1.TypedLocalObjectReference{ @@ -1246,6 +1246,8 @@ func (v *VRGInstance) createVR(vrNamespacedName types.NamespacedName, state volr }, } + core.ObjectCreatedByRamenSetLabel(volRep) + if !vrgInAdminNamespace(v.instance, v.ramenConfig) { // This is to keep existing behavior of ramen. // Set the owner reference only for the VRs which are in the same namespace as the VRG and