diff --git a/pkg/operator/ceph/csi/controller.go b/pkg/operator/ceph/csi/controller.go index 18cd42873..fd899a118 100644 --- a/pkg/operator/ceph/csi/controller.go +++ b/pkg/operator/ceph/csi/controller.go @@ -30,6 +30,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/source" + addonsv1alpha1 "github.com/csi-addons/kubernetes-csi-addons/apis/csiaddons/v1alpha1" "github.com/pkg/errors" "github.com/rook/rook/pkg/clusterd" opcontroller "github.com/rook/rook/pkg/operator/ceph/controller" @@ -89,6 +90,12 @@ func add(ctx context.Context, mgr manager.Manager, r reconcile.Reconciler, opCon } logger.Infof("%s successfully started", controllerName) + // Add CSIAddons client to controller mgr + err = addonsv1alpha1.AddToScheme(mgr.GetScheme()) + if err != nil { + return err + } + // Watch for ConfigMap (operator config) configmapKind := source.Kind(mgr.GetCache(), &v1.ConfigMap{TypeMeta: metav1.TypeMeta{Kind: "ConfigMap", APIVersion: v1.SchemeGroupVersion.String()}}) diff --git a/pkg/operator/ceph/csi/controller_test.go b/pkg/operator/ceph/csi/controller_test.go index 693739345..78cbde7f9 100644 --- a/pkg/operator/ceph/csi/controller_test.go +++ b/pkg/operator/ceph/csi/controller_test.go @@ -31,6 +31,7 @@ import ( "github.com/rook/rook/pkg/operator/test" "github.com/stretchr/testify/assert" v1 "k8s.io/api/core/v1" + apifake "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/fake" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" @@ -105,8 +106,9 @@ func TestCephCSIController(t *testing.T) { fakeClientSet := test.New(t, 1) test.SetFakeKubernetesVersion(fakeClientSet, "v1.21.0") c := &clusterd.Context{ - Clientset: fakeClientSet, - RookClientset: rookclient.NewSimpleClientset(), + Clientset: fakeClientSet, + RookClientset: rookclient.NewSimpleClientset(), + ApiExtensionsClient: apifake.NewSimpleClientset(), } _, err := c.Clientset.CoreV1().Pods(namespace).Create(ctx, test.FakeOperatorPod(namespace), metav1.CreateOptions{}) assert.NoError(t, err) @@ -128,7 +130,7 @@ func TestCephCSIController(t *testing.T) { }, } s := scheme.Scheme - s.AddKnownTypes(cephv1.SchemeGroupVersion, &cephv1.CephCluster{}, &cephv1.CephClusterList{}) + s.AddKnownTypes(cephv1.SchemeGroupVersion, &cephv1.CephCluster{}, &cephv1.CephClusterList{}, &v1.ConfigMap{}) object := []runtime.Object{ cephCluster, @@ -160,8 +162,9 @@ func TestCephCSIController(t *testing.T) { fakeClientSet := test.New(t, 1) test.SetFakeKubernetesVersion(fakeClientSet, "v1.21.0") c := &clusterd.Context{ - Clientset: fakeClientSet, - RookClientset: rookclient.NewSimpleClientset(), + Clientset: fakeClientSet, + RookClientset: rookclient.NewSimpleClientset(), + ApiExtensionsClient: apifake.NewSimpleClientset(), } _, err := c.Clientset.CoreV1().Pods(namespace).Create(ctx, test.FakeOperatorPod(namespace), metav1.CreateOptions{}) assert.NoError(t, err) @@ -205,7 +208,7 @@ func TestCephCSIController(t *testing.T) { _, err = c.Clientset.CoreV1().Secrets(namespace).Create(ctx, secret, metav1.CreateOptions{}) assert.NoError(t, err) s := scheme.Scheme - s.AddKnownTypes(cephv1.SchemeGroupVersion, &cephv1.CephCluster{}, &cephv1.CephClusterList{}) + s.AddKnownTypes(cephv1.SchemeGroupVersion, &cephv1.CephCluster{}, &cephv1.CephClusterList{}, &v1.ConfigMap{}) object := []runtime.Object{ cephCluster, diff --git a/pkg/operator/ceph/csi/csi.go b/pkg/operator/ceph/csi/csi.go index e0a7e0bf2..c85364739 100644 --- a/pkg/operator/ceph/csi/csi.go +++ b/pkg/operator/ceph/csi/csi.go @@ -176,7 +176,14 @@ func (r *ReconcileCSI) setParams(ver *version.Info) error { } CSIParam.EnableCSIAddonsSideCar = false - if strings.EqualFold(k8sutil.GetValue(r.opConfig.Parameters, "CSI_ENABLE_CSIADDONS", "false"), "true") { + _, err = r.context.ApiExtensionsClient.ApiextensionsV1().CustomResourceDefinitions().Get(r.opManagerContext, "csiaddonsnode.csiaddons.openshift.io", metav1.GetOptions{}) + if err == nil { + CSIParam.EnableCSIAddonsSideCar = true + } + if strings.EqualFold(k8sutil.GetValue(r.opConfig.Parameters, "CSI_ENABLE_CSIADDONS", ""), "false") { + CSIParam.EnableCSIAddonsSideCar = false + } + if strings.EqualFold(k8sutil.GetValue(r.opConfig.Parameters, "CSI_ENABLE_CSIADDONS", ""), "true") { CSIParam.EnableCSIAddonsSideCar = true }