result = disk.get_devices(_sys_block_path=str(tmpdir))
assert result == {}
- @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
def test_sda_block_is_found(self, patched_get_block_devs_sysfs, fake_filesystem):
sda_path = '/dev/sda'
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
assert result[sda_path]['model'] == ''
assert result[sda_path]['partitions'] == {}
- @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
def test_sda_size(self, patched_get_block_devs_sysfs, fake_filesystem):
sda_path = '/dev/sda'
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
assert list(result.keys()) == [sda_path]
assert result[sda_path]['human_readable_size'] == '512.00 KB'
- @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
def test_sda_sectorsize_fallsback(self, patched_get_block_devs_sysfs, fake_filesystem):
# if no sectorsize, it will use queue/hw_sector_size
sda_path = '/dev/sda'
assert list(result.keys()) == [sda_path]
assert result[sda_path]['sectorsize'] == '1024'
- @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
def test_sda_sectorsize_from_logical_block(self, patched_get_block_devs_sysfs, fake_filesystem):
sda_path = '/dev/sda'
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
result = disk.get_devices()
assert result[sda_path]['sectorsize'] == '99'
- @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
def test_sda_sectorsize_does_not_fallback(self, patched_get_block_devs_sysfs, fake_filesystem):
sda_path = '/dev/sda'
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
result = disk.get_devices()
assert result[sda_path]['sectorsize'] == '99'
- @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
def test_is_rotational(self, patched_get_block_devs_sysfs, fake_filesystem):
sda_path = '/dev/sda'
patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
result = disk.get_devices()
assert result[sda_path]['rotational'] == '1'
- @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
def test_is_ceph_rbd(self, patched_get_block_devs_sysfs, fake_filesystem):
rbd_path = '/dev/rbd0'
patched_get_block_devs_sysfs.return_value = [[rbd_path, rbd_path, 'disk']]
def test_device_path_is_a_path(self, fake_filesystem):
device_path = '/var/lib/ceph/osd/ceph-0'
fake_filesystem.create_dir(device_path)
- assert not disk.has_bluestore_label(device_path)
\ No newline at end of file
+ assert not disk.has_bluestore_label(device_path)
return device_name.startswith(('/dev/mapper', '/dev/dm-'))
-def is_locked_raw_device(disk_path):
- """
- A device can be locked by a third party software like a database.
- To detect that case, the device is opened in Read/Write and exclusive mode
- """
- open_flags = (os.O_RDWR | os.O_EXCL)
- open_mode = 0
- fd = None
-
- try:
- fd = os.open(disk_path, open_flags, open_mode)
- except OSError:
- return 1
-
- try:
- os.close(fd)
- except OSError:
- return 1
-
- return 0
-
-
class AllowLoopDevices(object):
allow = False
warned = False
metadata['size'] = float(size) * 512
metadata['human_readable_size'] = human_readable_size(metadata['size'])
metadata['path'] = diskname
- metadata['locked'] = is_locked_raw_device(metadata['path'])
metadata['type'] = block[2]
device_facts[diskname] = metadata