From 270db552506307de48a51f07024cb81d0515a335 Mon Sep 17 00:00:00 2001 From: Shweta Bhosale Date: Tue, 22 Oct 2024 16:55:08 +0530 Subject: [PATCH] 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) --- src/pybind/mgr/cephadm/module.py | 1 + src/pybind/mgr/cephadm/tests/test_cephadm.py | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) 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 = """[ -- 2.39.5