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.
"""
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
"""
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 "