@@ -31,12 +31,11 @@ import (
31
31
csiopv1a1 "github.com/ceph/ceph-csi-operator/api/v1alpha1"
32
32
"github.com/go-logr/logr"
33
33
34
+ replicationv1alpha1 "github.com/csi-addons/kubernetes-csi-addons/api/replication.storage/v1alpha1"
34
35
snapapi "github.com/kubernetes-csi/external-snapshotter/client/v8/apis/volumesnapshot/v1"
35
- ramenv1alpha1 "github.com/ramendr/ramen/api/v1alpha1"
36
36
providerclient "github.com/red-hat-storage/ocs-operator/services/provider/api/v4/client"
37
37
corev1 "k8s.io/api/core/v1"
38
38
storagev1 "k8s.io/api/storage/v1"
39
- extv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
40
39
"k8s.io/apimachinery/pkg/api/errors"
41
40
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
42
41
"k8s.io/apimachinery/pkg/runtime"
@@ -45,7 +44,6 @@ import (
45
44
"sigs.k8s.io/controller-runtime/pkg/cache"
46
45
"sigs.k8s.io/controller-runtime/pkg/client"
47
46
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
48
- "sigs.k8s.io/controller-runtime/pkg/handler"
49
47
ctrllog "sigs.k8s.io/controller-runtime/pkg/log"
50
48
"sigs.k8s.io/controller-runtime/pkg/predicate"
51
49
"sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -56,9 +54,8 @@ const (
56
54
storageClaimAnnotation = "ocs.openshift.io/storageclaim"
57
55
keyRotationAnnotation = "keyrotation.csiaddons.openshift.io/schedule"
58
56
59
- pvClusterIDIndexName = "index:persistentVolumeClusterID"
60
- vscClusterIDIndexName = "index:volumeSnapshotContentCSIDriver"
61
- drClusterConfigCRDName = "drclusterconfigs.ramendr.openshift.io"
57
+ pvClusterIDIndexName = "index:persistentVolumeClusterID"
58
+ vscClusterIDIndexName = "index:volumeSnapshotContentCSIDriver"
62
59
)
63
60
64
61
// StorageClaimReconciler reconciles a StorageClaim object
@@ -67,7 +64,6 @@ type StorageClaimReconciler struct {
67
64
cache.Cache
68
65
Scheme * runtime.Scheme
69
66
OperatorNamespace string
70
- AvailableCrds map [string ]bool
71
67
72
68
log logr.Logger
73
69
ctx context.Context
@@ -115,20 +111,8 @@ func (r *StorageClaimReconciler) SetupWithManager(mgr ctrl.Manager) error {
115
111
For (& v1alpha1.StorageClaim {}, builder .WithPredicates (generationChangePredicate )).
116
112
Owns (& storagev1.StorageClass {}).
117
113
Owns (& snapapi.VolumeSnapshotClass {}).
118
- Owns (& csiopv1a1.ClientProfile {}, builder .WithPredicates (generationChangePredicate )).
119
- Watches (
120
- & extv1.CustomResourceDefinition {},
121
- & handler.EnqueueRequestForObject {},
122
- builder .WithPredicates (
123
- utils .NamePredicate (drClusterConfigCRDName ),
124
- utils .CrdCreateAndDeletePredicate (& r .log , drClusterConfigCRDName , r .AvailableCrds [drClusterConfigCRDName ]),
125
- ),
126
- builder .OnlyMetadata ,
127
- )
128
-
129
- if r .AvailableCrds [drClusterConfigCRDName ] {
130
- bldr = bldr .Owns (& ramenv1alpha1.DRClusterConfig {}, builder .WithPredicates (generationChangePredicate ))
131
- }
114
+ Owns (& replicationv1alpha1.VolumeReplicationClass {}, builder .WithPredicates (generationChangePredicate )).
115
+ Owns (& csiopv1a1.ClientProfile {}, builder .WithPredicates (generationChangePredicate ))
132
116
133
117
return bldr .Complete (r )
134
118
}
@@ -142,7 +126,7 @@ func (r *StorageClaimReconciler) SetupWithManager(mgr ctrl.Manager) error {
142
126
//+kubebuilder:rbac:groups=core,resources=persistentvolumes,verbs=get;list;watch
143
127
//+kubebuilder:rbac:groups=snapshot.storage.k8s.io,resources=volumesnapshotcontents,verbs=get;list;watch
144
128
//+kubebuilder:rbac:groups=csi.ceph.io,resources=clientprofiles,verbs=get;list;update;create;watch;delete
145
- //+kubebuilder:rbac:groups=ramendr. openshift.io,resources=drclusterconfigs ,verbs=get;list;update ;create;watch ;delete
129
+ //+kubebuilder:rbac:groups=replication.storage. openshift.io,resources=volumereplicationclass ,verbs=get;list;watch ;create;delete
146
130
147
131
// Reconcile is part of the main kubernetes reconciliation loop which aims to
148
132
// move the current state of the cluster closer to the desired state.
@@ -159,15 +143,6 @@ func (r *StorageClaimReconciler) Reconcile(ctx context.Context, req ctrl.Request
159
143
r .ctx = ctrllog .IntoContext (ctx , r .log )
160
144
r .log .Info ("Reconciling StorageClaim." )
161
145
162
- crd := & metav1.PartialObjectMetadata {}
163
- crd .SetGroupVersionKind (extv1 .SchemeGroupVersion .WithKind ("CustomResourceDefinition" ))
164
- crd .Name = drClusterConfigCRDName
165
- if err := r .Client .Get (ctx , client .ObjectKeyFromObject (crd ), crd ); client .IgnoreNotFound (err ) != nil {
166
- r .log .Error (err , "Failed to get CRD" , "CRD" , drClusterConfigCRDName )
167
- return reconcile.Result {}, err
168
- }
169
- utils .AssertEqual (r .AvailableCrds [drClusterConfigCRDName ], crd .UID != "" , utils .ExitCodeThatShouldRestartTheProcess )
170
-
171
146
// Fetch the StorageClaim instance
172
147
r .storageClaim = & v1alpha1.StorageClaim {}
173
148
r .storageClaim .Name = req .Name
@@ -424,6 +399,30 @@ func (r *StorageClaimReconciler) reconcilePhases() (reconcile.Result, error) {
424
399
if err != nil {
425
400
return reconcile.Result {}, fmt .Errorf ("failed to create or update VolumeSnapshotClass: %s" , err )
426
401
}
402
+ case "VolumeReplicationClass" :
403
+ vrc := & replicationv1alpha1.VolumeReplicationClass {}
404
+ vrc .Name = r .storageClaim .Name
405
+ if strings .Contains (resource .Name , "flatten" ) {
406
+ vrc .Name = fmt .Sprintf ("%s-flatten" , r .storageClaim .Name )
407
+ }
408
+ err := utils .CreateOrReplace (r .ctx , r .Client , vrc , func () error {
409
+ if err := r .own (vrc ); err != nil {
410
+ return fmt .Errorf ("failed to own VolumeReplicationClass resource: %v" , err )
411
+ }
412
+ if err := json .Unmarshal (resource .Data , & vrc .Spec ); err != nil {
413
+ return fmt .Errorf ("failed to unmarshall VolumeReplicationClass spec: %v" , err )
414
+ }
415
+ vrc .Spec .Parameters ["replication.storage.openshift.io/replication-secret-namespace" ] = r .OperatorNamespace
416
+
417
+ utils .AddLabels (vrc , resource .Labels )
418
+ utils .AddAnnotations (vrc , resource .Annotations )
419
+
420
+ return nil
421
+ })
422
+ if err != nil {
423
+ return reconcile.Result {}, fmt .Errorf ("failed to create or update VolumeReplicationClass: %s" , err )
424
+ }
425
+
427
426
case "ClientProfile" :
428
427
clientProfile := & csiopv1a1.ClientProfile {}
429
428
clientProfile .Name = r .storageClaimHash
0 commit comments