From fc3b4d13ea73c6f89409c24e165397f23f84cbad Mon Sep 17 00:00:00 2001 From: Joshua Schmid Date: Wed, 27 May 2020 11:10:30 +0200 Subject: [PATCH] mgr/cephadm: fix host matching when multiple hosts match for in osd previews Signed-off-by: Joshua Schmid --- src/pybind/mgr/cephadm/module.py | 5 ++--- src/pybind/mgr/cephadm/services/osd.py | 6 ++++-- src/pybind/mgr/orchestrator/module.py | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index 9db98b977b9..69fb02d8bed 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -1052,9 +1052,8 @@ you may want to run: self.cache.loading_osdspec_preview.add(search_host) previews = [] # query OSDSpecs for host and generate/get the preview - for preview in self.osd_service.get_previews(search_host): - # There can be multiple previews for one host due to multiple OSDSpecs. - previews.append(preview) + # There can be multiple previews for one host due to multiple OSDSpecs. + previews.extend(self.osd_service.get_previews(search_host)) self.log.debug(f"Loading OSDSpec previews to HostCache") self.cache.osdspec_previews[search_host] = previews # Unset global 'pending' flag for host diff --git a/src/pybind/mgr/cephadm/services/osd.py b/src/pybind/mgr/cephadm/services/osd.py index a48f8bcd031..b37f7c586b7 100644 --- a/src/pybind/mgr/cephadm/services/osd.py +++ b/src/pybind/mgr/cephadm/services/osd.py @@ -134,9 +134,9 @@ class OSDService(CephadmService): def get_previews(self, host) -> List[Dict[str, Any]]: # Find OSDSpecs that match host. osdspecs = self.mgr.resolve_osdspecs_for_host(host) - return self.generate_previews(osdspecs) + return self.generate_previews(osdspecs, host) - def generate_previews(self, osdspecs: List[DriveGroupSpec]) -> List[Dict[str, Any]]: + def generate_previews(self, osdspecs: List[DriveGroupSpec], for_host: str) -> List[Dict[str, Any]]: """ The return should look like this: @@ -166,6 +166,8 @@ class OSDService(CephadmService): # prepare driveselection for host, ds in self.prepare_drivegroup(osdspec): + if host != for_host: + continue # driveselection for host cmd = self.driveselection_to_ceph_volume(osdspec, diff --git a/src/pybind/mgr/orchestrator/module.py b/src/pybind/mgr/orchestrator/module.py index 5434bc4d3c3..8f22a3b0071 100644 --- a/src/pybind/mgr/orchestrator/module.py +++ b/src/pybind/mgr/orchestrator/module.py @@ -564,7 +564,7 @@ Examples: table.add_row((dg_name, host, block_data, db_path, wal_path)) ret = table.get_string() if not ret: - ret = "Couldn't draw any conclusion.. This is likely a bug and should be reported" + ret = "No preview available" return ret if preview and (unmanaged is not None): -- 2.39.5