forked from rpms/leapp-repository
272 lines
12 KiB
Diff
272 lines
12 KiB
Diff
|
From 03fc6743b8916f23f6a213e3f0fc3020ee141b96 Mon Sep 17 00:00:00 2001
|
||
|
From: Daniel Zatovic <daniel.zatovic@gmail.com>
|
||
|
Date: Wed, 3 Apr 2024 23:42:45 +0200
|
||
|
Subject: [PATCH 18/40] StorageScanner: Add parent device name to lsblk
|
||
|
|
||
|
Modify the StorageInfo model to include path and name of the parent
|
||
|
device. Use StorageScanner to collect this information.
|
||
|
|
||
|
Morover fix lsblk test, there should be a full device path in "lsblk
|
||
|
-pbnr" output (just names were used in the original test).
|
||
|
---
|
||
|
.../tests/test_inhibitwhenluks.py | 12 +--
|
||
|
.../libraries/storagescanner.py | 29 +++++--
|
||
|
.../tests/unit_test_storagescanner.py | 78 +++++++++++++++----
|
||
|
.../common/models/storageinfo.py | 2 +
|
||
|
.../tests/unit_test_vdoconversionscanner.py | 4 +-
|
||
|
5 files changed, 95 insertions(+), 30 deletions(-)
|
||
|
|
||
|
diff --git a/repos/system_upgrade/common/actors/inhibitwhenluks/tests/test_inhibitwhenluks.py b/repos/system_upgrade/common/actors/inhibitwhenluks/tests/test_inhibitwhenluks.py
|
||
|
index fee50f9d..405a3429 100644
|
||
|
--- a/repos/system_upgrade/common/actors/inhibitwhenluks/tests/test_inhibitwhenluks.py
|
||
|
+++ b/repos/system_upgrade/common/actors/inhibitwhenluks/tests/test_inhibitwhenluks.py
|
||
|
@@ -5,8 +5,8 @@ from leapp.utils.report import is_inhibitor
|
||
|
|
||
|
|
||
|
def test_actor_with_luks(current_actor_context):
|
||
|
- with_luks = [LsblkEntry(name='luks-132', kname='kname1', maj_min='253:0', rm='0',
|
||
|
- size='10G', bsize=10*(1 << 39), ro='0', tp='crypt', mountpoint='')]
|
||
|
+ with_luks = [LsblkEntry(name='luks-132', kname='kname1', maj_min='253:0', rm='0', size='10G', bsize=10*(1 << 39),
|
||
|
+ ro='0', tp='crypt', mountpoint='', parent_name='', parent_path='')]
|
||
|
|
||
|
current_actor_context.feed(StorageInfo(lsblk=with_luks))
|
||
|
current_actor_context.run()
|
||
|
@@ -16,8 +16,8 @@ def test_actor_with_luks(current_actor_context):
|
||
|
|
||
|
|
||
|
def test_actor_with_luks_ceph_only(current_actor_context):
|
||
|
- with_luks = [LsblkEntry(name='luks-132', kname='kname1', maj_min='253:0', rm='0',
|
||
|
- size='10G', bsize=10*(1 << 39), ro='0', tp='crypt', mountpoint='')]
|
||
|
+ with_luks = [LsblkEntry(name='luks-132', kname='kname1', maj_min='253:0', rm='0', size='10G', bsize=10*(1 << 39),
|
||
|
+ ro='0', tp='crypt', mountpoint='', parent_name='', parent_path='')]
|
||
|
ceph_volume = ['luks-132']
|
||
|
current_actor_context.feed(StorageInfo(lsblk=with_luks))
|
||
|
current_actor_context.feed(CephInfo(encrypted_volumes=ceph_volume))
|
||
|
@@ -26,8 +26,8 @@ def test_actor_with_luks_ceph_only(current_actor_context):
|
||
|
|
||
|
|
||
|
def test_actor_without_luks(current_actor_context):
|
||
|
- without_luks = [LsblkEntry(name='sda1', kname='sda1', maj_min='8:0', rm='0',
|
||
|
- size='10G', bsize=10*(1 << 39), ro='0', tp='part', mountpoint='/boot')]
|
||
|
+ without_luks = [LsblkEntry(name='sda1', kname='sda1', maj_min='8:0', rm='0', size='10G', bsize=10*(1 << 39),
|
||
|
+ ro='0', tp='part', mountpoint='/boot', parent_name='', parent_path='')]
|
||
|
|
||
|
current_actor_context.feed(StorageInfo(lsblk=without_luks))
|
||
|
current_actor_context.run()
|
||
|
diff --git a/repos/system_upgrade/common/actors/storagescanner/libraries/storagescanner.py b/repos/system_upgrade/common/actors/storagescanner/libraries/storagescanner.py
|
||
|
index f15f0d87..cad6bd32 100644
|
||
|
--- a/repos/system_upgrade/common/actors/storagescanner/libraries/storagescanner.py
|
||
|
+++ b/repos/system_upgrade/common/actors/storagescanner/libraries/storagescanner.py
|
||
|
@@ -164,18 +164,31 @@ def _get_mount_info(path):
|
||
|
)
|
||
|
|
||
|
|
||
|
+def _get_lsblk_info_for_devpath(dev_path):
|
||
|
+ lsblk_cmd = ['lsblk', '-nr', '--output', 'NAME,KNAME,SIZE', dev_path]
|
||
|
+ lsblk_info_for_devpath = next(_get_cmd_output(lsblk_cmd, ' ', 3), None)
|
||
|
+
|
||
|
+ return lsblk_info_for_devpath
|
||
|
+
|
||
|
+
|
||
|
@aslist
|
||
|
def _get_lsblk_info():
|
||
|
""" Collect storage info from lsblk command """
|
||
|
- cmd = ['lsblk', '-pbnr', '--output', 'NAME,MAJ:MIN,RM,SIZE,RO,TYPE,MOUNTPOINT']
|
||
|
- for entry in _get_cmd_output(cmd, ' ', 7):
|
||
|
- dev_path, maj_min, rm, bsize, ro, tp, mountpoint = entry
|
||
|
- lsblk_cmd = ['lsblk', '-nr', '--output', 'NAME,KNAME,SIZE', dev_path]
|
||
|
- lsblk_info_for_devpath = next(_get_cmd_output(lsblk_cmd, ' ', 3), None)
|
||
|
+ cmd = ['lsblk', '-pbnr', '--output', 'NAME,MAJ:MIN,RM,SIZE,RO,TYPE,MOUNTPOINT,PKNAME']
|
||
|
+ for entry in _get_cmd_output(cmd, ' ', 8):
|
||
|
+ dev_path, maj_min, rm, bsize, ro, tp, mountpoint, parent_path = entry
|
||
|
+
|
||
|
+ lsblk_info_for_devpath = _get_lsblk_info_for_devpath(dev_path)
|
||
|
if not lsblk_info_for_devpath:
|
||
|
return
|
||
|
-
|
||
|
name, kname, size = lsblk_info_for_devpath
|
||
|
+
|
||
|
+ parent_name = ""
|
||
|
+ if parent_path:
|
||
|
+ parent_info = _get_lsblk_info_for_devpath(parent_path)
|
||
|
+ if parent_info:
|
||
|
+ parent_name, _, _ = parent_info
|
||
|
+
|
||
|
yield LsblkEntry(
|
||
|
name=name,
|
||
|
kname=kname,
|
||
|
@@ -185,7 +198,9 @@ def _get_lsblk_info():
|
||
|
bsize=int(bsize),
|
||
|
ro=ro,
|
||
|
tp=tp,
|
||
|
- mountpoint=mountpoint)
|
||
|
+ mountpoint=mountpoint,
|
||
|
+ parent_name=parent_name,
|
||
|
+ parent_path=parent_path)
|
||
|
|
||
|
|
||
|
@aslist
|
||
|
diff --git a/repos/system_upgrade/common/actors/storagescanner/tests/unit_test_storagescanner.py b/repos/system_upgrade/common/actors/storagescanner/tests/unit_test_storagescanner.py
|
||
|
index 4dc11ea4..456e40ec 100644
|
||
|
--- a/repos/system_upgrade/common/actors/storagescanner/tests/unit_test_storagescanner.py
|
||
|
+++ b/repos/system_upgrade/common/actors/storagescanner/tests/unit_test_storagescanner.py
|
||
|
@@ -255,13 +255,18 @@ def test_get_lsblk_info(monkeypatch):
|
||
|
bytes_per_gb = 1 << 30
|
||
|
|
||
|
def get_cmd_output_mocked(cmd, delim, expected_len):
|
||
|
- if cmd == ['lsblk', '-pbnr', '--output', 'NAME,MAJ:MIN,RM,SIZE,RO,TYPE,MOUNTPOINT']:
|
||
|
+ if cmd == ['lsblk', '-pbnr', '--output', 'NAME,MAJ:MIN,RM,SIZE,RO,TYPE,MOUNTPOINT,PKNAME']:
|
||
|
output_lines_split_on_whitespace = [
|
||
|
- ['vda', '252:0', '0', str(40 * bytes_per_gb), '0', 'disk', ''],
|
||
|
- ['vda1', '252:1', '0', str(1 * bytes_per_gb), '0', 'part', '/boot'],
|
||
|
- ['vda2', '252:2', '0', str(39 * bytes_per_gb), '0', 'part', ''],
|
||
|
- ['rhel_ibm--p8--kvm--03--guest--02-root', '253:0', '0', str(38 * bytes_per_gb), '0', 'lvm', '/'],
|
||
|
- ['rhel_ibm--p8--kvm--03--guest--02-swap', '253:1', '0', str(1 * bytes_per_gb), '0', 'lvm', '[SWAP]']
|
||
|
+ ['/dev/vda', '252:0', '0', str(40 * bytes_per_gb), '0', 'disk', '', ''],
|
||
|
+ ['/dev/vda1', '252:1', '0', str(1 * bytes_per_gb), '0', 'part', '/boot', ''],
|
||
|
+ ['/dev/vda2', '252:2', '0', str(39 * bytes_per_gb), '0', 'part', '', ''],
|
||
|
+ ['/dev/mapper/rhel_ibm--p8--kvm--03--guest--02-root', '253:0', '0', str(38 * bytes_per_gb), '0', 'lvm',
|
||
|
+ '/', ''],
|
||
|
+ ['/dev/mapper/rhel_ibm--p8--kvm--03--guest--02-swap', '253:1', '0', str(1 * bytes_per_gb), '0', 'lvm',
|
||
|
+ '[SWAP]', ''],
|
||
|
+ ['/dev/mapper/luks-01b60fff-a2a8-4c03-893f-056bfc3f06f6', '254:0', '0', str(38 * bytes_per_gb), '0',
|
||
|
+ 'crypt', '', '/dev/nvme0n1p1'],
|
||
|
+ ['/dev/nvme0n1p1', '259:1', '0', str(39 * bytes_per_gb), '0', 'part', '', '/dev/nvme0n1'],
|
||
|
]
|
||
|
for output_line_parts in output_lines_split_on_whitespace:
|
||
|
yield output_line_parts
|
||
|
@@ -269,11 +274,17 @@ def test_get_lsblk_info(monkeypatch):
|
||
|
# We cannot have the output in a list, since the command is called per device. Therefore, we have to map
|
||
|
# each device path to its output.
|
||
|
output_lines_split_on_whitespace_per_device = {
|
||
|
- 'vda': ['vda', 'vda', '40G'],
|
||
|
- 'vda1': ['vda1', 'vda1', '1G'],
|
||
|
- 'vda2': ['vda2', 'vda2', '39G'],
|
||
|
- 'rhel_ibm--p8--kvm--03--guest--02-root': ['rhel_ibm--p8--kvm--03--guest--02-root', 'kname1', '38G'],
|
||
|
- 'rhel_ibm--p8--kvm--03--guest--02-swap': ['rhel_ibm--p8--kvm--03--guest--02-swap', 'kname2', '1G']
|
||
|
+ '/dev/vda': ['vda', 'vda', '40G'],
|
||
|
+ '/dev/vda1': ['vda1', 'vda1', '1G'],
|
||
|
+ '/dev/vda2': ['vda2', 'vda2', '39G'],
|
||
|
+ '/dev/mapper/rhel_ibm--p8--kvm--03--guest--02-root':
|
||
|
+ ['rhel_ibm--p8--kvm--03--guest--02-root', 'kname1', '38G'],
|
||
|
+ '/dev/mapper/rhel_ibm--p8--kvm--03--guest--02-swap':
|
||
|
+ ['rhel_ibm--p8--kvm--03--guest--02-swap', 'kname2', '1G'],
|
||
|
+ '/dev/mapper/luks-01b60fff-a2a8-4c03-893f-056bfc3f06f6':
|
||
|
+ ['luks-01b60fff-a2a8-4c03-893f-056bfc3f06f6', 'dm-0', '38G'],
|
||
|
+ '/dev/nvme0n1p1': ['nvme0n1p1', 'nvme0n1p1', '39G'],
|
||
|
+ '/dev/nvme0n1': ['nvme0n1', 'nvme0n1', '40G'],
|
||
|
}
|
||
|
dev_path = cmd[4]
|
||
|
if dev_path not in output_lines_split_on_whitespace_per_device:
|
||
|
@@ -294,7 +305,9 @@ def test_get_lsblk_info(monkeypatch):
|
||
|
bsize=40 * bytes_per_gb,
|
||
|
ro='0',
|
||
|
tp='disk',
|
||
|
- mountpoint=''),
|
||
|
+ mountpoint='',
|
||
|
+ parent_name='',
|
||
|
+ parent_path=''),
|
||
|
LsblkEntry(
|
||
|
name='vda1',
|
||
|
kname='vda1',
|
||
|
@@ -304,7 +317,9 @@ def test_get_lsblk_info(monkeypatch):
|
||
|
bsize=1 * bytes_per_gb,
|
||
|
ro='0',
|
||
|
tp='part',
|
||
|
- mountpoint='/boot'),
|
||
|
+ mountpoint='/boot',
|
||
|
+ parent_name='',
|
||
|
+ parent_path=''),
|
||
|
LsblkEntry(
|
||
|
name='vda2',
|
||
|
kname='vda2',
|
||
|
@@ -314,7 +329,9 @@ def test_get_lsblk_info(monkeypatch):
|
||
|
bsize=39 * bytes_per_gb,
|
||
|
ro='0',
|
||
|
tp='part',
|
||
|
- mountpoint=''),
|
||
|
+ mountpoint='',
|
||
|
+ parent_name='',
|
||
|
+ parent_path=''),
|
||
|
LsblkEntry(
|
||
|
name='rhel_ibm--p8--kvm--03--guest--02-root',
|
||
|
kname='kname1',
|
||
|
@@ -324,7 +341,9 @@ def test_get_lsblk_info(monkeypatch):
|
||
|
bsize=38 * bytes_per_gb,
|
||
|
ro='0',
|
||
|
tp='lvm',
|
||
|
- mountpoint='/'),
|
||
|
+ mountpoint='/',
|
||
|
+ parent_name='',
|
||
|
+ parent_path=''),
|
||
|
LsblkEntry(
|
||
|
name='rhel_ibm--p8--kvm--03--guest--02-swap',
|
||
|
kname='kname2',
|
||
|
@@ -334,7 +353,34 @@ def test_get_lsblk_info(monkeypatch):
|
||
|
bsize=1 * bytes_per_gb,
|
||
|
ro='0',
|
||
|
tp='lvm',
|
||
|
- mountpoint='[SWAP]')]
|
||
|
+ mountpoint='[SWAP]',
|
||
|
+ parent_name='',
|
||
|
+ parent_path=''),
|
||
|
+ LsblkEntry(
|
||
|
+ name='luks-01b60fff-a2a8-4c03-893f-056bfc3f06f6',
|
||
|
+ kname='dm-0',
|
||
|
+ maj_min='254:0',
|
||
|
+ rm='0',
|
||
|
+ size='38G',
|
||
|
+ bsize=38 * bytes_per_gb,
|
||
|
+ ro='0',
|
||
|
+ tp='crypt',
|
||
|
+ mountpoint='',
|
||
|
+ parent_name='nvme0n1p1',
|
||
|
+ parent_path='/dev/nvme0n1p1'),
|
||
|
+ LsblkEntry(
|
||
|
+ name='nvme0n1p1',
|
||
|
+ kname='nvme0n1p1',
|
||
|
+ maj_min='259:1',
|
||
|
+ rm='0',
|
||
|
+ size='39G',
|
||
|
+ bsize=39 * bytes_per_gb,
|
||
|
+ ro='0',
|
||
|
+ tp='part',
|
||
|
+ mountpoint='',
|
||
|
+ parent_name='nvme0n1',
|
||
|
+ parent_path='/dev/nvme0n1'),
|
||
|
+ ]
|
||
|
|
||
|
actual = storagescanner._get_lsblk_info()
|
||
|
assert expected == actual
|
||
|
diff --git a/repos/system_upgrade/common/models/storageinfo.py b/repos/system_upgrade/common/models/storageinfo.py
|
||
|
index 5bb9caac..71e7459d 100644
|
||
|
--- a/repos/system_upgrade/common/models/storageinfo.py
|
||
|
+++ b/repos/system_upgrade/common/models/storageinfo.py
|
||
|
@@ -43,6 +43,8 @@ class LsblkEntry(Model):
|
||
|
ro = fields.String()
|
||
|
tp = fields.String()
|
||
|
mountpoint = fields.String()
|
||
|
+ parent_name = fields.String()
|
||
|
+ parent_path = fields.String()
|
||
|
|
||
|
|
||
|
class PvsEntry(Model):
|
||
|
diff --git a/repos/system_upgrade/el8toel9/actors/vdoconversionscanner/tests/unit_test_vdoconversionscanner.py b/repos/system_upgrade/el8toel9/actors/vdoconversionscanner/tests/unit_test_vdoconversionscanner.py
|
||
|
index 0745c91d..4d6ef0dc 100644
|
||
|
--- a/repos/system_upgrade/el8toel9/actors/vdoconversionscanner/tests/unit_test_vdoconversionscanner.py
|
||
|
+++ b/repos/system_upgrade/el8toel9/actors/vdoconversionscanner/tests/unit_test_vdoconversionscanner.py
|
||
|
@@ -26,7 +26,9 @@ def _lsblk_entry(prefix, number, types, size='128G', bsize=2 ** 37):
|
||
|
bsize=bsize,
|
||
|
ro='0',
|
||
|
tp=types[random.randint(0, len(types) - 1)],
|
||
|
- mountpoint='')
|
||
|
+ mountpoint='',
|
||
|
+ parent_name='',
|
||
|
+ parent_path='')
|
||
|
|
||
|
|
||
|
@aslist
|
||
|
--
|
||
|
2.47.0
|
||
|
|