From 41c4e24e35d029447ef56a06fe9ef2f2e97d3842 Mon Sep 17 00:00:00 2001 From: Madhu Rajanna Date: Mon, 11 Aug 2025 07:31:52 +0200 Subject: [PATCH] csi: use cluster namespace for cephConn CephConnection CR is created with the kubernetes namespace name as its the unique name in the entire cluster. This PR removes unwanted input parameters and adjust the namespace name for the cephConnection CR. Signed-off-by: Madhu Rajanna (cherry picked from commit 1ff3f07ac5bc59bc51de7938a1dce5a96ef11baf) --- pkg/operator/ceph/cluster/cluster_external.go | 2 +- pkg/operator/ceph/cluster/mon/mon.go | 2 +- pkg/operator/ceph/csi/ceph_connection.go | 12 ++++++------ pkg/operator/ceph/csi/config.go | 16 ++++++++-------- pkg/operator/ceph/csi/config_test.go | 5 ++--- .../ceph/file/subvolumegroup/controller.go | 4 ++-- .../ceph/pool/radosnamespace/controller.go | 4 ++-- 7 files changed, 22 insertions(+), 23 deletions(-) diff --git a/pkg/operator/ceph/cluster/cluster_external.go b/pkg/operator/ceph/cluster/cluster_external.go index 1347bb4cd..c4caa50f4 100644 --- a/pkg/operator/ceph/cluster/cluster_external.go +++ b/pkg/operator/ceph/cluster/cluster_external.go @@ -182,7 +182,7 @@ func (c *ClusterController) configureExternalCephCluster(cluster *cluster) error if err != nil { return errors.Wrap(err, "failed to create/update cephConnection") } - err = csi.CreateDefaultClientProfile(c.context.Client, cluster.ClusterInfo, cluster.ClusterInfo.NamespacedName()) + err = csi.CreateDefaultClientProfile(c.context.Client, cluster.ClusterInfo) if err != nil { return errors.Wrap(err, "failed to create/update default client profile") } diff --git a/pkg/operator/ceph/cluster/mon/mon.go b/pkg/operator/ceph/cluster/mon/mon.go index bc43bb8d2..bfabb3922 100644 --- a/pkg/operator/ceph/cluster/mon/mon.go +++ b/pkg/operator/ceph/cluster/mon/mon.go @@ -1190,7 +1190,7 @@ func (c *Cluster) saveMonConfig() error { if err != nil { return errors.Wrap(err, "failed to create/update cephConnection") } - err = csi.CreateDefaultClientProfile(c.context.Client, c.ClusterInfo, c.ClusterInfo.NamespacedName()) + err = csi.CreateDefaultClientProfile(c.context.Client, c.ClusterInfo) if err != nil { return errors.Wrap(err, "failed to create/update default client profile") } diff --git a/pkg/operator/ceph/csi/ceph_connection.go b/pkg/operator/ceph/csi/ceph_connection.go index d33be98f2..8784fd13a 100644 --- a/pkg/operator/ceph/csi/ceph_connection.go +++ b/pkg/operator/ceph/csi/ceph_connection.go @@ -38,7 +38,7 @@ func CreateUpdateCephConnection(c client.Client, clusterInfo *cephclient.Cluster csiCephConnection.Name = clusterInfo.NamespacedName().Name csiCephConnection.Namespace = os.Getenv(k8sutil.PodNamespaceEnvVar) - spec, err := generateCephConnSpec(c, clusterInfo, csiCephConnection.Spec, clusterSpec) + spec, err := generateCephConnSpec(c, clusterInfo, clusterSpec) if err != nil { return errors.Wrapf(err, "failed to set ceph connection CR %q in namespace %q", csiCephConnection.Name, clusterInfo.Namespace) } @@ -68,12 +68,12 @@ func CreateUpdateCephConnection(c client.Client, clusterInfo *cephclient.Cluster return nil } -func generateCephConnSpec(c client.Client, clusterInfo *cephclient.ClusterInfo, csiClusterConnSpec csiopv1.CephConnectionSpec, clusterSpec cephv1.ClusterSpec) (csiopv1.CephConnectionSpec, error) { +func generateCephConnSpec(c client.Client, clusterInfo *cephclient.ClusterInfo, clusterSpec cephv1.ClusterSpec) (csiopv1.CephConnectionSpec, error) { + csiClusterConnSpec := csiopv1.CephConnectionSpec{} + if clusterSpec.CSI.ReadAffinity.Enabled { - csiClusterConnSpec = csiopv1.CephConnectionSpec{ - ReadAffinity: &csiopv1.ReadAffinitySpec{ - CrushLocationLabels: clusterSpec.CSI.ReadAffinity.CrushLocationLabels, - }, + csiClusterConnSpec.ReadAffinity = &csiopv1.ReadAffinitySpec{ + CrushLocationLabels: clusterSpec.CSI.ReadAffinity.CrushLocationLabels, } } diff --git a/pkg/operator/ceph/csi/config.go b/pkg/operator/ceph/csi/config.go index c44f6cba5..dae4fede3 100644 --- a/pkg/operator/ceph/csi/config.go +++ b/pkg/operator/ceph/csi/config.go @@ -35,7 +35,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" ) -func CreateUpdateClientProfileRadosNamespace(ctx context.Context, c client.Client, clusterInfo *cephclient.ClusterInfo, cephBlockPoolRadosNamespaceName, clusterID, clusterName string) error { +func CreateUpdateClientProfileRadosNamespace(ctx context.Context, c client.Client, clusterInfo *cephclient.ClusterInfo, cephBlockPoolRadosNamespaceName, clusterID string) error { logger.Info("creating ceph-csi clientProfile CR for rados namespace") csiOpClientProfile := &csiopv1.ClientProfile{} @@ -43,7 +43,7 @@ func CreateUpdateClientProfileRadosNamespace(ctx context.Context, c client.Clien csiOpClientProfile.Namespace = os.Getenv(k8sutil.PodNamespaceEnvVar) csiOpClientProfile.Spec = csiopv1.ClientProfileSpec{ CephConnectionRef: v1.LocalObjectReference{ - Name: clusterName, + Name: clusterInfo.Namespace, }, Rbd: &csiopv1.RbdConfigSpec{ RadosNamespace: cephBlockPoolRadosNamespaceName, @@ -72,10 +72,10 @@ func CreateUpdateClientProfileRadosNamespace(ctx context.Context, c client.Clien return nil } -func CreateUpdateClientProfileSubVolumeGroup(ctx context.Context, c client.Client, clusterInfo *cephclient.ClusterInfo, cephFilesystemSubVolumeGroupName, clusterID, clusterName string) error { +func CreateUpdateClientProfileSubVolumeGroup(ctx context.Context, c client.Client, clusterInfo *cephclient.ClusterInfo, cephFilesystemSubVolumeGroupName, clusterID string) error { logger.Info("Creating ceph-csi clientProfile CR for subvolume group") - csiOpClientProfile := generateProfileSubVolumeGroupSpec(clusterInfo, cephFilesystemSubVolumeGroupName, clusterID, clusterName) + csiOpClientProfile := generateProfileSubVolumeGroupSpec(clusterInfo, cephFilesystemSubVolumeGroupName, clusterID) err := c.Get(ctx, types.NamespacedName{Name: csiOpClientProfile.Name, Namespace: csiOpClientProfile.Namespace}, csiOpClientProfile) if err != nil { @@ -99,13 +99,13 @@ func CreateUpdateClientProfileSubVolumeGroup(ctx context.Context, c client.Clien return nil } -func generateProfileSubVolumeGroupSpec(clusterInfo *cephclient.ClusterInfo, cephFilesystemSubVolumeGroupName, clusterID, clusterName string) *csiopv1.ClientProfile { +func generateProfileSubVolumeGroupSpec(clusterInfo *cephclient.ClusterInfo, cephFilesystemSubVolumeGroupName, clusterID string) *csiopv1.ClientProfile { csiOpClientProfile := &csiopv1.ClientProfile{} csiOpClientProfile.Name = clusterID csiOpClientProfile.Namespace = os.Getenv(k8sutil.PodNamespaceEnvVar) csiOpClientProfile.Spec = csiopv1.ClientProfileSpec{ CephConnectionRef: v1.LocalObjectReference{ - Name: clusterName, + Name: clusterInfo.Namespace, }, CephFs: &csiopv1.CephFsConfigSpec{ SubVolumeGroup: cephFilesystemSubVolumeGroupName, @@ -126,7 +126,7 @@ func generateProfileSubVolumeGroupSpec(clusterInfo *cephclient.ClusterInfo, ceph } // CreateDefaultClientProfile creates a default client profile for csi-operator to connect driver -func CreateDefaultClientProfile(c client.Client, clusterInfo *cephclient.ClusterInfo, namespaced types.NamespacedName) error { +func CreateDefaultClientProfile(c client.Client, clusterInfo *cephclient.ClusterInfo) error { logger.Info("Creating ceph-csi clientProfile default CR") defer func() { if r := recover(); r != nil { @@ -141,7 +141,7 @@ func CreateDefaultClientProfile(c client.Client, clusterInfo *cephclient.Cluster csiOpClientProfile.Namespace = os.Getenv(k8sutil.PodNamespaceEnvVar) csiOpClientProfile.Spec = csiopv1.ClientProfileSpec{ CephConnectionRef: v1.LocalObjectReference{ - Name: namespaced.Name, + Name: clusterInfo.Namespace, }, } diff --git a/pkg/operator/ceph/csi/config_test.go b/pkg/operator/ceph/csi/config_test.go index 34b144a4e..b29234b80 100644 --- a/pkg/operator/ceph/csi/config_test.go +++ b/pkg/operator/ceph/csi/config_test.go @@ -52,7 +52,6 @@ func TestCreateUpdateClientProfile(t *testing.T) { c.SetName(c.Namespace) t.Setenv(k8sutil.PodNamespaceEnvVar, ns) - clusterName := "testClusterName" cephBlockPoolRadosNamespacedName := types.NamespacedName{Namespace: ns, Name: "cephBlockPoolRadosNames"} cephSubVolGrpNamespacedName := types.NamespacedName{Namespace: ns, Name: "cephSubVolumeGroupNames"} csiOpClientProfile := &csiopv1.ClientProfile{} @@ -66,10 +65,10 @@ func TestCreateUpdateClientProfile(t *testing.T) { // Create a fake client to mock API calls. cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() - err := CreateUpdateClientProfileRadosNamespace(context.TODO(), cl, c, cephBlockPoolRadosNamespacedName.Name, cephBlockPoolRadosNamespacedName.Name, clusterName) + err := CreateUpdateClientProfileRadosNamespace(context.TODO(), cl, c, cephBlockPoolRadosNamespacedName.Name, cephBlockPoolRadosNamespacedName.Name) assert.NoError(t, err) - err = CreateUpdateClientProfileSubVolumeGroup(context.TODO(), cl, c, cephSubVolGrpNamespacedName.Name, cephSubVolGrpNamespacedName.Name, clusterName) + err = CreateUpdateClientProfileSubVolumeGroup(context.TODO(), cl, c, cephSubVolGrpNamespacedName.Name, cephSubVolGrpNamespacedName.Name) assert.NoError(t, err) err = cl.Get(context.TODO(), cephBlockPoolRadosNamespacedName, csiOpClientProfile) diff --git a/pkg/operator/ceph/file/subvolumegroup/controller.go b/pkg/operator/ceph/file/subvolumegroup/controller.go index fbfcf17f7..ac741c97f 100644 --- a/pkg/operator/ceph/file/subvolumegroup/controller.go +++ b/pkg/operator/ceph/file/subvolumegroup/controller.go @@ -273,7 +273,7 @@ func (r *ReconcileCephFilesystemSubVolumeGroup) reconcile(request reconcile.Requ } r.updateStatus(observedGeneration, namespacedName, cephv1.ConditionReady) if csi.EnableCSIOperator() { - err = csi.CreateUpdateClientProfileSubVolumeGroup(r.clusterInfo.Context, r.client, r.clusterInfo, cephFilesystemSubVolumeGroupName, buildClusterID(cephFilesystemSubVolumeGroup), cephCluster.Name) + err = csi.CreateUpdateClientProfileSubVolumeGroup(r.clusterInfo.Context, r.client, r.clusterInfo, cephFilesystemSubVolumeGroupName, buildClusterID(cephFilesystemSubVolumeGroup)) if err != nil { return reconcile.Result{}, errors.Wrap(err, "failed to create ceph csi-op config CR for subvolume") } @@ -326,7 +326,7 @@ func (r *ReconcileCephFilesystemSubVolumeGroup) reconcile(request reconcile.Requ r.updateStatus(observedGeneration, request.NamespacedName, cephv1.ConditionReady) if csi.EnableCSIOperator() { - err = csi.CreateUpdateClientProfileSubVolumeGroup(r.clusterInfo.Context, r.client, r.clusterInfo, cephFilesystemSubVolumeGroupName, buildClusterID(cephFilesystemSubVolumeGroup), cephCluster.Name) + err = csi.CreateUpdateClientProfileSubVolumeGroup(r.clusterInfo.Context, r.client, r.clusterInfo, cephFilesystemSubVolumeGroupName, buildClusterID(cephFilesystemSubVolumeGroup)) if err != nil { return reconcile.Result{}, errors.Wrap(err, "failed to create ceph csi-op config CR for subvolumeGroup") } diff --git a/pkg/operator/ceph/pool/radosnamespace/controller.go b/pkg/operator/ceph/pool/radosnamespace/controller.go index 139d75054..3f8a03062 100644 --- a/pkg/operator/ceph/pool/radosnamespace/controller.go +++ b/pkg/operator/ceph/pool/radosnamespace/controller.go @@ -289,7 +289,7 @@ func (r *ReconcileCephBlockPoolRadosNamespace) reconcile(request reconcile.Reque } r.updateStatus(r.client, namespacedName, cephv1.ConditionReady) if csi.EnableCSIOperator() { - err = csi.CreateUpdateClientProfileRadosNamespace(r.clusterInfo.Context, r.client, r.clusterInfo, radosNamespaceName, buildClusterID(radosNamespace), cephCluster.Name) + err = csi.CreateUpdateClientProfileRadosNamespace(r.clusterInfo.Context, r.client, r.clusterInfo, radosNamespaceName, buildClusterID(radosNamespace)) if err != nil { return reconcile.Result{}, radosNamespace, errors.Wrap(err, "failed to create ceph csi-op config CR for RadosNamespace") } @@ -353,7 +353,7 @@ func (r *ReconcileCephBlockPoolRadosNamespace) reconcile(request reconcile.Reque r.updateStatus(r.client, namespacedName, cephv1.ConditionReady) if csi.EnableCSIOperator() { - err = csi.CreateUpdateClientProfileRadosNamespace(r.clusterInfo.Context, r.client, r.clusterInfo, radosNamespaceName, buildClusterID(radosNamespace), cephCluster.Name) + err = csi.CreateUpdateClientProfileRadosNamespace(r.clusterInfo.Context, r.client, r.clusterInfo, radosNamespaceName, buildClusterID(radosNamespace)) if err != nil { return reconcile.Result{}, radosNamespace, errors.Wrap(err, "failed to create ceph csi-op config CR for RadosNamespace") }