]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/orchestrator_cli: Add service and service-instance start/stop/reload 25649/head
authorTim Serong <tserong@suse.com>
Fri, 21 Dec 2018 06:06:57 +0000 (17:06 +1100)
committerTim Serong <tserong@suse.com>
Tue, 15 Jan 2019 06:11:06 +0000 (17:11 +1100)
Signed-off-by: Tim Serong <tserong@suse.com>
qa/tasks/mgr/test_orchestrator_cli.py
src/pybind/mgr/orchestrator_cli/module.py
src/pybind/mgr/test_orchestrator/module.py

index b6a4cc61e541bae4b37058415fe894d026fb8cad..c8964f25fac9a724bf9e7d89ac9e4477a641446d 100644 (file)
@@ -31,3 +31,13 @@ class TestOrchestratorCli(MgrTestCase):
     def test_service_ls(self):
         ret = self._orch_cmd("service", "ls")
         self.assertIn("ceph-mgr", ret)
+
+    def test_service_action(self):
+        self._orch_cmd("service", "reload", "mds", "cephfs")
+        self._orch_cmd("service", "stop", "mds", "cephfs")
+        self._orch_cmd("service", "start", "mds", "cephfs")
+
+    def test_service_instance_action(self):
+        self._orch_cmd("service-instance", "reload", "mds", "a")
+        self._orch_cmd("service-instance", "stop", "mds", "a")
+        self._orch_cmd("service-instance", "start", "mds", "a")
index 3caff801191a23462e2f3fabb8aaf214ce771be4..51b06a6c8376628410becac4a4004124af298f5b 100644 (file)
@@ -89,6 +89,24 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule):
             "desc": "Remove an NFS service",
             "perm": "rw"
         },
+        {
+            'cmd': "orchestrator service "
+                   "name=action,type=CephChoices,"
+                   "strings=start|stop|reload "
+                   "name=svc_type,type=CephString "
+                   "name=svc_name,type=CephString",
+            "desc": "Start, stop or reload an entire service (i.e. all daemons)",
+            "perm": "rw"
+        },
+        {
+            'cmd': "orchestrator service-instance "
+                   "name=action,type=CephChoices,"
+                   "strings=start|stop|reload "
+                   "name=svc_type,type=CephString "
+                   "name=svc_id,type=CephString",
+            "desc": "Start, stop or reload a specific service instance",
+            "perm": "rw"
+        },
         {
             'cmd': "orchestrator set backend "
                    "name=module,type=CephString,req=true",
@@ -255,6 +273,26 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule):
     def _nfs_rm(self, cmd):
         return self._rm_stateless_svc("nfs", cmd['svc_id'])
 
+    def _service_action(self, cmd):
+        action = cmd['action']
+        svc_type = cmd['svc_type']
+        svc_name = cmd['svc_name']
+
+        completion = self.service_action(action, svc_type, service_name=svc_name)
+        self._orchestrator_wait([completion])
+
+        return HandleCommandResult()
+
+    def _service_instance_action(self, cmd):
+        action = cmd['action']
+        svc_type = cmd['svc_type']
+        svc_id = cmd['svc_id']
+
+        completion = self.service_action(action, svc_type, service_id=svc_id)
+        self._orchestrator_wait([completion])
+
+        return HandleCommandResult()
+
     def _set_backend(self, cmd):
         """
         We implement a setter command instead of just having the user
@@ -352,6 +390,10 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule):
             return self._nfs_add(cmd)
         elif cmd['prefix'] == "orchestrator nfs rm":
             return self._nfs_rm(cmd)
+        elif cmd['prefix'] == "orchestrator service":
+            return self._service_action(cmd)
+        elif cmd['prefix'] == "orchestrator service-instance":
+            return self._service_instance_action(cmd)
         elif cmd['prefix'] == "orchestrator set backend":
             return self._set_backend(cmd)
         elif cmd['prefix'] == "orchestrator status":
index 41162b6db9000ecc301d8fe61638a9354edc676f..88b3391acd10767418f74d88563b8afe6cd75cc9 100644 (file)
@@ -249,3 +249,9 @@ class TestOrchestrator(MgrModule, orchestrator.Orchestrator):
     def create_osds(self, spec):
         raise NotImplementedError(str(spec))
 
+    def service_action(self, action, service_type, service_name=None, service_id=None):
+        return TestWriteCompletion(
+            lambda: True, None,
+            "Pretending to {} service {} (name={}, id={})".format(
+                action, service_type, service_name, service_id))
+