devices: extract get_parent_path(), use for manage_devices_file()
This commit extract a helper `get_parent_path()` that is unit tested and also uses this generated parent_path for the call to manage_devices_file to be consistent with the exiting behavior of only including the device that actually contains the VG.
This commit is contained in:
parent
0695911d5c
commit
a2fed3e0d8
2 changed files with 28 additions and 6 deletions
|
|
@ -53,6 +53,20 @@ SCHEMA = """
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def get_parent_path(parent: str, options: Dict) -> str:
|
||||||
|
""" get_parent_path returns the full path to the block device for parent
|
||||||
|
|
||||||
|
Note that the options can influence the behavior via the vg partition
|
||||||
|
number option.
|
||||||
|
"""
|
||||||
|
assert not parent.startswith("/")
|
||||||
|
parent_path = os.path.join("/dev", parent)
|
||||||
|
part = options.get("vg_partnum")
|
||||||
|
if part:
|
||||||
|
parent_path += f"p{part}"
|
||||||
|
return parent_path
|
||||||
|
|
||||||
|
|
||||||
class LVService(devices.DeviceService):
|
class LVService(devices.DeviceService):
|
||||||
|
|
||||||
def __init__(self, args):
|
def __init__(self, args):
|
||||||
|
|
@ -175,20 +189,16 @@ class LVService(devices.DeviceService):
|
||||||
|
|
||||||
return major, minor
|
return major, minor
|
||||||
|
|
||||||
def open(self, devpath: str, parent: str, tree: str, options: Dict):
|
def open(self, devpath: str, parent: str, tree: str, options: Dict) -> Dict:
|
||||||
lv = options["volume"]
|
lv = options["volume"]
|
||||||
|
|
||||||
assert not parent.startswith("/")
|
parent_path = get_parent_path(parent, options)
|
||||||
parent_path = os.path.join("/dev", parent)
|
|
||||||
|
|
||||||
# Add the device to a lvm devices file on supported systems
|
# Add the device to a lvm devices file on supported systems
|
||||||
self.manage_devices_file(parent_path)
|
self.manage_devices_file(parent_path)
|
||||||
|
|
||||||
# Find the volume group that belongs to the device specified
|
# Find the volume group that belongs to the device specified
|
||||||
# via `parent`
|
# via `parent`
|
||||||
part = options.get("vg_partnum")
|
|
||||||
if part:
|
|
||||||
parent_path += f"p{part}"
|
|
||||||
vg = self.volume_group_for_device(parent_path)
|
vg = self.volume_group_for_device(parent_path)
|
||||||
|
|
||||||
# Activate the logical volume
|
# Activate the logical volume
|
||||||
|
|
|
||||||
12
devices/test/test_lv.py
Normal file
12
devices/test/test_lv.py
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
DEVICES_NAME = "org.osbuild.lvm2.lv"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("parent,options,expected_parent_path", [
|
||||||
|
("loop2", {}, "/dev/loop2"),
|
||||||
|
("loop1", {"vg_partnum": 2}, "/dev/loop1p2"),
|
||||||
|
])
|
||||||
|
def test_lvm2_lv_get_parent_path(devices_module, parent, options, expected_parent_path):
|
||||||
|
pp = devices_module.get_parent_path(parent, options)
|
||||||
|
assert pp == expected_parent_path
|
||||||
Loading…
Add table
Add a link
Reference in a new issue