diff options
author | Michael Fritch <mfritch@suse.com> | 2022-01-18 15:15:45 -0700 |
---|---|---|
committer | Michael Fritch <mfritch@suse.com> | 2022-01-20 10:38:00 -0700 |
commit | 47325ec3ec5ce1d53c5eae2952f631e95b7135fe (patch) | |
tree | dc0b45633f274d5a29d68b6d59f5f0b9173c2d90 | |
parent | 7112b9a47f5906353716452c08d2775bbb50796b (diff) | |
download | ceph-47325ec3ec5ce1d53c5eae2952f631e95b7135fe.tar.gz |
ceph-volume: filter RBD devices from the device inventory
Avoid running `blkid` or deploying OSDs on RBD devices by ensuring they
do not appear in the `ceph-volume inventory`
Fixes: https://tracker.ceph.com/issues/53846
Signed-off-by: Michael Fritch <mfritch@suse.com>
-rw-r--r-- | src/ceph-volume/ceph_volume/tests/util/test_disk.py | 9 | ||||
-rw-r--r-- | src/ceph-volume/ceph_volume/util/disk.py | 11 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/ceph-volume/ceph_volume/tests/util/test_disk.py b/src/ceph-volume/ceph_volume/tests/util/test_disk.py index 44f19e036fa..6b178eabdbb 100644 --- a/src/ceph-volume/ceph_volume/tests/util/test_disk.py +++ b/src/ceph-volume/ceph_volume/tests/util/test_disk.py @@ -331,6 +331,15 @@ class TestGetDevices(object): result = disk.get_devices(_sys_block_path=block_path) assert result[sda_path]['rotational'] == '1' + def test_is_ceph_rbd(self, tmpfile, tmpdir, patched_get_block_devs_lsblk): + rbd_path = '/dev/rbd0' + patched_get_block_devs_lsblk.return_value = [[rbd_path, rbd_path, 'disk']] + block_path = self.setup_path(tmpdir) + block_rbd_path = os.path.join(block_path, 'rbd0') + os.makedirs(block_rbd_path) + result = disk.get_devices(_sys_block_path=block_path) + assert rbd_path not in result + class TestSizeCalculations(object): diff --git a/src/ceph-volume/ceph_volume/util/disk.py b/src/ceph-volume/ceph_volume/util/disk.py index 88db0513817..8a47061ef91 100644 --- a/src/ceph-volume/ceph_volume/util/disk.py +++ b/src/ceph-volume/ceph_volume/util/disk.py @@ -361,6 +361,13 @@ def is_partition(dev): return False +def is_ceph_rbd(dev): + """ + Boolean to determine if a given device is a ceph RBD device, like /dev/rbd0 + """ + return dev.startswith(('/dev/rbd')) + + class BaseFloatUnit(float): """ Base class to support float representations of size values. Suffix is @@ -764,6 +771,10 @@ def get_devices(_sys_block_path='/sys/block'): sysdir = os.path.join(_sys_block_path, devname) metadata = {} + # If the device is ceph rbd it gets excluded + if is_ceph_rbd(diskname): + continue + # If the mapper device is a logical volume it gets excluded if is_mapper_device(diskname): if lvm.get_device_lvs(diskname): |