]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/cephadm: Purge deleted services
authorSebastian Wagner <sebastian.wagner@suse.com>
Wed, 13 Jan 2021 13:12:24 +0000 (14:12 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Tue, 9 Feb 2021 09:12:44 +0000 (10:12 +0100)
If no daemon is deployed for a deleted service,
purge it.

Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/serve.py
src/pybind/mgr/cephadm/services/cephadmservice.py

index a838ca04920c6905378dcddc0c224c20d333f8c5..d8a42cddb4e756b26638f7eaf6432dc7954c5914 100644 (file)
@@ -1696,9 +1696,6 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
         found = self.spec_store.rm(service_name)
         if found:
             self._kick_serve_loop()
-            service = self.cephadm_services.get(service_name, None)
-            if service:
-                service.purge()
             return 'Removed service %s' % service_name
         else:
             # must be idempotent: still a success.
index 8002a268a32455dd979662490480f3cc6f1c084e..d39038f5c43dfd5b7473e316eca8367061f9751c 100644 (file)
@@ -85,6 +85,8 @@ class CephadmServe:
 
                     self._check_daemons()
 
+                    self._purge_deleted_services()
+
                     if self.mgr.upgrade.continue_upgrade():
                         continue
 
@@ -686,6 +688,21 @@ class CephadmServe:
                 self.mgr._get_cephadm_service(daemon_type_to_service(
                     daemon_type)).daemon_check_post(daemon_descs)
 
+    def _purge_deleted_services(self) -> None:
+        existing_services = self.mgr.spec_store.all_specs.items()
+        for service_name, spec in list(existing_services):
+            if service_name not in self.mgr.spec_store.spec_deleted:
+                continue
+            if self.mgr.cache.get_daemons_by_service(service_name):
+                continue
+            if spec.service_type in ['mon', 'mgr']:
+                continue
+
+            logger.info(f'Purge service {service_name}')
+
+            self.mgr.cephadm_services[spec.service_type].purge(service_name)
+            self.mgr.spec_store.finally_rm(service_name)
+
     def convert_tags_to_repo_digest(self) -> None:
         if not self.mgr.use_repo_digest:
             return
index d9a241a5f040ac52cc97059bdcce3d152531f33e..89b7d0aacff3effe7c344a6c44c39743e7fb37fb 100644 (file)
@@ -280,7 +280,7 @@ class CephadmService(metaclass=ABCMeta):
         assert self.TYPE == daemon_type_to_service(daemon.daemon_type)
         logger.debug(f'Post remove daemon {self.TYPE}.{daemon.daemon_id}')
 
-    def purge(self) -> None:
+    def purge(self, service_name: str) -> None:
         """Called to carry out any purge tasks following service removal"""
         logger.debug(f'Purge called for {self.TYPE} - no action taken')
 
@@ -974,6 +974,6 @@ class CephadmExporter(CephadmService):
         }
         return config, deps
 
-    def purge(self) -> None:
+    def purge(self, service_name: str) -> None:
         logger.info("Purging cephadm-exporter settings from mon K/V store")
         self.mgr._clear_exporter_config_settings()