From 5301c4959e5169b10cc92716de6222f7516770e6 Mon Sep 17 00:00:00 2001 From: Rishabh Dave Date: Mon, 30 Dec 2019 19:35:56 +0530 Subject: [PATCH] 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 --- .../ceph_volume/devices/simple/scan.py | 2 +- src/ceph-volume/ceph_volume/tests/conftest.py | 2 +- .../ceph_volume/tests/util/test_device.py | 19 ++++++++++++++++--- src/ceph-volume/ceph_volume/util/device.py | 10 ++++++++-- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/ceph-volume/ceph_volume/devices/simple/scan.py b/src/ceph-volume/ceph_volume/devices/simple/scan.py index 1e3deae4ce1..0f83b37ef44 100644 --- a/src/ceph-volume/ceph_volume/devices/simple/scan.py +++ b/src/ceph-volume/ceph_volume/devices/simple/scan.py @@ -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: diff --git a/src/ceph-volume/ceph_volume/tests/conftest.py b/src/ceph-volume/ceph_volume/tests/conftest.py index 32da08447f4..52d8a892e16 100644 --- a/src/ceph-volume/ceph_volume/tests/conftest.py +++ b/src/ceph-volume/ceph_volume/tests/conftest.py @@ -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", diff --git a/src/ceph-volume/ceph_volume/tests/util/test_device.py b/src/ceph-volume/ceph_volume/tests/util/test_device.py index 82267fd9339..7e458fe0d14 100644 --- a/src/ceph-volume/ceph_volume/tests/util/test_device.py +++ b/src/ceph-volume/ceph_volume/tests/util/test_device.py @@ -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"} diff --git a/src/ceph-volume/ceph_volume/util/device.py b/src/ceph-volume/ceph_volume/util/device.py index c2d70683862..c72dfe89666 100644 --- a/src/ceph-volume/ceph_volume/util/device.py +++ b/src/ceph-volume/ceph_volume/util/device.py @@ -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]