]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: filter RBD devices from the device inventory 44708/head
authorMichael Fritch <mfritch@suse.com>
Tue, 18 Jan 2022 22:15:45 +0000 (15:15 -0700)
committerGuillaume Abrioux <gabrioux@redhat.com>
Fri, 21 Jan 2022 12:40:31 +0000 (13:40 +0100)
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>
(cherry picked from commit 47325ec3ec5ce1d53c5eae2952f631e95b7135fe)

src/ceph-volume/ceph_volume/tests/util/test_disk.py
src/ceph-volume/ceph_volume/util/disk.py

index 44f19e036fa47d87eb41dc6c35ccf72343e25444..6b178eabdbb7392e682652ecd2dabac4915dcf8c 100644 (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):
 
index 88db0513817a95b6881939c426b3e1fe010fccbd..8a47061ef91bb20474fd50c9ac932306fed658be 100644 (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):