]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: Warn about OSDs to be deleted manually when deleting an OSD service 40073/head
authorJuan Miguel Olmo Martínez <jolmomar@redhat.com>
Thu, 25 Mar 2021 15:59:55 +0000 (16:59 +0100)
committerJuan Miguel Olmo Martínez <jolmomar@redhat.com>
Thu, 25 Mar 2021 16:10:31 +0000 (17:10 +0100)
Provide information about what OSDs must be deleted in order to delete
completelly a OSD Service.

Signed-off-by: Juan Miguel Olmo Martínez <jolmomar@redhat.com>
src/pybind/mgr/cephadm/module.py

index 072db303bdf199534247791d2723ac09db242f51..a45e97c1563107a5a7aa35546264df8743bf262b 100644 (file)
@@ -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.'