]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/orchestrator_cli: convert service add/rm commands to be type-specific
authorJeff Layton <jlayton@redhat.com>
Thu, 20 Dec 2018 11:56:01 +0000 (06:56 -0500)
committerJeff Layton <jlayton@redhat.com>
Mon, 14 Jan 2019 12:11:36 +0000 (07:11 -0500)
When adding services, we often need different sets of arguments
depending on the service type. Convert the "service add" and "service
rm" commands into separate commands for each service type.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
doc/mgr/orchestrator_cli.rst
src/pybind/mgr/orchestrator_cli/module.py

index e91f25226cd818fcecd440375917cff19dc673b2..a1c514fc72ad26374bc24711239d2bd2b9d1a565 100644 (file)
@@ -209,10 +209,10 @@ Sizing: the ``size`` parameter gives the number of daemons in the cluster
 
 Creating/growing/shrinking services::
 
-    ceph orchestrator service update <type> <name> <size> [host…]
-    ceph orchestrator service add <type> <what>
+    ceph orchestrator {mds,rgw} update <name> <size> [host…]
+    ceph orchestrator {mds,rgw} add <name>
 
-e.g., ``ceph orchestrator service update mds myfs 3 host1 host2 host3``
+e.g., ``ceph orchestrator mds update myfs 3 host1 host2 host3``
 
 Start/stop/reload::
 
@@ -223,5 +223,5 @@ Start/stop/reload::
 
 Removing services::
 
-    ceph orchestrator service rm <type> <name>
+    ceph orchestrator {mds,rgw} rm <name>
 
index 43ed0c5cd80ed5d38287e5807d207d5d2f6a4f18..1d5bf33a5e2795b716fe46e2b3d4f076b4c28ecb 100644 (file)
@@ -40,17 +40,39 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule):
             "perm": "r"
         },
         {
-            'cmd': "orchestrator service add "
-                   "name=svc_type,type=CephString "
+            'cmd': "orchestrator osd add "
                    "name=svc_arg,type=CephString ",
-            "desc": "Create a service of any type",
+            "desc": "Create an OSD service",
             "perm": "rw"
         },
         {
-            'cmd': "orchestrator service rm "
-                   "name=svc_type,type=CephString "
+            'cmd': "orchestrator osd rm "
+                   "name=svc_id,type=CephString ",
+            "desc": "Remove an OSD service",
+            "perm": "rw"
+        },
+        {
+            'cmd': "orchestrator mds add "
+                   "name=svc_arg,type=CephString ",
+            "desc": "Create an MDS service",
+            "perm": "rw"
+        },
+        {
+            'cmd': "orchestrator mds rm "
                    "name=svc_id,type=CephString ",
-            "desc": "Remove a service",
+            "desc": "Remove an MDS service",
+            "perm": "rw"
+        },
+        {
+            'cmd': "orchestrator rgw add "
+                   "name=svc_arg,type=CephString ",
+            "desc": "Create an RGW service",
+            "perm": "rw"
+        },
+        {
+            'cmd': "orchestrator rgw rm "
+                   "name=svc_id,type=CephString ",
+            "desc": "Remove an RGW service",
             "perm": "rw"
         },
         {
@@ -157,57 +179,53 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule):
 
             return HandleCommandResult(stdout="\n".join(lines))
 
-    def _service_add(self, cmd):
-        svc_type = cmd['svc_type']
-        if svc_type == "osd":
-            device_spec = cmd['svc_arg']
-            try:
-                node_name, block_device = device_spec.split(":")
-            except TypeError:
-                return HandleCommandResult(-errno.EINVAL,
-                                           stderr="Invalid device spec, should be <node>:<device>")
-
-            spec = orchestrator.OsdCreationSpec()
-            spec.node = node_name
-            spec.format = "bluestore"
-            spec.drive_group = orchestrator.DriveGroupSpec([block_device])
-
-            completion = self.create_osds(spec)
-            self._orchestrator_wait([completion])
-
-            return HandleCommandResult()
-
-        elif svc_type == "mds":
-            fs_name = cmd['svc_arg']
-
-            spec = orchestrator.StatelessServiceSpec()
-            spec.name = fs_name
+    def _osd_add(self, cmd):
+        device_spec = cmd['svc_arg']
+        try:
+            node_name, block_device = device_spec.split(":")
+        except TypeError:
+            return HandleCommandResult(-errno.EINVAL,
+                                       stderr="Invalid device spec, should be <node>:<device>")
 
-            completion = self.add_stateless_service(svc_type, spec)
-            self._orchestrator_wait([completion])
+        spec = orchestrator.OsdCreationSpec()
+        spec.node = node_name
+        spec.format = "bluestore"
+        spec.drive_group = orchestrator.DriveGroupSpec([block_device])
 
-            return HandleCommandResult()
-        elif svc_type == "rgw":
-            store_name = cmd['svc_arg']
+        completion = self.create_osds(spec)
+        self._orchestrator_wait([completion])
 
-            spec = orchestrator.StatelessServiceSpec()
-            spec.name = store_name
+        return HandleCommandResult()
 
-            completion = self.add_stateless_service(svc_type, spec)
-            self._orchestrator_wait([completion])
+    def _add_stateless_svc(self, svc_type, spec):
+        completion = self.add_stateless_service(svc_type, spec)
+        self._orchestrator_wait([completion])
+        return HandleCommandResult()
 
-            return HandleCommandResult()
-        else:
-            raise NotImplementedError(svc_type)
+    def _mds_add(self, cmd):
+        spec = orchestrator.StatelessServiceSpec()
+        spec.name = cmd['svc_arg']
+        return self._add_stateless_svc("mds", spec)
 
-    def _service_rm(self, cmd):
-        svc_type = cmd['svc_type']
-        svc_id = cmd['svc_id']
+    def _rgw_add(self, cmd):
+        spec = orchestrator.StatelessServiceSpec()
+        spec.name = cmd['svc_arg']
+        return self._add_stateless_svc("rgw", spec)
 
+    def _rm_stateless_svc(self, svc_type, svc_id):
         completion = self.remove_stateless_service(svc_type, svc_id)
         self._orchestrator_wait([completion])
         return HandleCommandResult()
 
+    def _osd_rm(self, cmd):
+        return self._rm_stateless_svc("osd", cmd['svc_id'])
+
+    def _mds_rm(self, cmd):
+        return self._rm_stateless_svc("mds", cmd['svc_id'])
+
+    def _rgw_rm(self, cmd):
+        return self._rm_stateless_svc("rgw", cmd['svc_id'])
+
     def _set_backend(self, cmd):
         """
         We implement a setter command instead of just having the user
@@ -289,10 +307,18 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule):
             return self._list_services(cmd)
         elif cmd['prefix'] == "orchestrator service status":
             return self._list_services(cmd)  # TODO: create more detailed output
-        elif cmd['prefix'] == "orchestrator service add":
-            return self._service_add(cmd)
-        elif cmd['prefix'] == "orchestrator service rm":
-            return self._service_rm(cmd)
+        elif cmd['prefix'] == "orchestrator osd add":
+            return self._osd_add(cmd)
+        elif cmd['prefix'] == "orchestrator osd rm":
+            return self._osd_rm(cmd)
+        elif cmd['prefix'] == "orchestrator mds add":
+            return self._mds_add(cmd)
+        elif cmd['prefix'] == "orchestrator mds rm":
+            return self._mds_rm(cmd)
+        elif cmd['prefix'] == "orchestrator rgw add":
+            return self._rgw_add(cmd)
+        elif cmd['prefix'] == "orchestrator rgw rm":
+            return self._rgw_rm(cmd)
         elif cmd['prefix'] == "orchestrator set backend":
             return self._set_backend(cmd)
         elif cmd['prefix'] == "orchestrator status":