]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/ssh: service[-instance] [start|stop]
authorSage Weil <sage@redhat.com>
Thu, 31 Oct 2019 19:26:05 +0000 (14:26 -0500)
committerSage Weil <sage@redhat.com>
Mon, 4 Nov 2019 14:03:48 +0000 (08:03 -0600)
Note that 'reload' is meaningless for ssh orch...

Signed-off-by: Sage Weil <sage@redhat.com>
doc/mgr/orchestrator_cli.rst
src/pybind/mgr/ssh/module.py

index deca9f0fe64d0b71479f04c8baeca61ab7e1c136..cc21093efc5c7985f8a3fd7217133a0aa3c7dc9c 100644 (file)
@@ -296,7 +296,7 @@ This is an overview of the current implementation status of the orchestrators.
  device {ident,fault}-(on,off}       ⚪         ⚪       ⚪         ⚪
  device ls                           ✔️         ✔️       ✔️         ✔️
  service ls                          ⚪         ✔️       ✔️         ✔
- service-instance status             â\9aª         â\9aª       â\9aª         â\9aª
+ service-instance status             â\9aª         â\9aª       â\9aª         â\9c\94
  iscsi {stop,start,reload}           ⚪         ⚪       ⚪         ⚪
  iscsi add                           ⚪         ⚪       ⚪         ⚪
  iscsi rm                            ⚪         ⚪       ⚪         ⚪
index ba80a12df1db8eab4b801b5875e17f97bc880620..5beafa2592693a694435881dce365ebcbe3f1882 100644 (file)
@@ -500,6 +500,45 @@ class SSHOrchestrator(MgrModule, orchestrator.Orchestrator):
                                     node_name=node_name)
         return orchestrator.TrivialReadCompletion(result)
 
+    def service_action(self, action, service_type,
+                       service_name=None,
+                       service_id=None):
+        self.log.debug('service_action action %s type %s name %s id %s' % (
+            action, service_type, service_name, service_id))
+        if action == 'reload':
+            return orchestrator.TrivialReadCompletion(
+                ["Reload is a no-op"])
+        daemons = self._get_services(
+            service_type,
+            service_name=service_name,
+            service_id=service_id)
+        results = []
+        for d in daemons:
+            results.append(self._worker_pool.apply_async(
+                self._service_action, (d.service_type, d.service_instance,
+                                       d.nodename, action)))
+        if not results:
+            n = service_name
+            if n:
+                n += '-*'
+            raise OrchestratorError('Unable to find %s.%s%s daemon(s)' % (
+                service_type, service_id, n))
+        return SSHWriteCompletion(results)
+
+    def _service_action(self, service_type, service_id, host, action):
+        actions = {
+            'start': ['reset-failed', 'start'],
+            'stop': ['stop'],
+        }
+        name = '%s.%s' % (service_type, service_id)
+        for a in actions[action]:
+            out, code = self._run_ceph_daemon(
+                host, name, 'unit',
+                ['--name', name, a])
+            self.log.debug('_service_action code %s out %s' % (code, out))
+        return "{} {} from host '{}'".format(action, name, host)
+
+
     def get_inventory(self, node_filter=None, refresh=False):
         """
         Return the storage inventory of nodes matching the given filter.