]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: Add event when deploying a daemon
authorSebastian Wagner <sebastian.wagner@suse.com>
Sat, 6 Jun 2020 22:54:35 +0000 (00:54 +0200)
committerSebastian Wagner <sebastian.wagner@suse.com>
Thu, 23 Jul 2020 13:20:10 +0000 (15:20 +0200)
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
(cherry picked from commit 960f6bfac0d18eb92a017ea21ca97efa1a12b7cf)

src/pybind/mgr/cephadm/inventory.py
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/tests/test_cephadm.py

index 5ae52342d43685fcc2ca98eb2a7127a7812b7b9b..3bb8c81d54e915ec7f342224856dad766ae7c42a 100644 (file)
@@ -347,16 +347,16 @@ class HostCache():
         return r
 
     def get_daemons_with_volatile_status(self) -> Iterator[Tuple[str, Dict[str, orchestrator.DaemonDescription]]]:
-        for host, dm in self.daemons.items():
+        def alter(host, dd_orig: orchestrator.DaemonDescription) -> orchestrator.DaemonDescription:
+            dd = copy(dd_orig)
             if host in self.mgr.offline_hosts:
-                def set_offline(dd: orchestrator.DaemonDescription) -> orchestrator.DaemonDescription:
-                    ret = copy(dd)
-                    ret.status = -1
-                    ret.status_desc = 'host is offline'
-                    return ret
-                yield host, {name: set_offline(d) for name, d in dm.items()}
-            else:
-                yield host, dm
+                dd.status = -1
+                dd.status_desc = 'host is offline'
+            dd.events = self.mgr.events.get_for_daemon(dd.name())
+            return dd
+
+        for host, dm in self.daemons.items():
+            yield host, {name: alter(host, d) for name, d in dm.items()}
 
     def get_daemons_by_service(self, service_name):
         # type: (str) -> List[orchestrator.DaemonDescription]
@@ -499,7 +499,7 @@ class EventStore():
         unknowns: List[str] = []
         daemons = self.mgr.cache.get_daemon_names()
         specs = self.mgr.spec_store.specs.keys()
-        for k_s, v in self.events.keys():
+        for k_s, v in self.events.items():
             kind, subject = k_s.split(':')
             if kind == 'service':
                 if subject not in specs:
index e679947d1bb7ad29bb74cff59529591f663035ab..caa6de4b4c8bc63a7a909f60eaeb8e9225bc6f57 100644 (file)
@@ -29,7 +29,7 @@ from cephadm.services.cephadmservice import CephadmDaemonSpec
 from mgr_module import MgrModule, HandleCommandResult
 import orchestrator
 from orchestrator import OrchestratorError, OrchestratorValidationError, HostSpec, \
-    CLICommandMeta
+    CLICommandMeta, OrchestratorEvent
 from orchestrator._interface import GenericSpec
 
 from . import remotes
@@ -1772,8 +1772,14 @@ you may want to run:
         self.cache.invalidate_host_daemons(daemon_spec.host)
         self.cache.update_daemon_config_deps(daemon_spec.host, daemon_spec.name(), deps, start_time)
         self.cache.save_host(daemon_spec.host)
-        return "{} {} on host '{}'".format(
+        msg = "{} {} on host '{}'".format(
             'Reconfigured' if reconfig else 'Deployed', daemon_spec.name(), daemon_spec.host)
+        if not code:
+            self.events.for_daemon(daemon_spec.name(), OrchestratorEvent.INFO, msg)
+        else:
+            what = 'reconfigure' if reconfig else 'deploy'
+            self.events.for_daemon(daemon_spec.name(), OrchestratorEvent.ERROR, f'Failed to {what}: {err}')
+        return msg
 
     @forall_hosts
     def _remove_daemons(self, name, host) -> str:
index f39761a0493a373279a7c178514a36e4ef10c42a..d4b387ca03e81f950af9340014e82a72aeb68906 100644 (file)
@@ -92,12 +92,13 @@ class TestCephadm(object):
 
             c = cephadm_module.list_daemons()
 
-            def remove_id(dd):
+            def remove_id_events(dd):
                 out = dd.to_json()
                 del out['daemon_id']
+                del out['events']
                 return out
 
-            assert [remove_id(dd) for dd in wait(cephadm_module, c)] == [
+            assert [remove_id_events(dd) for dd in wait(cephadm_module, c)] == [
                 {
                     'daemon_type': 'mds',
                     'hostname': 'test',