]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/rook: Refactor nfs add/apply methods
authorVarsha Rao <varao@redhat.com>
Wed, 28 Oct 2020 14:50:41 +0000 (20:20 +0530)
committerVarsha Rao <varao@redhat.com>
Tue, 3 Nov 2020 06:41:34 +0000 (12:11 +0530)
Fixes: https://tracker.ceph.com/issues/47923
Signed-off-by: Varsha Rao <varao@redhat.com>
src/pybind/mgr/rook/module.py
src/pybind/mgr/rook/rook_cluster.py

index 68763eb4ed42f519aee3d5175610b6d7a1502ae2..1d6707237ab07161118cdc19f4a9fcc6ae98b14c 100644 (file)
@@ -413,11 +413,6 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
             mgr=self
         )
 
-    def add_nfs(self, spec):
-        # type: (NFSServiceSpec) -> RookCompletion
-        return self._service_add_decorate("NFS", spec,
-                                          self.rook_cluster.add_nfsgw)
-
     def _service_rm_decorate(self, typename, name, func):
         return write_completion(
             on_complete=lambda : func(name),
@@ -463,12 +458,8 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
 
     def apply_nfs(self, spec):
         # type: (NFSServiceSpec) -> RookCompletion
-        num = spec.placement.count
-        return write_completion(
-            lambda: self.rook_cluster.update_nfs_count(spec.service_id, num),
-            "Updating NFS server count in {0} to {1}".format(spec.service_id, num),
-            mgr=self
-        )
+        return self._service_add_decorate("NFS", spec,
+                                          self.rook_cluster.apply_nfsgw)
 
     def remove_daemons(self, names):
         return write_completion(
index ad3590145eba7bb3a6babe949a5d6a4e0fda22db..f6f8cdc717da9e70f79ff5420ce3b6c2a07db250 100644 (file)
@@ -21,7 +21,7 @@ from urllib.parse import urljoin
 from urllib3.exceptions import ProtocolError
 
 from ceph.deployment.drive_group import DriveGroupSpec
-from ceph.deployment.service_spec import ServiceSpec
+from ceph.deployment.service_spec import ServiceSpec, NFSServiceSpec
 from mgr_util import merge_dicts
 
 try:
@@ -451,32 +451,41 @@ class RookCluster(object):
             cos.CephObjectStore, 'cephobjectstores', name,
             _update_zone, _create_zone)
 
-    def add_nfsgw(self, spec):
+    def apply_nfsgw(self, spec: NFSServiceSpec) -> None:
         # TODO use spec.placement
         # TODO warn if spec.extended has entries we don't kow how
         #      to action.
+        # TODO Number of pods should be based on the list of hosts in the
+        #      PlacementSpec.
+        count = spec.placement.count or 1
+        def _update_nfs(new: cnfs.CephNFS) -> cnfs.CephNFS:
+            new.spec.server.active = count
+            return new
 
-        rook_nfsgw = cnfs.CephNFS(
-            apiVersion=self.rook_env.api_name,
-            metadata=dict(
-                name=spec.service_id,
-                namespace=self.rook_env.namespace,
-            ),
-            spec=cnfs.Spec(
-                rados=cnfs.Rados(
-                    pool=spec.pool
-                ),
-                server=cnfs.Server(
-                    active=spec.placement.count
-                )
-            )
-        )
+        def _create_nfs() -> cnfs.CephNFS:
+            rook_nfsgw = cnfs.CephNFS(
+                    apiVersion=self.rook_env.api_name,
+                    metadata=dict(
+                        name=spec.service_id,
+                        namespace=self.rook_env.namespace,
+                        ),
+                    spec=cnfs.Spec(
+                        rados=cnfs.Rados(
+                            pool=spec.pool
+                            ),
+                        server=cnfs.Server(
+                            active=count
+                            )
+                        )
+                    )
+
+            if spec.namespace:
+                rook_nfsgw.spec.rados.namespace = spec.namespace
 
-        if spec.namespace:
-            rook_nfsgw.spec.rados.namespace = spec.namespace
+            return rook_nfsgw
 
-        with self.ignore_409("NFS cluster '{0}' already exists".format(spec.service_id)):
-            self.rook_api_post("cephnfses/", body=rook_nfsgw.to_json())
+        return self._create_or_patch(cnfs.CephNFS, 'cephnfses', spec.service_id,
+                _update_nfs, _create_nfs)
 
     def rm_service(self, rooktype, service_id):
 
@@ -510,13 +519,6 @@ class RookCluster(object):
             return new
         return self._patch(ccl.CephCluster, 'cephclusters', self.rook_env.cluster_name, _update_mon_count)
 
-    def update_nfs_count(self, svc_id, newcount):
-        def _update_nfs_count(current, new):
-            # type: (cnfs.CephNFS, cnfs.CephNFS) -> cnfs.CephNFS
-            new.spec.server.active = newcount
-            return new
-        return self._patch(cnfs.CephNFS, 'cephnfses',svc_id, _update_nfs_count)
-
     def add_osds(self, drive_group, matching_hosts):
         # type: (DriveGroupSpec, List[str]) -> str
         """