From: Shweta Bhosale Date: Tue, 22 Oct 2024 11:25:08 +0000 (+0530) Subject: mgr/cephadm: orch host drain command does not return error for invalid hostname X-Git-Tag: v18.2.5~59^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=270db552506307de48a51f07024cb81d0515a335;p=ceph.git mgr/cephadm: orch host drain command does not return error for invalid hostname Fixes: https://tracker.ceph.com/issues/68681 Signed-off-by: Shweta Bhosale (cherry picked from commit ab8d7095979322613e5cfcdd6f96befc299b408e) --- diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index 6d2cf33e63a35..633645d4bd970 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -3563,6 +3563,7 @@ Then run the following: return self.to_remove_osds.all_osds() @handle_orch_error + @host_exists() def drain_host(self, hostname: str, force: bool = False, keep_conf_keyring: bool = False, zap_osd_devices: bool = False) -> str: """ Drain all daemons from a host. diff --git a/src/pybind/mgr/cephadm/tests/test_cephadm.py b/src/pybind/mgr/cephadm/tests/test_cephadm.py index f59eeb6aaca2f..70d8ac00b919f 100644 --- a/src/pybind/mgr/cephadm/tests/test_cephadm.py +++ b/src/pybind/mgr/cephadm/tests/test_cephadm.py @@ -2608,16 +2608,23 @@ Traceback (most recent call last): with cephadm_module.async_timeout_handler('hostC', 'very slow', 999): cephadm_module.wait_async(_timeout()) + @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('[]')) @mock.patch("cephadm.CephadmOrchestrator.remove_osds") @mock.patch("cephadm.CephadmOrchestrator.add_host_label", lambda *a, **kw: None) @mock.patch("cephadm.inventory.HostCache.get_daemons_by_host", lambda *a, **kw: []) def test_host_drain_zap(self, _rm_osds, cephadm_module): # pass force=true in these tests to bypass _admin label check - cephadm_module.drain_host('host1', force=True, zap_osd_devices=False) - assert _rm_osds.called_with([], zap=False) + with with_host(cephadm_module, 'test', refresh_hosts=False, rm_with_force=True): + cephadm_module.drain_host('test', force=True, zap_osd_devices=False) + assert _rm_osds.called_with([], zap=False) + + with with_host(cephadm_module, 'test', refresh_hosts=False, rm_with_force=True): + cephadm_module.drain_host('test', force=True, zap_osd_devices=True) + assert _rm_osds.called_with([], zap=True) - cephadm_module.drain_host('host1', force=True, zap_osd_devices=True) - assert _rm_osds.called_with([], zap=True) + with pytest.raises(OrchestratorError, match=r"Cannot find host 'host1' in the inventory."): + cephadm_module.drain_host('host1', force=True, zap_osd_devices=True) + assert _rm_osds.called_with([], zap=True) def test_process_ls_output(self, cephadm_module): sample_ls_output = """[