Repository: rook/rook
Pull request #12816 (2023-08-30 11:04:21)

Simplify docs-check workflow by extracting functionality 
<!-- Please take a look at our Contributing documentation before submitting a Pull Request!
https://rook.io/docs/rook/latest/Contributing/development-flow/

Thank you for contributing to Rook! -->

**Description of your changes:**

This simplifies the docs-check workflow by extracting hard-coded functionality into new make targets `check-docs` and `check-helm-docs` that can be called locally by the developer to conveniently check if they forgot to commit some generated docs or  the multus validation job manifest file 


**Which issue is resolved by this Pull Request:**


**Checklist:**

- [x] **Commit Message Formatting**: Commit titles and messages follow guidelines in the [developer guide](https://rook.io/docs/rook/latest/Contributing/development-flow/#commit-structure).
- [x] **Skip Tests for Docs**: If this is only a documentation change, add the label `skip-ci` on the PR.
- [x] Reviewed the developer guide on [Submitting a Pull Request](https://rook.io/docs/rook/latest/Contributing/development-flow/#submitting-a-pull-request)
- [x] [Pending release notes](https://github.com/rook/rook/blob/master/PendingReleaseNotes.md) updated with breaking and/or notable changes for the next minor release.
- [x] Documentation has been updated, if necessary.
- [x] Unit tests have been added, if necessary.
- [x] Integration tests have been added, if necessary.


obnoxxx: @travisn  wrote:
> `make docs` also makes the helm docs. How about if we just document `make docs` and no need to document a separate `make helm-docs`? This will keep the commands simpler. If `make helm-docs` still exists, that's just an implementation detail that we don't need to document.

don: updated accordingly.


Patch:
diff --git a/.github/workflows/docs-check.yml b/.github/workflows/docs-check.yml
index 9a8c0a6b4..7bf9e50fc 100644
--- a/.github/workflows/docs-check.yml
+++ b/.github/workflows/docs-check.yml
@@ -33,15 +33,10 @@ jobs:
         with:
           python-version: 3.9
 
-      - name: Run docs
-        run: |
-          make docs
-          DIFF=$(git diff)
-          if [ ! -z "$DIFF" ]; then
-            echo "Please run 'make docs' locally, commit the updated docs, and push the change. See https://rook.io/docs/rook/latest/Contributing/documentation/#running-helm-docs"
-          fi
-          git diff --exit-code
-
+      - name: Check helm-docs
+        run: make check-helm-docs
+      - name: Check docs
+        run: make check-docs
       - name: Install mkdocs and dependencies
         run: cd build/release/ && make deps.docs
 
diff --git a/.mergify.yml b/.mergify.yml
index 1dd63477d..547c0bdbc 100644
--- a/.mergify.yml
+++ b/.mergify.yml
@@ -197,7 +197,7 @@ pull_request_rules:
       - base=release-1.12
       - label!=do-not-merge
       - "status-success=DCO"
-      - "check-success=linux-build-all (1.21)"
+      - "check-success=linux-build-all (1.20)"
       - "check-success=unittests"
       - "check-success=golangci-lint"
       - "check-success=codegen"
@@ -228,15 +228,15 @@ pull_request_rules:
       - "check-success=lvm-pvc"
       - "check-success=rgw-multisite-testing"
       - "check-success=TestCephSmokeSuite (v1.22.17)"
-      - "check-success=TestCephSmokeSuite (v1.28.0)"
+      - "check-success=TestCephSmokeSuite (v1.27.2)"
       - "check-success=TestCephHelmSuite (v1.22.17)"
-      - "check-success=TestCephHelmSuite (v1.28.0)"
-      - "check-success=TestCephMultiClusterDeploySuite (v1.28.0)"
+      - "check-success=TestCephHelmSuite (v1.27.2)"
+      - "check-success=TestCephMultiClusterDeploySuite (v1.27.2)"
       - "check-success=TestCephObjectSuite (v1.27.2)"
       - "check-success=TestCephUpgradeSuite (v1.22.17)"
-      - "check-success=TestCephUpgradeSuite (v1.28.0)"
+      - "check-success=TestCephUpgradeSuite (v1.27.2)"
       - "check-success=TestHelmUpgradeSuite (v1.22.17)"
-      - "check-success=TestHelmUpgradeSuite (v1.28.0)"
+      - "check-success=TestHelmUpgradeSuite (v1.27.2)"
     actions:
       merge:
         method: merge
diff --git a/Documentation/CRDs/Cluster/external-cluster.md b/Documentation/CRDs/Cluster/external-cluster.md
index a2e97ae38..43c608dba 100644
--- a/Documentation/CRDs/Cluster/external-cluster.md
+++ b/Documentation/CRDs/Cluster/external-cluster.md
@@ -45,7 +45,7 @@ python3 create-external-cluster-resources.py --rbd-data-pool-name <pool_name> --
 - `--skip-monitoring-endpoint`: (optional) Skip prometheus exporter endpoints, even if they are available. Useful if the prometheus module is not enabled
 - `--ceph-conf`: (optional) Provide a Ceph conf file
 - `--keyring`: (optional) Path to Ceph keyring file, to be used with `--ceph-conf`
-- `--k8s-cluster-name`: (optional) Kubernetes cluster name
+- `--cluster-name`: (optional) Ceph cluster name
 - `--output`: (optional) Output will be stored into the provided file
 - `--dry-run`: (optional) Prints the executed commands without running them
 - `--run-as-user`: (optional) Provides a user name to check the cluster's health status, must be prefixed by `client`.
@@ -58,7 +58,7 @@ python3 create-external-cluster-resources.py --rbd-data-pool-name <pool_name> --
 - `--rgw-zone-name`: (optional) Provides the name of the rgw-zone
 - `--rgw-zonegroup-name`: (optional) Provides the name of the rgw-zone-group
 - `--upgrade`: (optional) Upgrades the 'Ceph CSI keyrings (For example: client.csi-cephfs-provisioner) with new permissions needed for the new cluster version and older permission will still be applied.
-- `--restricted-auth-permission`: (optional) Restrict cephCSIKeyrings auth permissions to specific pools, and cluster. Mandatory flags that need to be set are `--rbd-data-pool-name`, and `--k8s-cluster-name`. `--cephfs-filesystem-name` flag can also be passed in case of CephFS user restriction, so it can restrict users to particular CephFS filesystem.
+- `--restricted-auth-permission`: (optional) Restrict cephCSIKeyrings auth permissions to specific pools, and cluster. Mandatory flags that need to be set are `--rbd-data-pool-name`, and `--cluster-name`. `--cephfs-filesystem-name` flag can also be passed in case of CephFS user restriction, so it can restrict users to particular CephFS filesystem.
 - `--v2-port-enable`: (optional) Enables the v2 mon port (3300) for mons.
 
 ### Multi-tenancy
@@ -72,7 +72,7 @@ So you would be running different isolated consumer clusters on top of single `S
     So apply these secrets only to new `Consumer cluster` deployment while using the same `Source cluster`.
 
 ```console
-python3 create-external-cluster-resources.py --cephfs-filesystem-name <filesystem-name> --rbd-data-pool-name <pool_name> --k8s-cluster-name <k8s-cluster-name> --restricted-auth-permission true --format <bash> --rgw-endpoint <rgw_endpoin> --namespace <rook-ceph-external>
+python3 create-external-cluster-resources.py --cephfs-filesystem-name <filesystem-name> --rbd-data-pool-name <pool_name> --cluster-name <cluster-name> --restricted-auth-permission true --format <bash> --rgw-endpoint <rgw_endpoin> --namespace <rook-ceph-external>
 ```
 
 ### RGW Multisite
@@ -92,10 +92,10 @@ python3 create-external-cluster-resources.py --upgrade
 ```
 
 2) If the consumer cluster has restricted caps:
-Restricted users created using `--restricted-auth-permission` flag need to pass mandatory flags: '`--rbd-data-pool-name`(if it is a rbd user), `--k8s-cluster-name` and `--run-as-user`' flags while upgrading, in case of cephfs users if you have passed `--cephfs-filesystem-name` flag while creating csi-users then while upgrading it will be mandatory too. In this example the user would be `client.csi-rbd-node-rookstorage-replicapool` (following the pattern `csi-user-clusterName-poolName`)
+Restricted users created using `--restricted-auth-permission` flag need to pass mandatory flags: '`--rbd-data-pool-name`(if it is a rbd user), `--cluster-name` and `--run-as-user`' flags while upgrading, in case of cephfs users if you have passed `--cephfs-filesystem-name` flag while creating csi-users then while upgrading it will be mandatory too. In this example the user would be `client.csi-rbd-node-rookstorage-replicapool` (following the pattern `csi-user-clusterName-poolName`)
 
 ```console
-python3 create-external-cluster-resources.py --upgrade --rbd-data-pool-name replicapool --k8s-cluster-name rookstorage --run-as-user client.csi-rbd-node-rookstorage-replicapool
+python3 create-external-cluster-resources.py --upgrade --rbd-data-pool-name replicapool --cluster-name rookstorage --run-as-user client.csi-rbd-node-rookstorage-replicapool
 ```
 
 !!! note
diff --git a/Documentation/Contributing/documentation.md b/Documentation/Contributing/documentation.md
index 086ad74e3..aa68f94c2 100644
--- a/Documentation/Contributing/documentation.md
+++ b/Documentation/Contributing/documentation.md
@@ -35,9 +35,8 @@ When previewing, now you can navigate your browser to [http://127.0.0.1:8000/](h
 
     Please make sure that your Python binary path is included in your `PATH`.
 
-## Running helm-docs
-[helm-docs](https://github.com/norwoodj/helm-docs) is a tool that generates the documentation for a helm chart automatically. If there are changes in the helm chart, you need to run helm-docs manually, and check in the resulting autogenerated md files at the path `/Documentation/Helm-Charts`
+## Making docs
+
+[helm-docs](https://github.com/norwoodj/helm-docs) is a tool that generates the documentation for a helm chart automatically. If there are changes in the helm chart, the developer needs to run `make docs` (to run helm-docs) and check in the resulting autogenerated files. 
+To make it easy to check locally for uncommitted changes generated by `make docs`, an additional `make` target exists: simply running `make check-docs` will run the docs auto-generation and will complain if this produces uncommitted changes to doc files. It is therefore a good habit to always run `make check-docs` locally before creating or updating a PR.
 
-```console
-make helm-docs
-```
diff --git a/Makefile b/Makefile
index 44736d197..b3f284c1b 100644
--- a/Makefile
+++ b/Makefile
@@ -214,6 +214,20 @@ helm-docs: $(HELM_DOCS) ## Use helm-docs to generate documentation from helm cha
 		-t ../../../Documentation/Helm-Charts/ceph-cluster-chart.gotmpl.md \
 		-t ../../../Documentation/Helm-Charts/_templates.gotmpl
 
+check-helm-docs:
+	@$(MAKE) helm-docs
+	@git diff --exit-code || { \
+	echo "Please run 'make helm-docs' locally, commit the updated docs, and push the change. See https://rook.io/docs/rook/latest/Contributing/documentation/#making-docs" ; \
+	exit 2 ; \
+	}; 
+check-docs:
+	@$(MAKE) docs
+	@git diff --exit-code || { \
+	echo "Please run 'make docs' locally, commit the updated docs, and push the change." ; \
+	exit 2 ; \
+	}; 
+
+
 docs-preview: ## Preview the documentation through mkdocs
 	mkdocs serve
 
diff --git a/deploy/examples/create-external-cluster-resources.py b/deploy/examples/create-external-cluster-resources.py
index 5e6cd896b..f4a5f0c56 100644
--- a/deploy/examples/create-external-cluster-resources.py
+++ b/deploy/examples/create-external-cluster-resources.py
@@ -319,7 +319,7 @@ class RadosJSON:
             help="Provides a user name to check the cluster's health status, must be prefixed by 'client.'",
         )
         common_group.add_argument(
-            "--k8s-cluster-name", default="", help="Kubernetes cluster name"
+            "--cluster-name", default="", help="Ceph cluster name"
         )
         common_group.add_argument(
             "--namespace",
@@ -333,9 +333,9 @@ class RadosJSON:
             "--restricted-auth-permission",
             default=False,
             help="Restrict cephCSIKeyrings auth permissions to specific pools, cluster."
-            + "Mandatory flags that need to be set are --rbd-data-pool-name, and --k8s-cluster-name."
+            + "Mandatory flags that need to be set are --rbd-data-pool-name, and --cluster-name."
             + "--cephfs-filesystem-name flag can also be passed in case of cephfs user restriction, so it can restrict user to particular cephfs filesystem"
-            + "sample run: `python3 /etc/ceph/create-external-cluster-resources.py --cephfs-filesystem-name myfs --rbd-data-pool-name replicapool --k8s-cluster-name rookstorage --restricted-auth-permission true`"
+            + "sample run: `python3 /etc/ceph/create-external-cluster-resources.py --cephfs-filesystem-name myfs --rbd-data-pool-name replicapool --cluster-name rookstorage --restricted-auth-permission true`"
             + "Note: Restricting the csi-users per pool, and per cluster will require creating new csi-users and new secrets for that csi-users."
             + "So apply these secrets only to new `Consumer cluster` deployment while using the same `Source cluster`.",
         )
@@ -474,9 +474,9 @@ class RadosJSON:
             help="Upgrades the cephCSIKeyrings(For example: client.csi-cephfs-provisioner) with new permissions needed for the new cluster version and older permission will still be applied."
             + "Sample run: `python3 /etc/ceph/create-external-cluster-resources.py --upgrade`, this will upgrade all the default csi users(non-restricted)"
             + "For restricted users(For example: client.csi-cephfs-provisioner-openshift-storage-myfs), users created using --restricted-auth-permission flag need to pass mandatory flags"
-            + "mandatory flags: '--rbd-data-pool-name, --k8s-cluster-name and --run-as-user' flags while upgrading"
+            + "mandatory flags: '--rbd-data-pool-name, --cluster-name and --run-as-user' flags while upgrading"
             + "in case of cephfs users if you have passed --cephfs-filesystem-name flag while creating user then while upgrading it will be mandatory too"
-            + "Sample run: `python3 /etc/ceph/create-external-cluster-resources.py --upgrade --rbd-data-pool-name replicapool --k8s-cluster-name rookstorage  --run-as-user client.csi-rbd-node-rookstorage-replicapool`"
+            + "Sample run: `python3 /etc/ceph/create-external-cluster-resources.py --upgrade --rbd-data-pool-name replicapool --cluster-name rookstorage  --run-as-user client.csi-rbd-node-rookstorage-replicapool`"
             + "PS: An existing non-restricted user cannot be converted to a restricted user by upgrading."
             + "Upgrade flag should only be used to append new permissions to users, it shouldn't be used for changing user already applied permission, for example you shouldn't change in which pool user has access",
         )
@@ -857,16 +857,16 @@ class RadosJSON:
             "osd": "allow rw tag cephfs metadata=*",
         }
         if self._arg_parser.restricted_auth_permission:
-            k8s_cluster_name = self._arg_parser.k8s_cluster_name
-            if k8s_cluster_name == "":
+            cluster_name = self._arg_parser.cluster_name
+            if cluster_name == "":
                 raise ExecutionFailureException(
-                    "k8s_cluster_name not found, please set the '--k8s-cluster-name' flag"
+                    "cluster_name not found, please set the '--cluster-name' flag"
                 )
             cephfs_filesystem = self._arg_parser.cephfs_filesystem_name
             if cephfs_filesystem == "":
-                entity = f"{entity}-{k8s_cluster_name}"
+                entity = f"{entity}-{cluster_name}"
             else:
-                entity = f"{entity}-{k8s_cluster_name}-{cephfs_filesystem}"
+                entity = f"{entity}-{cluster_name}-{cephfs_filesystem}"
                 caps["osd"] = f"allow rw tag cephfs metadata={cephfs_filesystem}"
 
         return caps, entity
@@ -880,21 +880,21 @@ class RadosJSON:
             "mds": "allow rw",
         }
         if self._arg_parser.restricted_auth_permission:
-            k8s_cluster_name = self._arg_parser.k8s_cluster_name
-            if k8s_cluster_name == "":
+            cluster_name = self._arg_parser.cluster_name
+            if cluster_name == "":
                 raise ExecutionFailureException(
-                    "k8s_cluster_name not found, please set the '--k8s-cluster-name' flag"
+                    "cluster_name not found, please set the '--cluster-name' flag"
                 )
             cephfs_filesystem = self._arg_parser.cephfs_filesystem_name
             if cephfs_filesystem == "":
-                entity = f"{entity}-{k8s_cluster_name}"
+                entity = f"{entity}-{cluster_name}"
             else:
-                entity = f"{entity}-{k8s_cluster_name}-{cephfs_filesystem}"
+                entity = f"{entity}-{cluster_name}-{cephfs_filesystem}"
                 caps["osd"] = f"allow rw tag cephfs *={cephfs_filesystem}"
 
         return caps, entity
 
-    def get_entity(self, entity, rbd_pool_name, alias_rbd_pool_name, k8s_cluster_name):
+    def get_entity(self, entity, rbd_pool_name, alias_rbd_pool_name, cluster_name):
         if (
             rbd_pool_name.count(".") != 0
             or rbd_pool_name.count("_") != 0
@@ -912,9 +912,9 @@ class RadosJSON:
                 raise ExecutionFailureException(
                     "'--alias-rbd-data-pool-name' flag value should not contain '.' or '_'"
                 )
-            entity = f"{entity}-{k8s_cluster_name}-{alias_rbd_pool_name}"
+            entity = f"{entity}-{cluster_name}-{alias_rbd_pool_name}"
         else:
-            entity = f"{entity}-{k8s_cluster_name}-{rbd_pool_name}"
+            entity = f"{entity}-{cluster_name}-{rbd_pool_name}"
 
         return entity
 
@@ -928,17 +928,17 @@ class RadosJSON:
         if self._arg_parser.restricted_auth_permission:
             rbd_pool_name = self._arg_parser.rbd_data_pool_name
             alias_rbd_pool_name = self._arg_parser.alias_rbd_data_pool_name
-            k8s_cluster_name = self._arg_parser.k8s_cluster_name
+            cluster_name = self._arg_parser.cluster_name
             if rbd_pool_name == "":
                 raise ExecutionFailureException(
                     "mandatory flag not found, please set the '--rbd-data-pool-name' flag"
                 )
-            if k8s_cluster_name == "":
+            if cluster_name == "":
                 raise ExecutionFailureException(
-                    "mandatory flag not found, please set the '--k8s-cluster-name' flag"
+                    "mandatory flag not found, please set the '--cluster-name' flag"
                 )
             entity = self.get_entity(
-                entity, rbd_pool_name, alias_rbd_pool_name, k8s_cluster_name
+                entity, rbd_pool_name, alias_rbd_pool_name, cluster_name
             )
             caps["osd"] = f"profile rbd pool={rbd_pool_name}"
 
@@ -953,17 +953,17 @@ class RadosJSON:
         if self._arg_parser.restricted_auth_permission:
             rbd_pool_name = self._arg_parser.rbd_data_pool_name
             alias_rbd_pool_name = self._arg_parser.alias_rbd_data_pool_name
-            k8s_cluster_name = self._arg_parser.k8s_cluster_name
+            cluster_name = self._arg_parser.cluster_name
             if rbd_pool_name == "":
                 raise ExecutionFailureException(
                     "mandatory flag not found, please set the '--rbd-data-pool-name' flag"
                 )
-            if k8s_cluster_name == "":
+            if cluster_name == "":
                 raise ExecutionFailureException(
-                    "mandatory flag not found, please set the '--k8s-cluster-name' flag"
+                    "mandatory flag not found, please set the '--cluster-name' flag"
                 )
             entity = self.get_entity(
-                entity, rbd_pool_name, alias_rbd_pool_name, k8s_cluster_name
+                entity, rbd_pool_name, alias_rbd_pool_name, cluster_name
             )
             caps["osd"] = f"profile rbd pool={rbd_pool_name}"
 
@@ -1455,15 +1455,15 @@ class RadosJSON:
     def _gen_output_map(self):
         if self.out_map:
             return
-        self._arg_parser.k8s_cluster_name = (
-            self._arg_parser.k8s_cluster_name.lower()
+        self._arg_parser.cluster_name = (
+            self._arg_parser.cluster_name.lower()
         )  # always convert cluster name to lowercase characters
         self.validate_rbd_pool()
         self.validate_rados_namespace()
-        self._excluded_keys.add("K8S_CLUSTER_NAME")
+        self._excluded_keys.add("CLUSTER_NAME")
         self.get_cephfs_data_pool_details()
         self.out_map["NAMESPACE"] = self._arg_parser.namespace
-        self.out_map["K8S_CLUSTER_NAME"] = self._arg_parser.k8s_cluster_name
+        self.out_map["CLUSTER_NAME"] = self._arg_parser.cluster_name
         self.out_map["ROOK_EXTERNAL_FSID"] = self.get_fsid()
         self.out_map["ROOK_EXTERNAL_USERNAME"] = self.run_as_user
         self.out_map["ROOK_EXTERNAL_CEPH_MON_DATA"] = self.get_ceph_external_mon_data()
diff --git a/design/ceph/osd-migration.md b/design/ceph/osd-migration.md
index 6825a7d79..b5f11a3ee 100644
--- a/design/ceph/osd-migration.md
+++ b/design/ceph/osd-migration.md
@@ -2,45 +2,29 @@
 
 ## Summary
 
-- Configure the default OSD backend via the `cephCluster` CR so that new OSDs
-  are built with it.
-- Existing OSDs should be able to migrate to use a new backend store configured
-  via `cephCluster` CR. The migration process should include destroying the
-  existing OSDs one by one, wiping the drive, then recreating a new OSD on
-  that drive with the same ID.
+- Configure OSD backend store via `cephCluster` CR so that new OSDs can use it.
+- Existing OSDs should be able to migrate to use a new backend store configured via `cephCluster` CR. The migration process should include destroying the existing OSDs one by one, wiping the disk and then creating a new OSD on that disk.
 
 ## Motivation:
 
-- Ceph uses BlueStore as a special-purpose storage backend designed specifically
-  for Ceph OSD workloads. The upstream Ceph team is working on improving
-  BlueStore in ways that will significantly improve performance, especially
-  in disaster recovery scenarios. This new OSD backend is known as
-  `bluestore-rdr`. In the future, other backends will also need to be supported,
-  such as `seastore` from the Crimson effort.
-- To employ a new torage backend, the existing OSD needs to be destroyed, drives
-  wiped, and new OSD created using the specified storage backend.
+- Ceph uses BlueStore as a special-purpose storage back end designed specifically for managing data on disk for Ceph OSD workloads. Ceph team is working on improving this backend storage that will help in significantly improving the performance, especially in disaster recovery scenarios. This new OSD backend is known as `bluestore-rdr`. In the future, other backends will also need to be supported, such as `seastore`.
+- To support any new and improved storage backend, the existing OSD needs to be destroyed, disks should be wiped out and new OSD should be created using the latest storage backend.
 
 ## Goals
 
-- Newly provisioned clusters should be able to use the specific storage backend
-  when creating OSDs.
-- Existing clusters should be able to migrate existing OSDs to a specific
-  backend, without downtime and without risking data loss.  Note that this
-  necessarily entails redeploying and backfilling each OSD in turn.
+- Newly provisioned clusters should be able to use the specific storage backend while creating OSDs.
+- Existing clusters should be able to migrate the OSDs to use a specific storage backend, without downtime and without risking data loss.
 
 ## Non-Goals/Deferred Features:
 
-Migration of OSDs with following configurations is deferred for now and will
-considered in the future:
-- Hybrid OSDs where metadata (RocksDB+WAL) is placed on faster storage media
-  and application data on slower media.
-- Setups with multiple OSDs per drive, though with recent Ceph releases the
-  motivation for deploying this way is mostly obviated.
+Migration of OSDs with following configurations is deferred for now and will be taken up in future:
+- OSDs on mixed media setup where metadata (RocksDB+WAL) is placed on higher throughput storage media and application data on lower throughput media.
+- Setups with multiple OSDs per disk.
 
 ## Proposal
 
 ### API Changes
-- Add `spec.storage.store` in the Ceph cluster YAML.
+- Add `spec.storage.store` in the ceph cluster yaml.
 
   ```yaml
   storage:
@@ -49,16 +33,11 @@ considered in the future:
       updateStore: yes-really-update-store
   ```
 
-  - `type`: The backend to be used for OSDs: `bluestore`, `bluestore-rdr`,
-     etc. The default type will be `bluestore`
-  - `updateStore`: Allows the operator to migrate existing OSDs to a different
-     backend. This field can only take the value `yes-really-update-store`. If
-     the user wants to change the `store.type` field for an existing cluster,
-     they will also need to update `spec.storage.store.updateStore` with `yes-really-update-store`.
+  - `type`: The type of backend store to be used for OSDs. For example, bluestore, bluestore-rdr, etc. The default store type will be `bluestore`
+  - `updateStore`: Allows the user to migrate the existing OSDs to use any new storage backend. This field can only take the value as `yes-really-update-store`. If the user wants to change the `store.type` field for an existing cluster, then they will also need to update `spec.storage.store.updateStore` with `yes-really-update-store`
 
 
-- Add `status.storage.osd` to the Ceph cluster status. This will help convey the progress
-  of OSD migration
+- Add `status.storage.osd` to the ceph cluster status. This will help convey the overall status of the OSD migration
 
   ``` yaml
   status:
@@ -69,31 +48,21 @@ considered in the future:
         bluestore-rdr: 5
   ```
 
-  - `storeType.bluestore`: Total number of BlueStore OSDs running
-  - `storeType.bluestore-rdr`: Total number of BlueStore-rdr OSDs running
-  - The cluster's `phase` should be set to `progressing` while OSDs are migrating
+  - `storeType.bluestore`: Total number of bluestore OSDs running
+  - `storeType.bluestore-rdr`: Total number of bluestore-rdr OSDs running
+  - Cluster `phase` should be set to progressing while OSDs are migrating
 
-The migration process will involve destroying existing OSDs one by one, wiping
-the drives, deploying a new OSD with the same ID, then waiting for all PGs
-to be `active+clean` before migrating the next OSD. Since this operation
-involves possible impact or downtime, users should be exercise caution
-before proceeding with this action.
+The migration process will involve destroying the existing OSDs one by one, wiping the disks, creating a new OSD and waiting for the PGs to be active+clean before migrating the next OSD. Since this operation involves possible downtime, users should be really sure before proceeding with this action.
 
-**NOTE**: Once the OSDs are migrated to a new backend, say `bluestore-rdr`, they
-won't be allowed to be migrated back to the legacy store (BlueStore).
+**NOTE**: Once the OSDs are migrated to a new backend store, say, `bluestore-rdr`, they won't be allowed to be migrated back to the legacy store (bluestore).
 
-- Add a new label `osd-store:<osd store type>` to all OSD pods.
-- This label will help to identify the current backend being used for the OSD
-  and enable the operator to determine if the OSD should be migrated if the
-  the admin changes the backend type in the spec (`spec.Storage.store.type`).
+- Add a new label `osd-store:<osd store type>` to all the OSD pods.
+- This label will help to identify the current backend store being used for the OSD and enable the operator to decide if the OSD should be migrated in case the user changes the backend store type in the spec (`spec.Storage.store.type`).
 
 ### New OSDs
 
-- Set the OSD backend provided by the user in `spec.storage.store.type` as an
-  environment variable in the OSD prepare job. If no OSD store is provided in
-  the spec, then set the environment variable to `bluestore`.
-- The prepare pod will use this environment variable when preparing OSDs
-  with the `ceph-volume` command.
+- Add the OSD store provided by the user in `spec.storage.store.type` as an environment variable in the OSD prepare job. If no OSD store is provided in the spec, then set the environment variable to `bluestore`.
+- The prepare pod will use this environment variable while preparing OSDs using `ceph-volume` command.
 
 #### OSD Prepare
 
@@ -109,20 +78,15 @@ won't be allowed to be migrated back to the legacy store (BlueStore).
     ceph-volume lvm prepare <OSD_STORE_ENV_VARIABLE> --data /dev/vda
     ```
 
-#### OSD Activation
+#### OSD Activate
 
-The ceph-volume `activate` command doesn't require the OSD backend to be passed
-as an argument. It auto-detects the backend that was used during when the OSD
-was prepared.
+ceph-volume `activate` command doesn't require OSD store flag to be passed as an argument. It auto detects the backend store that was used during the OSD `prepare`
 
 ### Existing OSDs
 
-- After upgrading an existing Rook Ceph cluster to a Ceph release that supports
-  `bluestore-rdr`, admins can migrate `bluestore` OSDs to `bluestore-rdr`.
-- The backend of OSDs can not be overridden, so this update will require
-  the OSDs to be replaced one by one.
-- In order to migrate OSDs to use `bluestore-rdr`, admins must patch the
-  Ceph cluster spec as below:
+- After upgrading an existing rook ceph cluster to a Ceph version that supports `bluestore-rdr`, users can upgrade the `bluestore` based OSDs to use `bluestore-rdr`
+- Backend store of the OSDs can not be overridden, so this update will require the OSDs to be replaced one by one.
+- In order to migrate OSDs to use `bluestore-rdr`, users need to patch the ceph cluster spec like below:
 
 ```yaml
 storage:
@@ -132,23 +96,23 @@ storage:
 ```
 
 #### Replace OSD
-The operator's reconciler will replace one OSD at a time.
-A configmap will be used to store the OSD ID currently being migrated.
+Operator reconciler will replace one OSD at a time.
+A config map will be used to store the OSD being replaced currently.
 OSD replacement steps:
-  1. List all OSDs where `osd-store:<osd store type>` does not match `spec.storage.store.type`.
-  2. If all PGs are not `active+clean`, do not proceed.
-  3. If all PGs  are `active+clean` but a previous OSD replacement is not completed, do not proceed.
-  4. If all PGs are `active+clean` and no replacement is in progress, then select an OSD to be migrated.
+  1. List out all OSDs where `osd-store:<osd store type>` does not match with `spec.storage.store.type`.
+  2. If the PG status is not `active+clean`, don't replace any OSD.
+  3. If the PG status is `active+clean` but a previous OSD replacement is not completed, then don't replace any new OSD.
+  4. If the PG status is `active+clean` and no replacement is in progress, then select an OSD to be replaced from the list.
   5. Delete the OSD deployment.
-  6. Create an OSD prepare job with an environment variable indictating the OSD ID to be replaced.
-  7. The OSD prepare pod will destroy the OSD and prepare it again using the same OSD ID. Refer [Destroy OSD](#destroy-osd) for details.
-  8. Once the destroyed OSD pod is recreated, delete the configmap.
-  9. If there is any error during the OSD migration, then preserve the OSD ID being replaced in the configmap for next reconcile.
-  10. Reconcile the operator and perform as same steps until all the OSDs have migrated to the new backend.
+  6. Create an OSD prepare job with an environment variable of OSD ID to be replaced.
+  7. OSD prepare pod will destroy the OSD and prepare it again using the same OSD ID. Refer [Destroy OSD](#destroy-osd) for details.
+  8. Once the destroyed OSD pod is added back, delete the configmap.
+  9. If there is any error during the OSD migration, then preserve the OSD being replaced in the configmap for next reconcile.
+  10. Reconcile the operator and perform as same steps until all the OSDs have migrated to the new backend store.
 
 #### Destroy OSD
 
-The OSD prepare pod job will destroy an OSD using following steps:
+OSD prepare pod job will destroy an OSD using following steps.
 - Check for OSD ID environment variable of the OSD to be destroyed.
 - Use `ceph volume list` to fetch the OSD path.
 - Destroy the OSD using following command:
@@ -157,7 +121,7 @@ The OSD prepare pod job will destroy an OSD using following steps:
     ceph osd destroy <OSD_ID> --yes-i-really-mean-it
     ```
 
-- Wipe the OSD drive. This removes all the data on the device.
+- Wipe the OSD disk. This removes all the data on the device.
 - Prepare the OSD with the new store type by using the same OSD ID. This is done by passing the OSD ID as `--osd-id` flag to `ceph-volume` command.
 
     ```
@@ -166,9 +130,8 @@ The OSD prepare pod job will destroy an OSD using following steps:
 
 ## Planning
 
-These changes require ignificant developemnt effort to migrate existing OSDs to use a new backend.
-They will be divided into following phases:
+These changes require a significant developemnt effort to migrate existing OSDs to use new backend store. So it will be divided into following stages:
 * New OSDs (greenfield).
 * Migrating existing OSDs on PVC without metadata devices.
 * Migrating existing OSDs on PVC with metadata devices.
-* Existing node-based OSDs (multiple OSDs are created at once via `ceph-volume batch` which adds additional complications).
+* Existing node-based OSDs (multiple OSDs are created at once using ceph volume batch which adds to additional complications).
diff --git a/go.mod b/go.mod
index 27d981e41..b470e069b 100644
--- a/go.mod
+++ b/go.mod
@@ -35,7 +35,7 @@ require (
 	k8s.io/apimachinery v0.28.1
 	k8s.io/cli-runtime v0.28.0
 	k8s.io/client-go v0.28.1
-	k8s.io/cloud-provider v0.28.1
+	k8s.io/cloud-provider v0.28.0
 	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 	sigs.k8s.io/controller-runtime v0.15.1
 	sigs.k8s.io/mcs-api v0.1.0
diff --git a/go.sum b/go.sum
index c624704fc..1619b221e 100644
--- a/go.sum
+++ b/go.sum
@@ -3261,8 +3261,8 @@ k8s.io/client-go v0.22.2/go.mod h1:sAlhrkVDf50ZHx6z4K0S40wISNTarf1r800F+RlCF6U=
 k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4=
 k8s.io/client-go v0.28.1 h1:pRhMzB8HyLfVwpngWKE8hDcXRqifh1ga2Z/PU9SXVK8=
 k8s.io/client-go v0.28.1/go.mod h1:pEZA3FqOsVkCc07pFVzK076R+P/eXqsgx5zuuRWukNE=
-k8s.io/cloud-provider v0.28.1 h1:bR7lIRYBHqxfsOkUsY2hJ7V7vmStxb0wjJJdrID8+7I=
-k8s.io/cloud-provider v0.28.1/go.mod h1:7jxsc3c15go606KLXnUq8Cy4nX1R1dxFRgn/czIJp/Q=
+k8s.io/cloud-provider v0.28.0 h1:BTIW7b757T+VXB5yqJeajPXsNOmeooopUgfzQueiWvk=
+k8s.io/cloud-provider v0.28.0/go.mod h1:u0MGqdlutkTmCJyNrCzIMJ+OhrwQE9x5X8mBTN0R7us=
 k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
 k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
 k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0=
diff --git a/pkg/operator/ceph/cluster/mgr/spec.go b/pkg/operator/ceph/cluster/mgr/spec.go
index d6f8d24f3..bf616e5ee 100644
--- a/pkg/operator/ceph/cluster/mgr/spec.go
+++ b/pkg/operator/ceph/cluster/mgr/spec.go
@@ -184,7 +184,7 @@ func (c *Cluster) makeMgrDaemonContainer(mgrConfig *mgrConfig) v1.Container {
 			},
 		},
 		Env: append(
-			controller.DaemonEnvVars(&c.spec),
+			controller.DaemonEnvVars(c.spec.CephVersion.Image),
 			c.cephMgrOrchestratorModuleEnvs()...,
 		),
 		Resources:       cephv1.GetMgrResources(c.spec.Resources),
@@ -246,7 +246,7 @@ func (c *Cluster) makeCmdProxySidecarContainer(mgrConfig *mgrConfig) v1.Containe
 		Image:           c.spec.CephVersion.Image,
 		ImagePullPolicy: controller.GetContainerImagePullPolicy(c.spec.CephVersion.ImagePullPolicy),
 		VolumeMounts:    append(controller.DaemonVolumeMounts(mgrConfig.DataPathMap, mgrConfig.ResourceName, c.spec.DataDirHostPath), adminKeyringVolMount),
-		Env:             append(controller.DaemonEnvVars(&c.spec), v1.EnvVar{Name: "CEPH_ARGS", Value: fmt.Sprintf("-m $(ROOK_CEPH_MON_HOST) -k %s", keyring.VolumeMount().AdminKeyringFilePath())}),
+		Env:             append(controller.DaemonEnvVars(c.spec.CephVersion.Image), v1.EnvVar{Name: "CEPH_ARGS", Value: fmt.Sprintf("-m $(ROOK_CEPH_MON_HOST) -k %s", keyring.VolumeMount().AdminKeyringFilePath())}),
 		Resources:       cephv1.GetMgrResources(c.spec.Resources),
 		SecurityContext: controller.PodSecurityContext(),
 	}
diff --git a/pkg/operator/ceph/cluster/mon/spec.go b/pkg/operator/ceph/cluster/mon/spec.go
index b146914f4..8d4c8ab81 100644
--- a/pkg/operator/ceph/cluster/mon/spec.go
+++ b/pkg/operator/ceph/cluster/mon/spec.go
@@ -269,7 +269,7 @@ func (c *Cluster) makeMonFSInitContainer(monConfig *monConfig) corev1.Container
 		VolumeMounts:    controller.DaemonVolumeMounts(monConfig.DataPathMap, keyringStoreName, c.spec.DataDirHostPath),
 		SecurityContext: controller.PodSecurityContext(),
 		// filesystem creation does not require ports to be exposed
-		Env:       controller.DaemonEnvVars(&c.spec),
+		Env:       controller.DaemonEnvVars(c.spec.CephVersion.Image),
 		Resources: cephv1.GetMonResources(c.spec.Resources),
 	}
 }
@@ -308,7 +308,7 @@ func (c *Cluster) makeMonDaemonContainer(monConfig *monConfig) corev1.Container
 			},
 		},
 		Env: append(
-			controller.DaemonEnvVars(&c.spec),
+			controller.DaemonEnvVars(c.spec.CephVersion.Image),
 			k8sutil.PodIPEnvVar(podIPEnvVar),
 		),
 		Resources:     cephv1.GetMonResources(c.spec.Resources),
diff --git a/pkg/operator/ceph/cluster/nodedaemon/crash.go b/pkg/operator/ceph/cluster/nodedaemon/crash.go
index 83757853e..0e40b1912 100644
--- a/pkg/operator/ceph/cluster/nodedaemon/crash.go
+++ b/pkg/operator/ceph/cluster/nodedaemon/crash.go
@@ -167,9 +167,10 @@ func getCrashChownInitContainer(cephCluster cephv1.CephCluster) corev1.Container
 }
 
 func getCrashDaemonContainer(cephCluster cephv1.CephCluster, cephVersion cephver.CephVersion) corev1.Container {
+	cephImage := cephCluster.Spec.CephVersion.Image
 	dataPathMap := config.NewDatalessDaemonDataPathMap(cephCluster.GetNamespace(), cephCluster.Spec.DataDirHostPath)
 	crashEnvVar := generateCrashEnvVar()
-	envVars := append(controller.DaemonEnvVars(&cephCluster.Spec), crashEnvVar)
+	envVars := append(controller.DaemonEnvVars(cephImage), crashEnvVar)
 	volumeMounts := controller.DaemonVolumeMounts(dataPathMap, "", cephCluster.Spec.DataDirHostPath)
 	volumeMounts = append(volumeMounts, keyring.VolumeMount().CrashCollector())
 
@@ -178,7 +179,7 @@ func getCrashDaemonContainer(cephCluster cephv1.CephCluster, cephVersion cephver
 		Command: []string{
 			"ceph-crash",
 		},
-		Image:           cephCluster.Spec.CephVersion.Image,
+		Image:           cephImage,
 		ImagePullPolicy: controller.GetContainerImagePullPolicy(cephCluster.Spec.CephVersion.ImagePullPolicy),
 		Env:             envVars,
 		VolumeMounts:    volumeMounts,
diff --git a/pkg/operator/ceph/cluster/nodedaemon/exporter.go b/pkg/operator/ceph/cluster/nodedaemon/exporter.go
index 7f6134b41..e8d8573db 100644
--- a/pkg/operator/ceph/cluster/nodedaemon/exporter.go
+++ b/pkg/operator/ceph/cluster/nodedaemon/exporter.go
@@ -171,7 +171,7 @@ func getCephExporterDaemonContainer(cephCluster cephv1.CephCluster, cephVersion
 	volumeMounts = append(volumeMounts, keyring.VolumeMount().Admin())
 
 	envVars := append(
-		controller.DaemonEnvVars(&cephCluster.Spec),
+		controller.DaemonEnvVars(cephCluster.Spec.CephVersion.Image),
 		v1.EnvVar{Name: "CEPH_ARGS", Value: fmt.Sprintf("-m $(ROOK_CEPH_MON_HOST) -k %s", keyring.VolumeMount().AdminKeyringFilePath())})
 
 	container := corev1.Container{
diff --git a/pkg/operator/ceph/cluster/nodedaemon/pruner.go b/pkg/operator/ceph/cluster/nodedaemon/pruner.go
index d03b525b2..cb033130e 100644
--- a/pkg/operator/ceph/cluster/nodedaemon/pruner.go
+++ b/pkg/operator/ceph/cluster/nodedaemon/pruner.go
@@ -170,7 +170,8 @@ func (r *ReconcileNode) deletev1betaJob(objectMeta metav1.ObjectMeta) {
 }
 
 func getCrashPruneContainer(cephCluster cephv1.CephCluster, cephVersion cephver.CephVersion) corev1.Container {
-	envVars := append(controller.DaemonEnvVars(&cephCluster.Spec), generateCrashEnvVar())
+	cephImage := cephCluster.Spec.CephVersion.Image
+	envVars := append(controller.DaemonEnvVars(cephImage), generateCrashEnvVar())
 	dataPathMap := config.NewDatalessDaemonDataPathMap(cephCluster.GetNamespace(), cephCluster.Spec.DataDirHostPath)
 	volumeMounts := controller.DaemonVolumeMounts(dataPathMap, "", cephCluster.Spec.DataDirHostPath)
 	volumeMounts = append(volumeMounts, keyring.VolumeMount().CrashCollector())
@@ -187,7 +188,7 @@ func getCrashPruneContainer(cephCluster cephv1.CephCluster, cephVersion cephver.
 		Args: []string{
 			fmt.Sprintf("%d", cephCluster.Spec.CrashCollector.DaysToRetain),
 		},
-		Image:           cephCluster.Spec.CephVersion.Image,
+		Image:           cephImage,
 		ImagePullPolicy: controller.GetContainerImagePullPolicy(cephCluster.Spec.CephVersion.ImagePullPolicy),
 		Env:             envVars,
 		VolumeMounts:    volumeMounts,
diff --git a/pkg/operator/ceph/cluster/osd/spec.go b/pkg/operator/ceph/cluster/osd/spec.go
index 0cf055427..3f3f9fbe0 100644
--- a/pkg/operator/ceph/cluster/osd/spec.go
+++ b/pkg/operator/ceph/cluster/osd/spec.go
@@ -583,7 +583,6 @@ func (c *Cluster) makeDeployment(osdProps osdProperties, osd OSDInfo, provisionC
 			"",
 		))
 
-	envVars = append(envVars, controller.ApplyNetworkEnv(&c.spec)...)
 	podTemplateSpec := v1.PodTemplateSpec{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:   AppName,
diff --git a/pkg/operator/ceph/cluster/rbd/spec.go b/pkg/operator/ceph/cluster/rbd/spec.go
index 6abd32712..72d1eaf59 100644
--- a/pkg/operator/ceph/cluster/rbd/spec.go
+++ b/pkg/operator/ceph/cluster/rbd/spec.go
@@ -122,7 +122,7 @@ func (r *ReconcileCephRBDMirror) makeMirroringDaemonContainer(daemonConfig *daem
 		Image:           r.cephClusterSpec.CephVersion.Image,
 		ImagePullPolicy: controller.GetContainerImagePullPolicy(r.cephClusterSpec.CephVersion.ImagePullPolicy),
 		VolumeMounts:    controller.DaemonVolumeMounts(daemonConfig.DataPathMap, daemonConfig.ResourceName, r.cephClusterSpec.DataDirHostPath),
-		Env:             controller.DaemonEnvVars(r.cephClusterSpec),
+		Env:             controller.DaemonEnvVars(r.cephClusterSpec.CephVersion.Image),
 		Resources:       rbdMirror.Spec.Resources,
 		SecurityContext: controller.PodSecurityContext(),
 		WorkingDir:      config.VarLogCephDir,
diff --git a/pkg/operator/ceph/controller/spec.go b/pkg/operator/ceph/controller/spec.go
index 573c89628..7e919e7b6 100644
--- a/pkg/operator/ceph/controller/spec.go
+++ b/pkg/operator/ceph/controller/spec.go
@@ -394,41 +394,13 @@ func ContainerEnvVarReference(envVarName string) string {
 }
 
 // DaemonEnvVars returns the container environment variables used by all Ceph daemons.
-func DaemonEnvVars(cephClusterSpec *cephv1.ClusterSpec) []v1.EnvVar {
-	networkEnv := ApplyNetworkEnv(cephClusterSpec)
-	cephDaemonsEnvVars := append(k8sutil.ClusterDaemonEnvVars(cephClusterSpec.CephVersion.Image), networkEnv...)
-
+func DaemonEnvVars(image string) []v1.EnvVar {
 	return append(
-		cephDaemonsEnvVars,
+		k8sutil.ClusterDaemonEnvVars(image),
 		config.StoredMonHostEnvVars()...,
 	)
 }
 
-func ApplyNetworkEnv(cephClusterSpec *cephv1.ClusterSpec) []v1.EnvVar {
-	if cephClusterSpec.Network.Connections != nil {
-		msgr2Required := false
-		encryptionEnabled := false
-		compressionEnabled := false
-		if cephClusterSpec.Network.Connections.RequireMsgr2 {
-			msgr2Required = true
-		}
-		if cephClusterSpec.Network.Connections.Encryption != nil && cephClusterSpec.Network.Connections.Encryption.Enabled {
-			encryptionEnabled = true
-		}
-		if cephClusterSpec.Network.Connections.Compression != nil && cephClusterSpec.Network.Connections.Compression.Enabled {
-			compressionEnabled = true
-		}
-		envVarValue := fmt.Sprintf("msgr2_%t_encryption_%t_compression_%t", msgr2Required, encryptionEnabled, compressionEnabled)
-
-		rookMsgr2Env := []v1.EnvVar{{
-			Name:  "ROOK_MSGR2",
-			Value: envVarValue,
-		}}
-		return rookMsgr2Env
-	}
-	return []v1.EnvVar{}
-}
-
 // AppLabels returns labels common for all Rook-Ceph applications which may be useful for admins.
 // App name is the name of the application: e.g., 'rook-ceph-mon', 'rook-ceph-mgr', etc.
 func AppLabels(appName, namespace string) map[string]string {
diff --git a/pkg/operator/ceph/csi/controller.go b/pkg/operator/ceph/csi/controller.go
index fd899a118..18cd42873 100644
--- a/pkg/operator/ceph/csi/controller.go
+++ b/pkg/operator/ceph/csi/controller.go
@@ -30,7 +30,6 @@ 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"
@@ -90,12 +89,6 @@ 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/csi.go b/pkg/operator/ceph/csi/csi.go
index c85364739..e0a7e0bf2 100644
--- a/pkg/operator/ceph/csi/csi.go
+++ b/pkg/operator/ceph/csi/csi.go
@@ -176,14 +176,7 @@ func (r *ReconcileCSI) setParams(ver *version.Info) error {
 	}
 
 	CSIParam.EnableCSIAddonsSideCar = false
-	_, 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") {
+	if strings.EqualFold(k8sutil.GetValue(r.opConfig.Parameters, "CSI_ENABLE_CSIADDONS", "false"), "true") {
 		CSIParam.EnableCSIAddonsSideCar = true
 	}
 
diff --git a/pkg/operator/ceph/file/mds/spec.go b/pkg/operator/ceph/file/mds/spec.go
index 2136fe46d..2f4edfe02 100644
--- a/pkg/operator/ceph/file/mds/spec.go
+++ b/pkg/operator/ceph/file/mds/spec.go
@@ -147,7 +147,7 @@ func (c *Cluster) makeMdsDaemonContainer(mdsConfig *mdsConfig) v1.Container {
 		Image:           c.clusterSpec.CephVersion.Image,
 		ImagePullPolicy: controller.GetContainerImagePullPolicy(c.clusterSpec.CephVersion.ImagePullPolicy),
 		VolumeMounts:    controller.DaemonVolumeMounts(mdsConfig.DataPathMap, mdsConfig.ResourceName, c.clusterSpec.DataDirHostPath),
-		Env:             append(controller.DaemonEnvVars(c.clusterSpec), k8sutil.PodIPEnvVar(podIPEnvVar)),
+		Env:             append(controller.DaemonEnvVars(c.clusterSpec.CephVersion.Image), k8sutil.PodIPEnvVar(podIPEnvVar)),
 		Resources:       c.fs.Spec.MetadataServer.Resources,
 		SecurityContext: controller.PodSecurityContext(),
 		StartupProbe:    controller.GenerateStartupProbeExecDaemon(cephconfig.MdsType, mdsConfig.DaemonID),
diff --git a/pkg/operator/ceph/file/mirror/spec.go b/pkg/operator/ceph/file/mirror/spec.go
index 72212573b..e750d02d8 100644
--- a/pkg/operator/ceph/file/mirror/spec.go
+++ b/pkg/operator/ceph/file/mirror/spec.go
@@ -119,7 +119,7 @@ func (r *ReconcileFilesystemMirror) makeFsMirroringDaemonContainer(daemonConfig
 		Image:           r.cephClusterSpec.CephVersion.Image,
 		ImagePullPolicy: controller.GetContainerImagePullPolicy(r.cephClusterSpec.CephVersion.ImagePullPolicy),
 		VolumeMounts:    controller.DaemonVolumeMounts(daemonConfig.DataPathMap, daemonConfig.ResourceName, r.cephClusterSpec.DataDirHostPath),
-		Env:             controller.DaemonEnvVars(r.cephClusterSpec),
+		Env:             controller.DaemonEnvVars(r.cephClusterSpec.CephVersion.Image),
 		Resources:       fsMirror.Spec.Resources,
 		SecurityContext: controller.PodSecurityContext(),
 		// TODO:
diff --git a/pkg/operator/ceph/nfs/spec.go b/pkg/operator/ceph/nfs/spec.go
index dd03819c8..068b82ed3 100644
--- a/pkg/operator/ceph/nfs/spec.go
+++ b/pkg/operator/ceph/nfs/spec.go
@@ -243,7 +243,7 @@ func (r *ReconcileCephNFS) daemonContainer(nfs *cephv1.CephNFS, cfg daemonConfig
 			nfsConfigMount,
 			dbusMount,
 		},
-		Env:             controller.DaemonEnvVars(r.cephClusterSpec),
+		Env:             controller.DaemonEnvVars(r.cephClusterSpec.CephVersion.Image),
 		Resources:       nfs.Spec.Server.Resources,
 		SecurityContext: controller.PodSecurityContext(),
 	}
diff --git a/pkg/operator/ceph/object/bucket/provisioner.go b/pkg/operator/ceph/object/bucket/provisioner.go
index 53ff585c3..2fef4843b 100644
--- a/pkg/operator/ceph/object/bucket/provisioner.go
+++ b/pkg/operator/ceph/object/bucket/provisioner.go
@@ -104,8 +104,7 @@ func (p Provisioner) Provision(options *apibkt.BucketOptions) (*bktv1alpha1.Obje
 
 	// create the bucket
 	var bucketExists bool
-	var owner string
-	bucketExists, owner, err = p.bucketExists(p.bucketName)
+	bucketExists, err = p.bucketExists(p.bucketName)
 	if err != nil {
 		return nil, errors.Wrapf(err, "error creating bucket %q. failed to check if bucket already exists", p.bucketName)
 	}
@@ -117,8 +116,6 @@ func (p Provisioner) Provision(options *apibkt.BucketOptions) (*bktv1alpha1.Obje
 		if err != nil {
 			return nil, errors.Wrapf(err, "error creating bucket %q", p.bucketName)
 		}
-	} else if owner != options.UserID {
-		return nil, errors.Errorf("bucket %q already exists and is owned by %q for different OBC", p.bucketName, owner)
 	} else {
 		logger.Debugf("bucket %q already exists", p.bucketName)
 	}
@@ -152,7 +149,7 @@ func (p Provisioner) Grant(options *apibkt.BucketOptions) (*bktv1alpha1.ObjectBu
 
 	// check and make sure the bucket exists
 	logger.Infof("Checking for existing bucket %q", p.bucketName)
-	if exists, _, err := p.bucketExists(p.bucketName); !exists {
+	if exists, err := p.bucketExists(p.bucketName); !exists {
 		return nil, errors.Wrapf(err, "bucket %s does not exist", p.bucketName)
 	}
 
diff --git a/pkg/operator/ceph/object/bucket/rgw-handlers.go b/pkg/operator/ceph/object/bucket/rgw-handlers.go
index 435e1b9ae..c1f72bcc5 100644
--- a/pkg/operator/ceph/object/bucket/rgw-handlers.go
+++ b/pkg/operator/ceph/object/bucket/rgw-handlers.go
@@ -5,15 +5,15 @@ import (
 	"github.com/pkg/errors"
 )
 
-func (p *Provisioner) bucketExists(name string) (bool, string, error) {
-	bucket, err := p.adminOpsClient.GetBucketInfo(p.clusterInfo.Context, admin.Bucket{Bucket: name})
+func (p *Provisioner) bucketExists(name string) (bool, error) {
+	_, err := p.adminOpsClient.GetBucketInfo(p.clusterInfo.Context, admin.Bucket{Bucket: name})
 	if err != nil {
 		if errors.Is(err, admin.ErrNoSuchBucket) {
-			return false, "", nil
+			return false, nil
 		}
-		return false, "", errors.Wrapf(err, "failed to get ceph bucket %q", name)
+		return false, errors.Wrapf(err, "failed to get ceph bucket %q", name)
 	}
-	return true, bucket.Owner, nil
+	return true, nil
 }
 
 // Create a Ceph user based on the passed-in name or a generated name. Return the
diff --git a/pkg/operator/ceph/object/spec.go b/pkg/operator/ceph/object/spec.go
index b85e72333..ac33b7171 100644
--- a/pkg/operator/ceph/object/spec.go
+++ b/pkg/operator/ceph/object/spec.go
@@ -359,7 +359,7 @@ func (c *clusterConfig) makeDaemonContainer(rgwConfig *rgwConfig) (v1.Container,
 			controller.DaemonVolumeMounts(c.DataPathMap, rgwConfig.ResourceName, c.clusterSpec.DataDirHostPath),
 			c.mimeTypesVolumeMount(),
 		),
-		Env:             controller.DaemonEnvVars(c.clusterSpec),
+		Env:             controller.DaemonEnvVars(c.clusterSpec.CephVersion.Image),
 		Resources:       c.store.Spec.Gateway.Resources,
 		StartupProbe:    startupProbe,
 		LivenessProbe:   noLivenessProbe(),


Test patch:
diff --git a/.github/workflows/canary-integration-test.yml b/.github/workflows/canary-integration-test.yml
index db06d94f4..5702ca67a 100644
--- a/.github/workflows/canary-integration-test.yml
+++ b/.github/workflows/canary-integration-test.yml
@@ -150,12 +150,12 @@ jobs:
       - name: test external script with restricted_auth_permission flag and without having cephfs_filesystem flag
         run: |
           toolbox=$(kubectl get pod -l app=rook-ceph-tools -n rook-ceph -o jsonpath='{.items[*].metadata.name}')
-          kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --rbd-data-pool-name replicapool --k8s-cluster-name rookstorage --restricted-auth-permission true
+          kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --rbd-data-pool-name replicapool --cluster-name rookstorage --restricted-auth-permission true
 
       - name: test external script with restricted_auth_permission flag
         run: |
           toolbox=$(kubectl get pod -l app=rook-ceph-tools -n rook-ceph -o jsonpath='{.items[*].metadata.name}')
-          kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --cephfs-filesystem-name myfs --rbd-data-pool-name replicapool --k8s-cluster-name rookstorage --restricted-auth-permission true
+          kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --cephfs-filesystem-name myfs --rbd-data-pool-name replicapool --cluster-name rookstorage --restricted-auth-permission true
 
       - name: test the upgrade flag
         run: |
@@ -173,8 +173,8 @@ jobs:
           # print existing client auth
           kubectl -n rook-ceph exec $toolbox -- ceph auth get client.csi-rbd-node-rookstorage-replicapool
           # restricted auth user need to provide --rbd-data-pool-name,
-          #  --k8s-cluster-name and --run-as-user flag while upgrading
-          kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --upgrade --rbd-data-pool-name replicapool --k8s-cluster-name rookstorage  --run-as-user client.csi-rbd-node-rookstorage-replicapool
+          #  --cluster-name and --run-as-user flag while upgrading
+          kubectl -n rook-ceph exec $toolbox -- python3 /etc/ceph/create-external-cluster-resources.py --upgrade --rbd-data-pool-name replicapool --cluster-name rookstorage  --run-as-user client.csi-rbd-node-rookstorage-replicapool
           # print ugraded client auth
           kubectl -n rook-ceph exec $toolbox -- ceph auth get client.csi-rbd-node-rookstorage-replicapool
 
diff --git a/deploy/examples/create-external-cluster-resources-tests.py b/deploy/examples/create-external-cluster-resources-tests.py
index 327581a65..c073213f0 100644
--- a/deploy/examples/create-external-cluster-resources-tests.py
+++ b/deploy/examples/create-external-cluster-resources-tests.py
@@ -70,7 +70,7 @@ class TestRadosJSON(unittest.TestCase):
         )
         print(f"cephCSIKeyring without restricting it to a metadata pool. {csiKeyring}")
         self.rjObj._arg_parser.restricted_auth_permission = True
-        self.rjObj._arg_parser.k8s_cluster_name = "openshift-storage"
+        self.rjObj._arg_parser.cluster_name = "openshift-storage"
         csiKeyring = self.rjObj.create_cephCSIKeyring_user(
             "client.csi-cephfs-provisioner"
         )
diff --git a/pkg/operator/ceph/controller/spec_test.go b/pkg/operator/ceph/controller/spec_test.go
index fa82bd7d8..a2697daaa 100644
--- a/pkg/operator/ceph/controller/spec_test.go
+++ b/pkg/operator/ceph/controller/spec_test.go
@@ -463,97 +463,3 @@ func TestGetContainerImagePullPolicy(t *testing.T) {
 		assert.Equal(t, exepctedImagePullPolicy, imagePullPolicy)
 	})
 }
-
-func TestDaemonEnvVars(t *testing.T) {
-	// No network settings specified
-	want := []v1.EnvVar{}
-
-	clusterSpec := &cephv1.ClusterSpec{}
-	got := ApplyNetworkEnv(clusterSpec)
-	assert.Equal(t, want, got)
-
-	// When Encryption is enabled
-	connections := &cephv1.ConnectionsSpec{
-		Encryption: &cephv1.EncryptionSpec{Enabled: true},
-	}
-
-	clusterSpec.Network = cephv1.NetworkSpec{Connections: connections}
-
-	want = []v1.EnvVar{{
-		Name:  "ROOK_MSGR2",
-		Value: "msgr2_false_encryption_true_compression_false",
-	}}
-
-	got = ApplyNetworkEnv(clusterSpec)
-	assert.Equal(t, want, got)
-
-	// When Compression is enabled
-	connections = &cephv1.ConnectionsSpec{
-		Compression: &cephv1.CompressionSpec{
-			Enabled: true,
-		},
-	}
-	clusterSpec.Network = cephv1.NetworkSpec{Connections: connections}
-
-	want = []v1.EnvVar{{
-		Name:  "ROOK_MSGR2",
-		Value: "msgr2_false_encryption_false_compression_true",
-	}}
-
-	got = ApplyNetworkEnv(clusterSpec)
-	assert.Equal(t, want, got)
-
-	// When Msgr2 is enabled
-	connections = &cephv1.ConnectionsSpec{
-		RequireMsgr2: true,
-	}
-	clusterSpec.Network = cephv1.NetworkSpec{Connections: connections}
-
-	want = []v1.EnvVar{{
-		Name:  "ROOK_MSGR2",
-		Value: "msgr2_true_encryption_false_compression_false",
-	}}
-
-	got = ApplyNetworkEnv(clusterSpec)
-	assert.Equal(t, want, got)
-
-	// When Msgr2, Compression, Encryption are enabled
-	connections = &cephv1.ConnectionsSpec{
-		RequireMsgr2: true,
-		Encryption: &cephv1.EncryptionSpec{
-			Enabled: true,
-		},
-		Compression: &cephv1.CompressionSpec{
-			Enabled: true,
-		},
-	}
-	clusterSpec.Network = cephv1.NetworkSpec{Connections: connections}
-
-	want = []v1.EnvVar{{
-		Name:  "ROOK_MSGR2",
-		Value: "msgr2_true_encryption_true_compression_true",
-	}}
-
-	got = ApplyNetworkEnv(clusterSpec)
-	assert.Equal(t, want, got)
-
-	// When Msgr2 is enabled but Compression, Encryption are disabled
-	connections = &cephv1.ConnectionsSpec{
-		RequireMsgr2: true,
-		Encryption: &cephv1.EncryptionSpec{
-			Enabled: false,
-		},
-		Compression: &cephv1.CompressionSpec{
-			Enabled: false,
-		},
-	}
-	clusterSpec.Network = cephv1.NetworkSpec{Connections: connections}
-
-	want = []v1.EnvVar{{
-		Name:  "ROOK_MSGR2",
-		Value: "msgr2_true_encryption_false_compression_false",
-	}}
-
-	got = ApplyNetworkEnv(clusterSpec)
-	assert.Equal(t, want, got)
-}
diff --git a/pkg/operator/ceph/csi/controller_test.go b/pkg/operator/ceph/csi/controller_test.go
index 78cbde7f9..693739345 100644
--- a/pkg/operator/ceph/csi/controller_test.go
+++ b/pkg/operator/ceph/csi/controller_test.go
@@ -31,7 +31,6 @@ 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"
@@ -106,9 +105,8 @@ func TestCephCSIController(t *testing.T) {
 		fakeClientSet := test.New(t, 1)
 		test.SetFakeKubernetesVersion(fakeClientSet, "v1.21.0")
 		c := &clusterd.Context{
-			Clientset:           fakeClientSet,
-			RookClientset:       rookclient.NewSimpleClientset(),
-			ApiExtensionsClient: apifake.NewSimpleClientset(),
+			Clientset:     fakeClientSet,
+			RookClientset: rookclient.NewSimpleClientset(),
 		}
 		_, err := c.Clientset.CoreV1().Pods(namespace).Create(ctx, test.FakeOperatorPod(namespace), metav1.CreateOptions{})
 		assert.NoError(t, err)
@@ -130,7 +128,7 @@ func TestCephCSIController(t *testing.T) {
 			},
 		}
 		s := scheme.Scheme
-		s.AddKnownTypes(cephv1.SchemeGroupVersion, &cephv1.CephCluster{}, &cephv1.CephClusterList{}, &v1.ConfigMap{})
+		s.AddKnownTypes(cephv1.SchemeGroupVersion, &cephv1.CephCluster{}, &cephv1.CephClusterList{})
 
 		object := []runtime.Object{
 			cephCluster,
@@ -162,9 +160,8 @@ func TestCephCSIController(t *testing.T) {
 		fakeClientSet := test.New(t, 1)
 		test.SetFakeKubernetesVersion(fakeClientSet, "v1.21.0")
 		c := &clusterd.Context{
-			Clientset:           fakeClientSet,
-			RookClientset:       rookclient.NewSimpleClientset(),
-			ApiExtensionsClient: apifake.NewSimpleClientset(),
+			Clientset:     fakeClientSet,
+			RookClientset: rookclient.NewSimpleClientset(),
 		}
 		_, err := c.Clientset.CoreV1().Pods(namespace).Create(ctx, test.FakeOperatorPod(namespace), metav1.CreateOptions{})
 		assert.NoError(t, err)
@@ -208,7 +205,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{}, &v1.ConfigMap{})
+		s.AddKnownTypes(cephv1.SchemeGroupVersion, &cephv1.CephCluster{}, &cephv1.CephClusterList{})
 
 		object := []runtime.Object{
 			cephCluster,