]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/cephadm: return HandleCommandResult from ok_to_stop
authorMichael Fritch <mfritch@suse.com>
Tue, 21 Jul 2020 21:26:43 +0000 (15:26 -0600)
committerMichael Fritch <mfritch@suse.com>
Tue, 28 Jul 2020 21:54:47 +0000 (15:54 -0600)
- return output from the result of the ok_to_stop command
- log ok-to-stop result during all invocations

Signed-off-by: Michael Fritch <mfritch@suse.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/services/cephadmservice.py
src/pybind/mgr/cephadm/upgrade.py

index 125fc0ac0f7a4a99b47b15010d8cb7b004a44de9..e025a2091866adde2aa56fcdd90bd505494af768 100644 (file)
@@ -1903,8 +1903,12 @@ you may want to run:
             r = True
 
         # remove any?
-        while remove_daemon_hosts and not self.cephadm_services[daemon_type].ok_to_stop(
-                [d.daemon_id for d in remove_daemon_hosts]):
+        def _ok_to_stop(remove_daemon_hosts: Set[orchestrator.DaemonDescription]) -> bool:
+            daemon_ids = [d.daemon_id for d in remove_daemon_hosts]
+            r = self.cephadm_services[daemon_type].ok_to_stop(daemon_ids)
+            return not r.retval
+
+        while remove_daemon_hosts and not _ok_to_stop(remove_daemon_hosts):
             # let's find a subset that is ok-to-stop
             remove_daemon_hosts.pop()
         for d in remove_daemon_hosts:
index 6a1bda7c49ff8003e7adaeb08876a46db62c5ef0..d1ecb6ff498e221e769c8b30d8d99c418e24542e 100644 (file)
@@ -3,7 +3,7 @@ import logging
 from abc import ABCMeta, abstractmethod
 from typing import TYPE_CHECKING, List, Callable, Any, TypeVar, Generic,  Optional, Dict, Any, Tuple
 
-from mgr_module import MonCommandFailed
+from mgr_module import HandleCommandResult, MonCommandFailed
 
 from ceph.deployment.service_spec import ServiceSpec, RGWSpec
 from orchestrator import OrchestratorError, DaemonDescription
@@ -191,23 +191,28 @@ class CephadmService(metaclass=ABCMeta):
 
 
 
-    def ok_to_stop(self, daemon_ids: List[str]) -> bool:
+    def ok_to_stop(self, daemon_ids: List[str]) -> HandleCommandResult:
         names = [f'{self.TYPE}.{d_id}' for d_id in daemon_ids]
+        out = f'It is presumed safe to stop {names}'
+        err = f'It is NOT safe to stop {names}'
 
         if self.TYPE not in ['mon', 'osd', 'mds']:
-            logger.info('Upgrade: It is presumed safe to stop %s' % names)
-            return True
+            logger.info(out)
+            return HandleCommandResult(0, out, None)
 
-        ret, out, err = self.mgr.mon_command({
+        r = HandleCommandResult(*self.mgr.mon_command({
             'prefix': f'{self.TYPE} ok-to-stop',
             'ids': daemon_ids,
-        })
+        }))
 
-        if ret:
-            logger.info(f'It is NOT safe to stop {names}: {err}')
-            return False
+        if r.retval:
+            err = f'{err}: {r.stderr}' if r.stderr else err
+            logger.error(err)
+            return HandleCommandResult(r.retval, r.stdout, err)
 
-        return True
+        out = f'{out}: {r.stdout}' if r.stdout else out
+        logger.info(out)
+        return HandleCommandResult(r.retval, out, r.stderr)
 
     def pre_remove(self, daemon_id: str) -> None:
         """
index f76ba33cce4c8982110d3c56f2bc6bdbe312e6eb..5fd031de5cf56de119ba32cdfc8c2a0d21d3d7bc 100644 (file)
@@ -126,14 +126,13 @@ class CephadmUpgrade:
             if not self.upgrade_state or self.upgrade_state.get('paused'):
                 return False
 
-            ok = self.mgr.cephadm_services[s.daemon_type].ok_to_stop([s.daemon_id])
+            r = self.mgr.cephadm_services[s.daemon_type].ok_to_stop([s.daemon_id])
 
-            if ok:
-                logger.info('Upgrade: It is presumed safe to stop %s.%s' %
-                              (s.daemon_type, s.daemon_id))
+            if not r.retval:
+                logger.info(f'Upgrade: {r.stdout}')
                 return True
-            logger.info('Upgrade: It is NOT safe to stop %s.%s' %
-                          (s.daemon_type, s.daemon_id))
+            logger.error('Upgrade: {r.stderr}')
+
             time.sleep(15)
             tries -= 1
         return False