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>
This commit is contained in:
Michael Fritch 2022-01-18 15:15:45 -07:00
parent 7112b9a47f
commit 47325ec3ec
No known key found for this signature in database
GPG Key ID: 75F3EB2E80A03B7F
2 changed files with 20 additions and 0 deletions

View File

@ -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):

View File

@ -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):