From 9c9c6e31deebdc0d38f24bb939b3a8180381b138 Mon Sep 17 00:00:00 2001 From: Geetika Kapoor Date: Mon, 9 Mar 2026 11:48:03 +0000 Subject: [PATCH] Enhance wait_for_vm_interfaces to detect and log missing interfaces Signed-off-by: Geetika Kapoor --- utilities/virt.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/utilities/virt.py b/utilities/virt.py index 48e8efe3e9..0ebca5e596 100644 --- a/utilities/virt.py +++ b/utilities/virt.py @@ -138,12 +138,23 @@ def wait_for_vm_interfaces(vmi: VirtualMachineInstance, timeout: int = TIMEOUT_1 timeout=timeout, ) LOGGER.info(f"Wait for {vmi.name} network interfaces") + expected_names = { + iface.name for iface in vmi.instance.spec.domain.devices.interfaces if iface.get("state") != "absent" + } sampler = TimeoutSampler(wait_timeout=timeout, sleep=1, func=lambda: vmi.instance) - for sample in sampler: - interfaces = sample.get("status", {}).get("interfaces", []) - active_interfaces = [interface for interface in interfaces if interface.get("interfaceName")] - if len(active_interfaces) == len(interfaces): - return True + reported_names = set() + try: + for sample in sampler: + interfaces = sample.get("status", {}).get("interfaces", []) + reported_names = {iface.get("name") for iface in interfaces if iface.get("name")} + if reported_names == expected_names and all(iface.get("interfaceName") for iface in interfaces): + return True + except TimeoutExpiredError: + LOGGER.error( + f"VMI {vmi.name}: expected interfaces: {expected_names}, reported: {reported_names}. " + f"Missing (not reported by guest agent): {expected_names - reported_names}." + ) + raise return False