LVM API refactor
Signed-off-by: Katarzyna Treder <katarzyna.treder@h-partners.com>
This commit is contained in:
parent
3dacb82a13
commit
3ceea87e87
@ -1,16 +1,15 @@
|
|||||||
#
|
#
|
||||||
# Copyright(c) 2022 Intel Corporation
|
# Copyright(c) 2022 Intel Corporation
|
||||||
|
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
#
|
#
|
||||||
import threading
|
|
||||||
|
|
||||||
|
import threading
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from api.cas.core import Core
|
|
||||||
from core.test_run import TestRun
|
from core.test_run import TestRun
|
||||||
from storage_devices.device import Device
|
from storage_devices.device import Device
|
||||||
from storage_devices.disk import Disk, NvmeDisk
|
from storage_devices.disk import Disk
|
||||||
from storage_devices.partition import Partition
|
|
||||||
from test_tools.fs_utils import readlink
|
from test_tools.fs_utils import readlink
|
||||||
from test_utils.disk_finder import resolve_to_by_id_link
|
from test_utils.disk_finder import resolve_to_by_id_link
|
||||||
from test_utils.filesystem.symlink import Symlink
|
from test_utils.filesystem.symlink import Symlink
|
||||||
@ -29,16 +28,12 @@ class LvmConfiguration:
|
|||||||
lvm_filters: [] = None,
|
lvm_filters: [] = None,
|
||||||
pv_num: int = None,
|
pv_num: int = None,
|
||||||
vg_num: int = None,
|
vg_num: int = None,
|
||||||
lv_num: int = None,
|
lv_num: int = None
|
||||||
cache_num: int = None,
|
|
||||||
cas_dev_num: int = None
|
|
||||||
):
|
):
|
||||||
self.lvm_filters = lvm_filters
|
self.lvm_filters = lvm_filters
|
||||||
self.pv_num = pv_num
|
self.pv_num = pv_num
|
||||||
self.vg_num = vg_num
|
self.vg_num = vg_num
|
||||||
self.lv_num = lv_num
|
self.lv_num = lv_num
|
||||||
self.cache_num = cache_num
|
|
||||||
self.cas_dev_num = cas_dev_num
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __read_definition_from_lvm_config(
|
def __read_definition_from_lvm_config(
|
||||||
@ -122,7 +117,7 @@ class LvmConfiguration:
|
|||||||
return cls.__read_definition_from_lvm_config(global_filter_prototype_regex)
|
return cls.__read_definition_from_lvm_config(global_filter_prototype_regex)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def add_block_devices_to_lvm_config(
|
def add_block_device_to_lvm_config(
|
||||||
cls,
|
cls,
|
||||||
device_type: str
|
device_type: str
|
||||||
):
|
):
|
||||||
@ -137,45 +132,20 @@ class LvmConfiguration:
|
|||||||
filters: []
|
filters: []
|
||||||
):
|
):
|
||||||
if filters is None:
|
if filters is None:
|
||||||
TestRun.LOGGER.error(f"Lvm filters for lvm config not provided.")
|
raise ValueError(f"Lvm filters for lvm config not provided.")
|
||||||
|
|
||||||
for f in filters:
|
for f in filters:
|
||||||
cls.__add_filter_to_lvm_config(f)
|
cls.__add_filter_to_lvm_config(f)
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def configure_dev_types_in_config(
|
|
||||||
cls,
|
|
||||||
devices: ([Device], Device)
|
|
||||||
):
|
|
||||||
if isinstance(devices, list):
|
|
||||||
devs = []
|
|
||||||
for device in devices:
|
|
||||||
dev = device.parent_device if isinstance(device, Partition) else device
|
|
||||||
devs.append(dev)
|
|
||||||
|
|
||||||
if any(isinstance(dev, Core) for dev in devs):
|
|
||||||
cls.add_block_devices_to_lvm_config("cas")
|
|
||||||
if any(isinstance(dev, NvmeDisk) for dev in devs):
|
|
||||||
cls.add_block_devices_to_lvm_config("nvme")
|
|
||||||
else:
|
|
||||||
dev = devices.parent_device if isinstance(devices, Partition) else devices
|
|
||||||
if isinstance(dev, Core):
|
|
||||||
cls.add_block_devices_to_lvm_config("cas")
|
|
||||||
if isinstance(dev, NvmeDisk):
|
|
||||||
cls.add_block_devices_to_lvm_config("nvme")
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def configure_filters(
|
def configure_filters(
|
||||||
cls,
|
cls,
|
||||||
lvm_filters: [],
|
lvm_filters: [],
|
||||||
devices: ([Device], Device)
|
|
||||||
):
|
):
|
||||||
if lvm_filters:
|
if lvm_filters:
|
||||||
TestRun.LOGGER.info(f"Preparing configuration for LVMs - filters.")
|
TestRun.LOGGER.info(f"Preparing configuration for LVMs - filters.")
|
||||||
LvmConfiguration.add_filters_to_lvm_config(lvm_filters)
|
LvmConfiguration.add_filters_to_lvm_config(lvm_filters)
|
||||||
|
|
||||||
cls.configure_dev_types_in_config(devices)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def remove_global_filter_from_config():
|
def remove_global_filter_from_config():
|
||||||
cmd = f"sed -i '/{global_filter_prototype_regex}/d' {lvm_config_path}"
|
cmd = f"sed -i '/{global_filter_prototype_regex}/d' {lvm_config_path}"
|
||||||
@ -186,6 +156,12 @@ class LvmConfiguration:
|
|||||||
cmd = f"sed -i '/{filter_prototype_regex}/d' {lvm_config_path}"
|
cmd = f"sed -i '/{filter_prototype_regex}/d' {lvm_config_path}"
|
||||||
TestRun.executor.run(cmd)
|
TestRun.executor.run(cmd)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def set_use_devices_file(use_devices_file=False):
|
||||||
|
cmd = (fr"sed -i 's/^\s*#*\s*\(use_devicesfile\).*/\t\1 = "
|
||||||
|
fr"{1 if use_devices_file else 0}/' {lvm_config_path}")
|
||||||
|
TestRun.executor.run(cmd)
|
||||||
|
|
||||||
|
|
||||||
class VolumeGroup:
|
class VolumeGroup:
|
||||||
__unique_vg_id = 0
|
__unique_vg_id = 0
|
||||||
@ -266,7 +242,7 @@ class VolumeGroup:
|
|||||||
if vg_name in volume_groups:
|
if vg_name in volume_groups:
|
||||||
return cls(vg_name)
|
return cls(vg_name)
|
||||||
else:
|
else:
|
||||||
TestRun.LOGGER.error("Had not found newly created VG.")
|
raise Exception("Had not found newly created VG.")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def remove(vg_name: str):
|
def remove(vg_name: str):
|
||||||
@ -332,13 +308,10 @@ class Lvm(Disk):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def configure_global_filter(
|
def configure_global_filter(
|
||||||
cls,
|
cls,
|
||||||
dev_first: Device,
|
|
||||||
lv_amount: int,
|
lv_amount: int,
|
||||||
pv_devs: ([Device], Device)
|
pv_devs: ([Device], Device)
|
||||||
):
|
):
|
||||||
device_first = dev_first.parent_device if isinstance(dev_first, Partition) else dev_first
|
if lv_amount > 1:
|
||||||
if lv_amount > 1 and isinstance(device_first, Core):
|
|
||||||
|
|
||||||
global_filter_def = LvmConfiguration.read_global_filter_definition_from_lvm_config()
|
global_filter_def = LvmConfiguration.read_global_filter_definition_from_lvm_config()
|
||||||
if not isinstance(pv_devs, list):
|
if not isinstance(pv_devs, list):
|
||||||
pv_devs = [pv_devs]
|
pv_devs = [pv_devs]
|
||||||
@ -388,13 +361,13 @@ class Lvm(Disk):
|
|||||||
cls,
|
cls,
|
||||||
devices: ([Device], Device),
|
devices: ([Device], Device),
|
||||||
lvm_configuration: LvmConfiguration,
|
lvm_configuration: LvmConfiguration,
|
||||||
lvm_as_core: bool = False
|
global_filter: bool = False
|
||||||
):
|
):
|
||||||
pv_per_vg = int(lvm_configuration.pv_num / lvm_configuration.vg_num)
|
pv_per_vg = int(lvm_configuration.pv_num / lvm_configuration.vg_num)
|
||||||
lv_per_vg = int(lvm_configuration.lv_num / lvm_configuration.vg_num)
|
lv_per_vg = int(lvm_configuration.lv_num / lvm_configuration.vg_num)
|
||||||
lv_size_percentage = int(100 / lv_per_vg)
|
lv_size_percentage = int(100 / lv_per_vg)
|
||||||
|
|
||||||
LvmConfiguration.configure_filters(lvm_configuration.lvm_filters, devices)
|
LvmConfiguration.configure_filters(lvm_configuration.lvm_filters)
|
||||||
|
|
||||||
logical_volumes = []
|
logical_volumes = []
|
||||||
|
|
||||||
@ -405,17 +378,15 @@ class Lvm(Disk):
|
|||||||
end_range = start_range + pv_per_vg
|
end_range = start_range + pv_per_vg
|
||||||
for i in range(start_range, end_range):
|
for i in range(start_range, end_range):
|
||||||
pv_devs.append(devices[i])
|
pv_devs.append(devices[i])
|
||||||
device_first = devices[0]
|
|
||||||
else:
|
else:
|
||||||
pv_devs = devices
|
pv_devs = devices
|
||||||
device_first = devices
|
|
||||||
|
|
||||||
for j in range(lv_per_vg):
|
for j in range(lv_per_vg):
|
||||||
lv = cls.create(lv_size_percentage, pv_devs)
|
lv = cls.create(lv_size_percentage, pv_devs)
|
||||||
logical_volumes.append(lv)
|
logical_volumes.append(lv)
|
||||||
|
|
||||||
if lvm_as_core:
|
if global_filter:
|
||||||
cls.configure_global_filter(device_first, lv_per_vg, pv_devs)
|
cls.configure_global_filter(lv_per_vg, pv_devs)
|
||||||
|
|
||||||
return logical_volumes
|
return logical_volumes
|
||||||
|
|
||||||
@ -431,7 +402,7 @@ class Lvm(Disk):
|
|||||||
elif isinstance(volume_size_or_percent, int):
|
elif isinstance(volume_size_or_percent, int):
|
||||||
size_cmd = f"--extents {volume_size_or_percent}%VG"
|
size_cmd = f"--extents {volume_size_or_percent}%VG"
|
||||||
else:
|
else:
|
||||||
TestRun.LOGGER.error(f"Incorrect type of the first argument (volume_size_or_percent).")
|
raise ValueError(f"Incorrect type of the first argument (volume_size_or_percent).")
|
||||||
|
|
||||||
if not name:
|
if not name:
|
||||||
name = cls.__get_unique_lv_name()
|
name = cls.__get_unique_lv_name()
|
||||||
|
Loading…
Reference in New Issue
Block a user