Skip to content

Commit

Permalink
do not start cephfs cg controller if there is no volumegroupsnapshot CRD
Browse files Browse the repository at this point in the history
Signed-off-by: youhangwang <[email protected]>
  • Loading branch information
youhangwang committed Jun 11, 2024
1 parent a16fbbb commit aecdc37
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 11 deletions.
6 changes: 6 additions & 0 deletions config/dr-cluster/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ rules:
verbs:
- list
- watch
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- get
- apiGroups:
- groupsnapshot.storage.k8s.io
resources:
Expand Down
6 changes: 6 additions & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ rules:
- patch
- update
- watch
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- get
- apiGroups:
- apps.open-cluster-management.io
resources:
Expand Down
1 change: 1 addition & 0 deletions controllers/replicationgroupsource_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ type ReplicationGroupSourceReconciler struct {
//+kubebuilder:rbac:groups=core,resources=persistentvolumeclaims,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=volsync.backube,resources=replicationsources,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=snapshot.storage.k8s.io,resources=volumesnapshots,verbs=get;list;watch
//+kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions,verbs=get

func (r *ReplicationGroupSourceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
logger := log.FromContext(ctx)
Expand Down
23 changes: 23 additions & 0 deletions controllers/util/cephfs_cg.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ import (
ramendrv1alpha1 "github.com/ramendr/ramen/api/v1alpha1"
corev1 "k8s.io/api/core/v1"
storagev1 "k8s.io/api/storage/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/util/retry"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/manager"
)

const (
Expand All @@ -26,6 +28,27 @@ const (
RGSOwnerLabel string = "ramendr.openshift.io/rgs"
)

func IsFSCGSupport(mgr manager.Manager) (bool, error) {
k8sClient, err := client.New(mgr.GetConfig(), client.Options{Scheme: mgr.GetScheme()})
if err != nil {
return false, err
}

vgsCRD := &apiextensionsv1.CustomResourceDefinition{}
if err := k8sClient.Get(context.Background(),
types.NamespacedName{Name: "volumegroupsnapshots.groupsnapshot.storage.k8s.io"},
vgsCRD,
); err != nil {
if errors.IsNotFound(err) {
return false, nil
}

return false, err
}

return true, nil
}

func GetPVCLatestImageRGD(
pvcname string, rgd ramendrv1alpha1.ReplicationGroupDestination,
) *corev1.TypedLocalObjectReference {
Expand Down
32 changes: 21 additions & 11 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (
argocdv1alpha1hack "github.com/ramendr/ramen/controllers/argocd"
rmnutil "github.com/ramendr/ramen/controllers/util"
recipe "github.com/ramendr/recipe/api/v1alpha1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
// +kubebuilder:scaffold:imports
)

Expand Down Expand Up @@ -113,6 +114,7 @@ func configureController(ramenConfig *ramendrv1alpha1.RamenConfig) error {
utilruntime.Must(snapv1.AddToScheme(scheme))
utilruntime.Must(groupsnapv1alpha1.AddToScheme(scheme))
utilruntime.Must(recipe.AddToScheme(scheme))
utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
}

return nil
Expand Down Expand Up @@ -165,20 +167,28 @@ func setupReconcilersCluster(mgr ctrl.Manager, ramenConfig *ramendrv1alpha1.Rame
os.Exit(1)
}

if err := (&controllers.ReplicationGroupDestinationReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "ReplicationGroupDestination")
fsCGSupport, err := rmnutil.IsFSCGSupport(mgr)
if err != nil {
setupLog.Error(err, "failed to check if ceph fs consistency group is supported")
os.Exit(1)
}

if err := (&controllers.ReplicationGroupSourceReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "ReplicationGroupSource")
os.Exit(1)
if fsCGSupport {
if err := (&controllers.ReplicationGroupDestinationReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "ReplicationGroupDestination")
os.Exit(1)
}

if err := (&controllers.ReplicationGroupSourceReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "ReplicationGroupSource")
os.Exit(1)
}
}
}

Expand Down

0 comments on commit aecdc37

Please sign in to comment.