From e2d82d6775974cee86622bc832865e6b64fb960f Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Fri, 24 Apr 2026 11:08:09 +0200 Subject: [PATCH] ceph-volume: pass --set-keepcaps for FCM crush device class on mkfs When preparing the ceph-osd --mkfs command for BlueStore OSDs, add --set-keepcaps true if crush_device_class is fcm. Fixes: https://tracker.ceph.com/issues/76252 Signed-off-by: Guillaume Abrioux --- .../objectstore/baseobjectstore.py | 2 ++ .../tests/objectstore/test_baseobjectstore.py | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/ceph-volume/ceph_volume/objectstore/baseobjectstore.py b/src/ceph-volume/ceph_volume/objectstore/baseobjectstore.py index aa7bca4e5e28..345790bb7352 100644 --- a/src/ceph-volume/ceph_volume/objectstore/baseobjectstore.py +++ b/src/ceph-volume/ceph_volume/objectstore/baseobjectstore.py @@ -168,6 +168,8 @@ class BaseObjectStore: # set bdev_enable_discard = false if self.skip_mkfs_discard and self.objectstore == 'bluestore': self.osd_mkfs_cmd.extend(['--bdev-enable-discard', 'false']) + if getattr(self.args, 'crush_device_class', None) == 'fcm' and self.objectstore == 'bluestore': + self.osd_mkfs_cmd.extend(['--set-keepcaps', 'true']) if self.cephx_secret is not None: self.osd_mkfs_cmd.extend(['--keyfile', '-']) diff --git a/src/ceph-volume/ceph_volume/tests/objectstore/test_baseobjectstore.py b/src/ceph-volume/ceph_volume/tests/objectstore/test_baseobjectstore.py index 7a2f5cdf08a6..a059fa0f5469 100644 --- a/src/ceph-volume/ceph_volume/tests/objectstore/test_baseobjectstore.py +++ b/src/ceph-volume/ceph_volume/tests/objectstore/test_baseobjectstore.py @@ -177,6 +177,33 @@ class TestBaseObjectStore: '--setuser', 'ceph', '--setgroup', 'ceph'] + @patch('ceph_volume.conf.cluster', 'ceph') + def test_build_osd_mkfs_cmd_fcm_crush_device_class_sets_keepcaps(self, factory): + bo = BaseObjectStore(factory(crush_device_class='fcm')) + bo.osd_path = '/var/lib/ceph/osd/ceph-123/' + bo.osd_fsid = 'abcd-1234' + bo.objectstore = 'bluestore' + bo.osd_id = '123' + bo.monmap = '/etc/ceph/ceph.monmap' + bo.osd_type = 'classic' + result = bo.build_osd_mkfs_cmd() + + assert result == ['ceph-osd', + '--cluster', + 'ceph', + '--osd-objectstore', + 'bluestore', + '--mkfs', '-i', '123', + '--monmap', + '/etc/ceph/ceph.monmap', + '--set-keepcaps', 'true', + '--keyfile', '-', + '--osd-data', + '/var/lib/ceph/osd/ceph-123/', + '--osd-uuid', 'abcd-1234', + '--setuser', 'ceph', + '--setgroup', 'ceph'] + def test_osd_mkfs_ok(self, monkeypatch, fake_call, objectstore): args = objectstore(dmcrypt=False) bo = BaseObjectStore(args) -- 2.47.3