]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/orch: add 'orch service rm'
authorSage Weil <sage@redhat.com>
Tue, 11 Feb 2020 16:21:00 +0000 (10:21 -0600)
committerSage Weil <sage@redhat.com>
Wed, 12 Feb 2020 17:14:17 +0000 (11:14 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/orchestrator.py
src/pybind/mgr/orchestrator_cli/module.py

index 022a7a02e06f9da74cb8b0a52bf58174df0b8a96..e1cf1eebd2747fb03fdca63410c96c4d4510a90d 100644 (file)
@@ -1469,6 +1469,25 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin):
             return self._remove_daemon(args)
         return self._get_daemons().then(_filter)
 
+    def remove_service(self, service_type, service_name):
+        if service_name:
+            prefix = service_name + '.'
+        else:
+            prefix = ''
+        def _filter(daemons):
+            args = []
+            for d in daemons:
+                if d.daemon_type == service_type and \
+                   d.daemon_id.startswith(prefix):
+                    args.append(
+                        ('%s.%s' % (d.daemon_type, d.daemon_id), d.nodename)
+                    )
+            if not args:
+                raise OrchestratorError('Unable to find daemons in %s.%s* service' % (
+                    service_type, prefix))
+            return self._remove_daemon(args)
+        return self._get_daemons(daemon_type=service_type).then(_filter)
+
     def get_inventory(self, node_filter=None, refresh=False):
         """
         Return the storage inventory of nodes matching the given filter.
index 8cf66e7dfead8c44d3739ac1989adef35aa1533a..ae8e45a1c193db8ab450de22498282d723bd5bff 100644 (file)
@@ -887,6 +887,15 @@ class Orchestrator(object):
         """
         raise NotImplementedError()
 
+    def remove_service(self, service_type, service_name=None):
+        # type: (str, Optional[str]) -> Completion
+        """
+        Remove a service (a collection of daemons).
+
+        :return: None
+        """
+        raise NotImplementedError()
+
     def service_action(self, action, service_type, service_name):
         # type: (str, str, str) -> Completion
         """
index 7224629f8f46f3505d156b0d7500b47945d2e3dc..93542f2f79926fe49bde0ed29fe9da8189a2e014 100644 (file)
@@ -634,6 +634,21 @@ Usage:
         orchestrator.raise_if_exception(completion)
         return HandleCommandResult(stdout=completion.result_str())
 
+    @orchestrator._cli_write_command(
+        'orch service rm',
+        "name=name,type=CephString",
+        'Remove a service')
+    def _service_rm(self, name):
+        if '.' in name:
+            (service_type, service_name) = name.split('.')
+        else:
+            service_type = name;
+            service_name = None
+        completion = self.remove_service(service_type, service_name)
+        self._orchestrator_wait([completion])
+        orchestrator.raise_if_exception(completion)
+        return HandleCommandResult(stdout=completion.result_str())
+
     @orchestrator._cli_write_command(
         'orch mgr update',
         "name=num,type=CephInt,req=false "