From 84ac0b326dca8e9d44594a319c020250ea0709c0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Juan=20Miguel=20Olmo=20Mart=C3=ADnez?= Date: Thu, 25 Mar 2021 16:59:55 +0100 Subject: [PATCH] mgr/cephadm: Warn about OSDs to be deleted manually when deleting an OSD service MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Provide information about what OSDs must be deleted in order to delete completelly a OSD Service. Signed-off-by: Juan Miguel Olmo Martínez --- src/pybind/mgr/cephadm/module.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index 072db303bdf..a45e97c1563 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -1797,10 +1797,26 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule, if self.spec_store[service_name].spec.service_type in ('mon', 'mgr'): return f'Unable to remove {service_name} service.\n' \ f'Note, you might want to mark the {service_name} service as "unmanaged"' - found = self.spec_store.rm(service_name) + + # Report list of affected OSDs + osds_msg = {} + if service_name.startswith('osd.'): + for h, dm in self.cache.get_daemons_with_volatile_status(): + osds_to_remove = [] + for name, dd in dm.items(): + if dd.daemon_type == 'osd' and (dd.service_name() == service_name or not dd.osdspec_affinity): + osds_to_remove.append(str(dd.daemon_id)) + if osds_to_remove: + osds_msg[h] = osds_to_remove + + found = self.spec_store.rm(service_name) or osds_msg if found: self._kick_serve_loop() - return 'Removed service %s' % service_name + if osds_msg: + return f'The service {service_name} will be deleted once the following OSDs: {osds_msg} ' \ + f'will be deleted manually.' + else: + return f'Removed service {service_name}' else: # must be idempotent: still a success. return f'Failed to remove service. <{service_name}> was not found.' -- 2.47.3