]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: optional pass 'known' through to ok_to_stop
authorSage Weil <sage@newdream.net>
Fri, 26 Feb 2021 13:46:26 +0000 (08:46 -0500)
committerSage Weil <sage@newdream.net>
Tue, 2 Mar 2021 19:00:13 +0000 (14:00 -0500)
Optionally provide a list of previously known-to-be-ok-to-stop items to
the ok_to_stop method. This has to get plumbed through a zillion instances
of this class method.

No functional change (yet).

Signed-off-by: Sage Weil <sage@newdream.net>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/services/cephadmservice.py
src/pybind/mgr/cephadm/services/iscsi.py
src/pybind/mgr/cephadm/services/monitoring.py
src/pybind/mgr/cephadm/services/nfs.py
src/pybind/mgr/cephadm/upgrade.py

index abb160173cdecf0947e31fcfdafd7da4ce5773b4..25ba55e11d7722cb0f7ffcb0f6f5dbdb1e5267f2 100644 (file)
@@ -1248,7 +1248,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
         okay: bool = True
         for daemon_type, daemon_ids in daemon_map.items():
             r = self.cephadm_services[daemon_type_to_service(
-                daemon_type)].ok_to_stop(daemon_ids, force)
+                daemon_type)].ok_to_stop(daemon_ids, force=force)
             if r.retval:
                 okay = False
                 # collect error notifications so user can see every daemon causing host
index 8538a875651d0f3af7123ac2c04ee57fe3041321..bfe7ee2ee212bd8cfc80d075c691f20f9b3ac349 100644 (file)
@@ -222,7 +222,10 @@ class CephadmService(metaclass=ABCMeta):
             except MonCommandFailed as e:
                 logger.warning('Failed to set Dashboard config for %s: %s', service_name, e)
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> 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}'
@@ -544,7 +547,10 @@ class MgrService(CephService):
         num = len(mgr_map.get('standbys'))
         return bool(num)
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         # ok to stop if there is more than 1 mgr and not trying to stop the active mgr
 
         warn, warn_message = self._enough_daemons_to_stop(self.TYPE, daemon_ids, 'Mgr', 1, True)
@@ -830,7 +836,10 @@ class RgwService(CephService):
                 raise OrchestratorError(err)
             self.mgr.log.info('updated period')
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         # if load balancer (ha-rgw) is present block if only 1 daemon up otherwise ok
         # if no load balancer, warn if > 1 daemon, block if only 1 daemon
         def ha_rgw_present() -> bool:
@@ -881,7 +890,10 @@ class RbdMirrorService(CephService):
 
         return daemon_spec
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         # if only 1 rbd-mirror, alert user (this is not passable with --force)
         warn, warn_message = self._enough_daemons_to_stop(
             self.TYPE, daemon_ids, 'Rbdmirror', 1, True)
index 84c730647940855b9c2161c8d58b6fe82abf0a31..efa25430a467017dcb30c36053f00612c80facd9 100644 (file)
@@ -1,7 +1,7 @@
 import errno
 import json
 import logging
-from typing import List, cast
+from typing import List, cast, Optional
 
 from mgr_module import HandleCommandResult
 from ceph.deployment.service_spec import IscsiServiceSpec
@@ -121,7 +121,10 @@ class IscsiService(CephService):
             get_set_cmd_dicts=get_set_cmd_dicts
         )
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         # if only 1 iscsi, alert user (this is not passable with --force)
         warn, warn_message = self._enough_daemons_to_stop(self.TYPE, daemon_ids, 'Iscsi', 1, True)
         if warn:
index aa18b04e13af1c572791cdcecf7072a26acf6623..a95a515247e6c33dccd32478d6a8822890d41b47 100644 (file)
@@ -1,7 +1,7 @@
 import errno
 import logging
 import os
-from typing import List, Any, Tuple, Dict, cast
+from typing import List, Any, Tuple, Dict, Optional, cast
 
 from mgr_module import HandleCommandResult
 
@@ -84,7 +84,10 @@ class GrafanaService(CephadmService):
             service_url
         )
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         warn, warn_message = self._enough_daemons_to_stop(self.TYPE, daemon_ids, 'Grafana', 1)
         if warn and not force:
             return HandleCommandResult(-errno.EBUSY, '', warn_message)
@@ -175,7 +178,10 @@ class AlertmanagerService(CephadmService):
             service_url
         )
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         warn, warn_message = self._enough_daemons_to_stop(self.TYPE, daemon_ids, 'Alertmanager', 1)
         if warn and not force:
             return HandleCommandResult(-errno.EBUSY, '', warn_message)
@@ -280,7 +286,10 @@ class PrometheusService(CephadmService):
             service_url
         )
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         warn, warn_message = self._enough_daemons_to_stop(self.TYPE, daemon_ids, 'Prometheus', 1)
         if warn and not force:
             return HandleCommandResult(-errno.EBUSY, '', warn_message)
@@ -299,7 +308,10 @@ class NodeExporterService(CephadmService):
         assert self.TYPE == daemon_spec.daemon_type
         return {}, []
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         # since node exporter runs on each host and cannot compromise data, no extra checks required
         names = [f'{self.TYPE}.{d_id}' for d_id in daemon_ids]
         out = f'It is presumed safe to stop {names}'
index 617d18798f426cd239c946bb68d14ac672be6e93..760132b01212a1f79c83bc1b8c24a75e01c87696 100644 (file)
@@ -1,6 +1,6 @@
 import errno
 import logging
-from typing import Dict, Tuple, Any, List, cast
+from typing import Dict, Tuple, Any, List, cast, Optional
 
 from mgr_module import HandleCommandResult
 
@@ -156,7 +156,10 @@ class NFSService(CephService):
         super().post_remove(daemon)
         self.remove_rgw_keyring(daemon)
 
-    def ok_to_stop(self, daemon_ids: List[str], force: bool = False) -> HandleCommandResult:
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
         # if only 1 nfs, alert user (this is not passable with --force)
         warn, warn_message = self._enough_daemons_to_stop(self.TYPE, daemon_ids, 'NFS', 1, True)
         if warn:
index fe32de328b6c47588ca58f8214d786f84ffea6f7..189788cb28e49efb9c66bb5f744bd8906ae03f99 100644 (file)
@@ -213,7 +213,8 @@ class CephadmUpgrade:
             return True
         return False
 
-    def _wait_for_ok_to_stop(self, s: DaemonDescription) -> bool:
+    def _wait_for_ok_to_stop(self, s: DaemonDescription,
+                             known: Optional[List[str]] = None) -> bool:
         # only wait a little bit; the service might go away for something
         assert s.daemon_type is not None
         assert s.daemon_id is not None