ceph-volume: fix mpath device support

commit [1] broke mpath devices support in `disk.is_device()`

[1] 4fc6bc394d

Fixes: https://tracker.ceph.com/issues/62722
Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
This commit is contained in:
Guillaume Abrioux 2023-09-06 09:30:41 +00:00
parent 080bb4ffba
commit 28a12f8ef7
2 changed files with 35 additions and 1 deletions

View File

@ -1,7 +1,37 @@
import os
import pytest
from ceph_volume.util import disk
from mock.mock import patch
from mock.mock import patch, MagicMock
class TestFunctions:
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=False))
def test_is_device_path_does_not_exist(self):
assert not disk.is_device('/dev/foo')
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
def test_is_device_dev_doesnt_startswith_dev(self):
assert not disk.is_device('/foo')
@patch('ceph_volume.util.disk.allow_loop_devices', MagicMock(return_value=False))
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
def test_is_device_loop_not_allowed(self):
assert not disk.is_device('/dev/loop123')
@patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo', 'TYPE': 'disk'}))
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
def test_is_device_type_disk(self):
assert disk.is_device('/dev/foo')
@patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo', 'TYPE': 'mpath'}))
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
def test_is_device_type_mpath(self):
assert disk.is_device('/dev/foo')
@patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo1', 'TYPE': 'part'}))
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
def test_is_device_type_part(self):
assert not disk.is_device('/dev/foo1')
class TestLsblkParser(object):

View File

@ -359,6 +359,10 @@ def is_device(dev):
if not allow_loop_devices():
return False
TYPE = lsblk(dev).get('TYPE')
if TYPE:
return TYPE in ['disk', 'mpath']
# fallback to stat
return _stat_is_device(os.lstat(dev).st_mode)