Skip to content

Commit 28a12f8

Browse files
committed
ceph-volume: fix mpath device support
commit [1] broke mpath devices support in `disk.is_device()` [1] ceph@4fc6bc3 Fixes: https://tracker.ceph.com/issues/62722 Signed-off-by: Guillaume Abrioux <[email protected]>
1 parent 080bb4f commit 28a12f8

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,37 @@
11
import os
22
import pytest
33
from ceph_volume.util import disk
4-
from mock.mock import patch
4+
from mock.mock import patch, MagicMock
5+
6+
7+
class TestFunctions:
8+
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=False))
9+
def test_is_device_path_does_not_exist(self):
10+
assert not disk.is_device('/dev/foo')
11+
12+
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
13+
def test_is_device_dev_doesnt_startswith_dev(self):
14+
assert not disk.is_device('/foo')
15+
16+
@patch('ceph_volume.util.disk.allow_loop_devices', MagicMock(return_value=False))
17+
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
18+
def test_is_device_loop_not_allowed(self):
19+
assert not disk.is_device('/dev/loop123')
20+
21+
@patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo', 'TYPE': 'disk'}))
22+
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
23+
def test_is_device_type_disk(self):
24+
assert disk.is_device('/dev/foo')
25+
26+
@patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo', 'TYPE': 'mpath'}))
27+
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
28+
def test_is_device_type_mpath(self):
29+
assert disk.is_device('/dev/foo')
30+
31+
@patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo1', 'TYPE': 'part'}))
32+
@patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
33+
def test_is_device_type_part(self):
34+
assert not disk.is_device('/dev/foo1')
535

636

737
class TestLsblkParser(object):

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,10 @@ def is_device(dev):
359359
if not allow_loop_devices():
360360
return False
361361

362+
TYPE = lsblk(dev).get('TYPE')
363+
if TYPE:
364+
return TYPE in ['disk', 'mpath']
365+
362366
# fallback to stat
363367
return _stat_is_device(os.lstat(dev).st_mode)
364368

0 commit comments

Comments
 (0)