ceph-volume: don't use api.lvm.get_lv_from_argument

Use api.lvm.get_lvs() and api.lvm.get_first_lv() instead and update
tests.

Signed-off-by: Rishabh Dave <ridave@redhat.com>
This commit is contained in:
Rishabh Dave 2019-12-30 19:35:56 +05:30
parent 2f5c10c12c
commit 5301c4959e
4 changed files with 26 additions and 7 deletions

View File

@ -80,7 +80,7 @@ class Scan(object):
device = os.readlink(path)
else:
device = path
lvm_device = lvm.get_lv_from_argument(device)
lvm_device = lvm.get_first_lv(filters={'lv_path': device})
if lvm_device:
device_uuid = lvm_device.lv_uuid
else:

View File

@ -294,7 +294,7 @@ def device_info(monkeypatch, patch_bluestore_label):
monkeypatch.setattr("ceph_volume.sys_info.devices", {})
monkeypatch.setattr("ceph_volume.util.device.disk.get_devices", lambda: devices)
if not devices:
monkeypatch.setattr("ceph_volume.util.device.lvm.get_lv_from_argument", lambda path: lv)
monkeypatch.setattr("ceph_volume.util.device.lvm.get_first_lv", lambda filters: lv)
else:
monkeypatch.setattr("ceph_volume.util.device.lvm.get_lv_from_argument", lambda path: None)
monkeypatch.setattr("ceph_volume.util.device.lvm.get_device_lvs",

View File

@ -1,11 +1,18 @@
import pytest
from copy import deepcopy
from ceph_volume.util import device
from ceph_volume.api import lvm as api
class TestDevice(object):
def test_sys_api(self, device_info):
def test_sys_api(self, volumes, monkeypatch, device_info):
volume = api.Volume(lv_name='lv', lv_uuid='y', vg_name='vg',
lv_tags={}, lv_path='/dev/VolGroup/lv')
volumes.append(volume)
monkeypatch.setattr(api, 'get_lvs', lambda **kwargs:
deepcopy(volumes))
data = {"/dev/sda": {"foo": "bar"}}
lsblk = {"TYPE": "disk"}
device_info(devices=data,lsblk=lsblk)
@ -13,7 +20,13 @@ class TestDevice(object):
assert disk.sys_api
assert "foo" in disk.sys_api
def test_lvm_size(self, device_info):
def test_lvm_size(self, volumes, monkeypatch, device_info):
volume = api.Volume(lv_name='lv', lv_uuid='y', vg_name='vg',
lv_tags={}, lv_path='/dev/VolGroup/lv')
volumes.append(volume)
monkeypatch.setattr(api, 'get_lvs', lambda **kwargs:
deepcopy(volumes))
# 5GB in size
data = {"/dev/sda": {"size": "5368709120"}}
lsblk = {"TYPE": "disk"}
@ -21,7 +34,7 @@ class TestDevice(object):
disk = device.Device("/dev/sda")
assert disk.lvm_size.gb == 4
def test_lvm_size_rounds_down(self, device_info):
def test_lvm_size_rounds_down(self, device_info, volumes):
# 5.5GB in size
data = {"/dev/sda": {"size": "5905580032"}}
lsblk = {"TYPE": "disk"}

View File

@ -130,8 +130,14 @@ class Device(object):
self.sys_api = part
break
# start with lvm since it can use an absolute or relative path
lv = lvm.get_lv_from_argument(self.path)
# if the path is not absolute, we have 'vg/lv', let's use LV name
# to get the LV.
if self.path[0] == '/':
lv = lvm.get_first_lv(filters={'lv_path': self.path})
else:
vgname, lvname = self.path.split('/')
lv = lvm.get_first_lv(filters={'lv_name': lvname,
'vg_name': vgname})
if lv:
self.lv_api = lv
self.lvs = [lv]