We have some news to share for the request index beta feature. We’ve added more options to sort your requests, counters to the individual filters and documentation for the search functionality. Checkout the blog post for more details.

File repair-virt_query-outputter-655.patch of Package salt

From 325506774381cc8edadee9b2f43fd6733d4f9edb Mon Sep 17 00:00:00 2001
From: Georg <georg@lysergic.dev>
Date: Fri, 21 Feb 2025 12:40:45 +0000
Subject: [PATCH] Repair virt_query outputter (#655)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Repair virt_query outputter

Existing code was not functional.
Only return if a dictionary is passed and reference the correct
data.

Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
(cherry picked from commit e3c365ad8f385121aa878950e13892d986d79656)

* Facilitate block devices in virt_query outputter

Disk data in Libvirt VMs does not contain a disk size if the disk
references a block device.
Skip the field for such disks instead of failing with a key error.

Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
(cherry picked from commit ed73abd44117ad745e9c91f2b33caf04402b117c)

* Add unit tests for virt_query outputter

---------

Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com>
---
 changelog/65841.fixed.md                     |   1 +
 salt/output/virt_query.py                    |  64 +++----
 tests/pytests/unit/output/test_virt_query.py | 176 +++++++++++++++++++
 3 files changed, 210 insertions(+), 31 deletions(-)
 create mode 100644 changelog/65841.fixed.md
 create mode 100644 tests/pytests/unit/output/test_virt_query.py

diff --git a/changelog/65841.fixed.md b/changelog/65841.fixed.md
new file mode 100644
index 0000000000..7fb6336ea1
--- /dev/null
+++ b/changelog/65841.fixed.md
@@ -0,0 +1 @@
+Restore functionality of virt_query outputter and add support for block devices.
diff --git a/salt/output/virt_query.py b/salt/output/virt_query.py
index d20e6357e6..0f989fedfa 100644
--- a/salt/output/virt_query.py
+++ b/salt/output/virt_query.py
@@ -12,35 +12,37 @@ def output(data, **kwargs):  # pylint: disable=unused-argument
     Display output for the salt-run virt.query function
     """
     out = ""
-    for id_ in data["data"]:
-        out += "{}\n".format(id_)
-        for vm_ in data["data"][id_]["vm_info"]:
-            out += "  {}\n".format(vm_)
-            vm_data = data[id_]["vm_info"][vm_]
-            if "cpu" in vm_data:
-                out += "    CPU: {}\n".format(vm_data["cpu"])
-            if "mem" in vm_data:
-                out += "    Memory: {}\n".format(vm_data["mem"])
-            if "state" in vm_data:
-                out += "    State: {}\n".format(vm_data["state"])
-            if "graphics" in vm_data:
-                if vm_data["graphics"].get("type", "") == "vnc":
-                    out += "    Graphics: vnc - {}:{}\n".format(
-                        id_, vm_data["graphics"]["port"]
-                    )
-            if "disks" in vm_data:
-                for disk, d_data in vm_data["disks"].items():
-                    out += "    Disk - {}:\n".format(disk)
-                    out += "      Size: {}\n".format(d_data["disk size"])
-                    out += "      File: {}\n".format(d_data["file"])
-                    out += "      File Format: {}\n".format(d_data["file format"])
-            if "nics" in vm_data:
-                for mac in vm_data["nics"]:
-                    out += "    Nic - {}:\n".format(mac)
-                    out += "      Source: {}\n".format(
-                        vm_data["nics"][mac]["source"][
-                            next(iter(vm_data["nics"][mac]["source"].keys()))
-                        ]
-                    )
-                    out += "      Type: {}\n".format(vm_data["nics"][mac]["type"])
+    if isinstance(data, dict) and "event" in data:
+        for id_ in data["event"]["data"]:
+            out += "{}\n".format(id_)
+            for vm_ in data["event"]["data"][id_]["vm_info"]:
+                out += "  {}\n".format(vm_)
+                vm_data = data["event"]["data"][id_]["vm_info"][vm_]
+                if "cpu" in vm_data:
+                    out += "    CPU: {}\n".format(vm_data["cpu"])
+                if "mem" in vm_data:
+                    out += "    Memory: {}\n".format(vm_data["mem"])
+                if "state" in vm_data:
+                    out += "    State: {}\n".format(vm_data["state"])
+                if "graphics" in vm_data:
+                    if vm_data["graphics"].get("type", "") == "vnc":
+                        out += "    Graphics: vnc - {}:{}\n".format(
+                            id_, vm_data["graphics"]["port"]
+                        )
+                if "disks" in vm_data:
+                    for disk, d_data in vm_data["disks"].items():
+                        out += "    Disk - {}:\n".format(disk)
+                        if "disk size" in d_data:
+                            out += "      Size: {}\n".format(d_data["disk size"])
+                        out += "      File: {}\n".format(d_data["file"])
+                        out += "      File Format: {}\n".format(d_data["file format"])
+                if "nics" in vm_data:
+                    for mac in vm_data["nics"]:
+                        out += "    NIC - {}:\n".format(mac)
+                        out += "      Source: {}\n".format(
+                            vm_data["nics"][mac]["source"][
+                                next(iter(vm_data["nics"][mac]["source"].keys()))
+                            ]
+                        )
+                        out += "      Type: {}\n".format(vm_data["nics"][mac]["type"])
     return out
diff --git a/tests/pytests/unit/output/test_virt_query.py b/tests/pytests/unit/output/test_virt_query.py
new file mode 100644
index 0000000000..3f8814ee26
--- /dev/null
+++ b/tests/pytests/unit/output/test_virt_query.py
@@ -0,0 +1,176 @@
+"""
+unittests for virt_query outputter
+"""
+
+import pytest
+
+import salt.output.virt_query as virt_query
+from tests.support.mock import patch
+
+
+@pytest.fixture
+def configure_loader_modules():
+    return {virt_query: {}}
+
+
+@pytest.fixture
+def data():
+    return {
+        "suffix": "progress",
+        "event": {
+            "data": {
+                "mysystem": {
+                    "freecpu": 14,
+                    "freemem": 29566.0,
+                    "node_info": {
+                        "cpucores": 8,
+                        "cpumhz": 1089,
+                        "cpumodel": "x86_64",
+                        "cpus": 16,
+                        "cputhreads": 2,
+                        "numanodes": 1,
+                        "phymemory": 30846,
+                        "sockets": 1,
+                    },
+                    "vm_info": {
+                        "vm1": {
+                            "cpu": 2,
+                            "cputime": 1214270000000,
+                            "disks": {
+                                "vda": {
+                                    "file": "default/vm1-main-disk",
+                                    "type": "disk",
+                                    "file format": "qcow2",
+                                    "virtual size": 214748364800,
+                                    "disk size": 1831731200,
+                                    "backing file": {
+                                        "file": "/var/lib/libvirt/images/sles15sp4o",
+                                        "file format": "qcow2",
+                                    },
+                                },
+                                "hdd": {
+                                    "file": "default/vm1-cloudinit-disk",
+                                    "type": "cdrom",
+                                    "file format": "raw",
+                                    "virtual size": 374784,
+                                    "disk size": 376832,
+                                },
+                            },
+                            "graphics": {
+                                "autoport": "yes",
+                                "keymap": "None",
+                                "listen": "0.0.0.0",
+                                "port": "5900",
+                                "type": "spice",
+                            },
+                            "nics": {
+                                "aa:bb:cc:dd:ee:ff": {
+                                    "type": "network",
+                                    "mac": "aa:bb:cc:dd:ee:ff",
+                                    "source": {"network": "default"},
+                                    "model": "virtio",
+                                    "address": {
+                                        "type": "pci",
+                                        "domain": "0x0000",
+                                        "bus": "0x00",
+                                        "slot": "0x03",
+                                        "function": "0x0",
+                                    },
+                                }
+                            },
+                            "uuid": "yyyyyy",
+                            "loader": {"path": "None"},
+                            "on_crash": "destroy",
+                            "on_reboot": "restart",
+                            "on_poweroff": "destroy",
+                            "maxMem": 1048576,
+                            "mem": 1048576,
+                            "state": "running",
+                        },
+                        "uyuni-proxy": {
+                            "cpu": 2,
+                            "cputime": 0,
+                            "disks": {
+                                "vda": {
+                                    "file": "default/uyuni-proxy-main-disk",
+                                    "type": "disk",
+                                    "file format": "qcow2",
+                                    "virtual size": 214748364800,
+                                    "disk size": 4491255808,
+                                    "backing file": {
+                                        "file": "/var/lib/libvirt/images/leapmicro55o",
+                                        "file format": "qcow2",
+                                    },
+                                }
+                            },
+                            "graphics": {
+                                "autoport": "yes",
+                                "keymap": "None",
+                                "listen": "0.0.0.0",
+                                "port": "None",
+                                "type": "spice",
+                            },
+                            "nics": {
+                                "aa:bb:cc:dd:ee:aa": {
+                                    "type": "network",
+                                    "mac": "aa:bb:cc:dd:ee:aa",
+                                    "source": {"network": "default"},
+                                    "model": "virtio",
+                                    "address": {
+                                        "type": "pci",
+                                        "domain": "0x0000",
+                                        "bus": "0x00",
+                                        "slot": "0x03",
+                                        "function": "0x0",
+                                    },
+                                }
+                            },
+                            "uuid": "xxxxx",
+                            "loader": {"path": "None"},
+                            "on_crash": "destroy",
+                            "on_reboot": "restart",
+                            "on_poweroff": "destroy",
+                            "maxMem": 2097152,
+                            "mem": 2097152,
+                            "state": "shutdown",
+                        },
+                    },
+                }
+            },
+            "outputter": "virt_query",
+            "_stamp": "2025-02-21T11:28:04.406561",
+        },
+    }
+
+
+def test_default_output(data):
+    ret = virt_query.output(data)
+    expected = """mysystem
+  vm1
+    CPU: 2
+    Memory: 1048576
+    State: running
+    Disk - vda:
+      Size: 1831731200
+      File: default/vm1-main-disk
+      File Format: qcow2
+    Disk - hdd:
+      Size: 376832
+      File: default/vm1-cloudinit-disk
+      File Format: raw
+    NIC - aa:bb:cc:dd:ee:ff:
+      Source: default
+      Type: network
+  uyuni-proxy
+    CPU: 2
+    Memory: 2097152
+    State: shutdown
+    Disk - vda:
+      Size: 4491255808
+      File: default/uyuni-proxy-main-disk
+      File Format: qcow2
+    NIC - aa:bb:cc:dd:ee:aa:
+      Source: default
+      Type: network
+"""
+    assert expected == ret
-- 
2.48.1

openSUSE Build Service is sponsored by