From: Rishabh Dave Date: Mon, 30 Dec 2019 14:05:56 +0000 (+0530) Subject: ceph-volume: don't use api.lvm.get_lv_from_argument X-Git-Tag: v14.2.12~135^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=41b1cee2a1476e8585660f3a6eaf17f2df33a145;p=ceph.git 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 (cherry picked from commit 5301c4959e5169b10cc92716de6222f7516770e6) --- diff --git a/src/ceph-volume/ceph_volume/devices/simple/scan.py b/src/ceph-volume/ceph_volume/devices/simple/scan.py index 1e3deae4ce1e..0f83b37ef440 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 74985e253a1a..088b2cf357fa 100644 --- a/src/ceph-volume/ceph_volume/tests/conftest.py +++ b/src/ceph-volume/ceph_volume/tests/conftest.py @@ -290,7 +290,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 cbae68782a03..af29390d9314 100644 --- a/src/ceph-volume/ceph_volume/tests/util/test_device.py +++ b/src/ceph-volume/ceph_volume/tests/util/test_device.py @@ -1,25 +1,38 @@ 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"}} device_info(devices=data) disk = device.Device("/dev/sda") 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"}} device_info(devices=data) 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"}} device_info(devices=data) diff --git a/src/ceph-volume/ceph_volume/util/device.py b/src/ceph-volume/ceph_volume/util/device.py index 4527c11b211c..b338b58bed46 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]