From 51863db38cf0e14aaec0c6d1baa9fdb4dd1a38e6 Mon Sep 17 00:00:00 2001 From: Sebastian Mitterle Date: Tue, 2 Jan 2024 12:19:28 +0100 Subject: [PATCH] utils_libvirt/libvirt_disk: add function to get disk by serial Use the SERIAL that can be set via libvirt, to select its disk path under /dev/. Suggested-by: Chunfu Wen Signed-off-by: Sebastian Mitterle --- virttest/utils_libvirt/libvirt_disk.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/virttest/utils_libvirt/libvirt_disk.py b/virttest/utils_libvirt/libvirt_disk.py index a320602583..9646ed657f 100644 --- a/virttest/utils_libvirt/libvirt_disk.py +++ b/virttest/utils_libvirt/libvirt_disk.py @@ -102,6 +102,31 @@ def get_non_root_disk_name(session): return name.strip(), mpoint.strip() +def get_disk_by_serial(session, serial): + """ + Gets the disk by its serial value + + :param session: VM session + :param serial: The expected serial value + :return path: absolute path of disk + e.g. /dev/sda + :raises TestError: If the disk cannot be found. + """ + cmd = "lsblk -n -p -l -o NAME,SERIAL" + s, o = utils_misc.cmd_status_output(cmd, + ignore_status=False, + shell=True, + verbose=True, + session=session) + if s: + raise exceptions.TestError("Couldn't list block devices: '%s'" % o) + for line in o.split("\n"): + match = re.match(r'(/dev/[a-z]+)[\s\t]+%s' % serial, line) + if match: + return match.groups()[0] + raise exceptions.TestError("Couldn't find disk with serial in:\n%s" % o) + + def create_disk(disk_type, path=None, size="500M", disk_format="raw", extra='', session=None): """