]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: check spec host when adding osd
authorRedouane Kachach <rkachach@redhat.com>
Wed, 2 Mar 2022 11:38:42 +0000 (12:38 +0100)
committerAdam King <adking@redhat.com>
Tue, 5 Apr 2022 20:10:22 +0000 (16:10 -0400)
Fixes: https://tracker.ceph.com/issues/47872
Signed-off-by: Redouane Kachach <rkachach@redhat.com>
(cherry picked from commit b87c966697d36ef51f1e62425d77200667e651ae)

Conflicts:
src/pybind/mgr/orchestrator/module.py

src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/tests/test_cephadm.py
src/pybind/mgr/orchestrator/module.py

index 607afd51b0dac9c9f1f278253298cbfef9460e6f..5a633eae172f7e2c1c9b623c2bb6201fa2f58a61 100644 (file)
@@ -2358,6 +2358,10 @@ Then run the following:
 
     @handle_orch_error
     def create_osds(self, drive_group: DriveGroupSpec) -> str:
+        hosts: List[HostSpec] = self.inventory.all_specs()
+        filtered_hosts: List[str] = drive_group.placement.filter_matching_hostspecs(hosts)
+        if not filtered_hosts:
+            return "Invalid 'host:device' spec: host not found in cluster. Please check 'ceph orch host ls' for available hosts"
         return self.osd_service.create_from_spec(drive_group)
 
     def _preview_osdspecs(self,
index 69d87bdb49d5e44301296014a6db574530a16df1..d4875d29a62d5394cd93b236406d90bb941cadc5 100644 (file)
@@ -807,6 +807,11 @@ class TestCephadm(object):
             c = cephadm_module.create_osds(dg)
             out = wait(cephadm_module, c)
             assert out == "Created no osd(s) on host test; already created?"
+            bad_dg = DriveGroupSpec(placement=PlacementSpec(host_pattern='invalid_hsot'),
+                                    data_devices=DeviceSelection(paths=['']))
+            c = cephadm_module.create_osds(bad_dg)
+            out = wait(cephadm_module, c)
+            assert "Invalid 'host:device' spec: host not found in cluster" in out
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}'))
     def test_create_noncollocated_osd(self, cephadm_module):
index 56612dd8dc6c8437cdba81a7f5572e51aea5a089..1f4bc5dc7be117193bb55fbc60e0796f763304db 100644 (file)
@@ -788,10 +788,12 @@ Usage:
             host_name, block_device = svc_arg.split(":")
             block_devices = block_device.split(',')
             devs = DeviceSelection(paths=block_devices)
-            drive_group = DriveGroupSpec(placement=PlacementSpec(
-                host_pattern=host_name), data_devices=devs)
-        except (TypeError, KeyError, ValueError):
-            msg = "Invalid host:device spec: '{}'".format(svc_arg) + usage
+            drive_group = DriveGroupSpec(
+                placement=PlacementSpec(host_pattern=host_name),
+                data_devices=devs,
+            )
+        except (TypeError, KeyError, ValueError) as e:
+            msg = f"Invalid 'host:device' spec: '{svc_arg}': {e}" + usage
             return HandleCommandResult(-errno.EINVAL, stderr=msg)
 
         completion = self.create_osds(drive_group)