From 0fe131187abc15015605d9dc2ed51183005a9f0d Mon Sep 17 00:00:00 2001 From: Shraddha Agrawal Date: Tue, 17 Feb 2026 20:11:11 +0530 Subject: [PATCH] cephdm: add support for raw crimson OSD deployment This commit adds support for deploying crimson OSDs using cephadm with the method raw. Support for lvm crimson OSD was added previously in: https://github.com/ceph/ceph/pull/66811. Fixes: https://tracker.ceph.com/issues/74960 Signed-off-by: Shraddha Agrawal --- src/pybind/mgr/cephadm/tests/test_cephadm.py | 8 ++++---- .../ceph/deployment/translate.py | 8 ++++---- .../ceph/tests/test_drive_group.py | 20 +++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/pybind/mgr/cephadm/tests/test_cephadm.py b/src/pybind/mgr/cephadm/tests/test_cephadm.py index d69d53d3bd2..1e6fa3d6e70 100644 --- a/src/pybind/mgr/cephadm/tests/test_cephadm.py +++ b/src/pybind/mgr/cephadm/tests/test_cephadm.py @@ -1315,15 +1315,15 @@ class TestCephadm(object): "devices, preview, exp_commands", [ # one data device, no preview - (['/dev/sda'], False, ["raw prepare --bluestore --data /dev/sda"]), + (['/dev/sda'], False, ["raw prepare --bluestore --data /dev/sda --osd-type classic"]), # multiple data devices, no preview (['/dev/sda', '/dev/sdb'], False, - ["raw prepare --bluestore --data /dev/sda", "raw prepare --bluestore --data /dev/sdb"]), + ["raw prepare --bluestore --data /dev/sda --osd-type classic", "raw prepare --bluestore --data /dev/sdb --osd-type classic"]), # one data device, preview - (['/dev/sda'], True, ["raw prepare --bluestore --data /dev/sda --report --format json"]), + (['/dev/sda'], True, ["raw prepare --bluestore --data /dev/sda --osd-type classic --report --format json"]), # multiple data devices, preview (['/dev/sda', '/dev/sdb'], True, - ["raw prepare --bluestore --data /dev/sda --report --format json", "raw prepare --bluestore --data /dev/sdb --report --format json"]), + ["raw prepare --bluestore --data /dev/sda --osd-type classic --report --format json", "raw prepare --bluestore --data /dev/sdb --osd-type classic --report --format json"]), ] ) @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}')) diff --git a/src/python-common/ceph/deployment/translate.py b/src/python-common/ceph/deployment/translate.py index 634fb0e1f51..7b28efbf631 100644 --- a/src/python-common/ceph/deployment/translate.py +++ b/src/python-common/ceph/deployment/translate.py @@ -135,13 +135,13 @@ class to_ceph_volume(object): cmd += " --objectstore {}".format(self.spec.objectstore) - if self.spec.osd_type: - osd_type_str = getattr(self.spec.osd_type, 'value', self.spec.osd_type) - cmd += " --osd-type {}".format(osd_type_str) - cmds.append(cmd) for i in range(len(cmds)): + if self.spec.osd_type: + osd_type_str = getattr(self.spec.osd_type, 'value', self.spec.osd_type) + cmds[i] += " --osd-type {}".format(osd_type_str) + if self.spec.encrypted: cmds[i] += " --dmcrypt" diff --git a/src/python-common/ceph/tests/test_drive_group.py b/src/python-common/ceph/tests/test_drive_group.py index a26bf215070..9bcc07be93a 100644 --- a/src/python-common/ceph/tests/test_drive_group.py +++ b/src/python-common/ceph/tests/test_drive_group.py @@ -475,7 +475,7 @@ def test_raw_ceph_volume_command_0(): _mk_device(rotational=False) + # db _mk_device(rotational=False) # db ) - exp_cmds = ['raw prepare --bluestore --data /dev/sda --block.db /dev/sdc', 'raw prepare --bluestore --data /dev/sdb --block.db /dev/sdd'] + exp_cmds = ['raw prepare --bluestore --data /dev/sda --block.db /dev/sdc --osd-type classic', 'raw prepare --bluestore --data /dev/sdb --block.db /dev/sdd --osd-type classic'] sel = drive_selection.DriveSelection(spec, inventory) cmds = translate.to_ceph_volume(sel, []).run() assert all(cmd in exp_cmds for cmd in cmds), f'Expected {exp_cmds} to match {cmds}' @@ -528,9 +528,9 @@ def test_raw_ceph_volume_command_2(test_input5): drive = drive_selection.DriveSelection(spec, spec.data_devices.paths) cmds = translate.to_ceph_volume(drive, []).run() - assert cmds[0] == 'raw prepare --bluestore --data /dev/sda --block.db /dev/sdd --crush-device-class hdd' - assert cmds[1] == 'raw prepare --bluestore --data /dev/sdb --block.db /dev/sde --crush-device-class hdd' - assert cmds[2] == 'raw prepare --bluestore --data /dev/sdc --block.db /dev/sdf --crush-device-class hdd' + assert cmds[0] == 'raw prepare --bluestore --data /dev/sda --block.db /dev/sdd --crush-device-class hdd --osd-type classic' + assert cmds[1] == 'raw prepare --bluestore --data /dev/sdb --block.db /dev/sde --crush-device-class hdd --osd-type classic' + assert cmds[2] == 'raw prepare --bluestore --data /dev/sdc --block.db /dev/sdf --crush-device-class hdd --osd-type classic' @pytest.mark.parametrize("test_input6", @@ -565,9 +565,9 @@ def test_raw_ceph_volume_command_3(test_input6): drive = drive_selection.DriveSelection(spec, spec.data_devices.paths) cmds = translate.to_ceph_volume(drive, []).run() - assert cmds[0] == 'raw prepare --bluestore --data /dev/sda --block.db /dev/sdd --crush-device-class hdd' - assert cmds[1] == 'raw prepare --bluestore --data /dev/sdb --block.db /dev/sde --crush-device-class hdd' - assert cmds[2] == 'raw prepare --bluestore --data /dev/sdc --block.db /dev/sdf --crush-device-class ssd' + assert cmds[0] == 'raw prepare --bluestore --data /dev/sda --block.db /dev/sdd --crush-device-class hdd --osd-type classic' + assert cmds[1] == 'raw prepare --bluestore --data /dev/sdb --block.db /dev/sde --crush-device-class hdd --osd-type classic' + assert cmds[2] == 'raw prepare --bluestore --data /dev/sdc --block.db /dev/sdf --crush-device-class ssd --osd-type classic' @pytest.mark.parametrize("test_input7", @@ -607,9 +607,9 @@ def test_raw_ceph_volume_command_4(test_input7): drive = drive_selection.DriveSelection(spec, spec.data_devices.paths) cmds = translate.to_ceph_volume(drive, []).run() - assert cmds[0] == 'raw prepare --bluestore --data /dev/sda --block.db /dev/sdd --block.wal /dev/sdg --crush-device-class hdd' - assert cmds[1] == 'raw prepare --bluestore --data /dev/sdb --block.db /dev/sdf --block.wal /dev/sdi --crush-device-class nvme' - assert cmds[2] == 'raw prepare --bluestore --data /dev/sdc --block.db /dev/sde --block.wal /dev/sdh --crush-device-class ssd' + assert cmds[0] == 'raw prepare --bluestore --data /dev/sda --block.db /dev/sdd --block.wal /dev/sdg --crush-device-class hdd --osd-type classic' + assert cmds[1] == 'raw prepare --bluestore --data /dev/sdb --block.db /dev/sdf --block.wal /dev/sdi --crush-device-class nvme --osd-type classic' + assert cmds[2] == 'raw prepare --bluestore --data /dev/sdc --block.db /dev/sde --block.wal /dev/sdh --crush-device-class ssd --osd-type classic' def test_drive_group_osd_type_invalid(): -- 2.47.3