@@ -44,6 +44,8 @@ type MirrorPeerReconciler struct {
44
44
Scheme * runtime.Scheme
45
45
}
46
46
47
+ const hubRecoveryLabel = "cluster.open-cluster-management.io/backup"
48
+
47
49
//+kubebuilder:rbac:groups=multicluster.odf.openshift.io,resources=mirrorpeers,verbs=get;list;watch;create;update;patch;delete
48
50
//+kubebuilder:rbac:groups=multicluster.odf.openshift.io,resources=mirrorpeers/status,verbs=get;update;patch
49
51
//+kubebuilder:rbac:groups=multicluster.odf.openshift.io,resources=mirrorpeers/finalizers,verbs=update
@@ -106,6 +108,30 @@ func (r *MirrorPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
106
108
}
107
109
logger .V (2 ).Info ("All validations for MirrorPeer passed" , "MirrorPeer" , req .NamespacedName )
108
110
111
+ mirrorPeerCopy := mirrorPeer .DeepCopy ()
112
+ if mirrorPeerCopy .Labels == nil {
113
+ mirrorPeerCopy .Labels = make (map [string ]string )
114
+ }
115
+
116
+ if val , ok := mirrorPeerCopy .Labels [hubRecoveryLabel ]; ! ok || val != "resource" {
117
+ logger .Info ("Adding label to mirrorpeer for disaster recovery" )
118
+ mirrorPeerCopy .Labels [hubRecoveryLabel ] = "resource"
119
+ err = r .Client .Update (ctx , mirrorPeerCopy )
120
+
121
+ if k8serrors .IsConflict (err ) {
122
+ logger .Info ("MirrorPeer is being updated by another process. Retrying" , "MirrorPeer" , mirrorPeerCopy .Name )
123
+ return ctrl.Result {Requeue : true }, nil
124
+ } else if k8serrors .IsNotFound (err ) {
125
+ logger .Info ("MirrorPeer no longer exists. Ignoring since object must have been deleted" , "MirrorPeer" , mirrorPeerCopy .Name )
126
+ return ctrl.Result {}, nil
127
+ } else if err != nil {
128
+ logger .Info ("Warning: Failed to update mirrorpeer" , "MirrorPeer" , mirrorPeerCopy .Name , "Error" , err )
129
+ } else {
130
+ logger .Info ("Successfully added label to mirrorpeer for disaster recovery" , "MirrorPeer" , mirrorPeerCopy .Name )
131
+ return ctrl.Result {Requeue : true }, nil
132
+ }
133
+ }
134
+
109
135
if mirrorPeer .Status .Phase == "" {
110
136
mirrorPeer .Status .Phase = multiclusterv1alpha1 .ExchangingSecret
111
137
statusErr := r .Client .Status ().Update (ctx , & mirrorPeer )
0 commit comments