salt/repair-virt_query-outputter-655.patch
Victor Zhestkov c7249d56b9 - Fix virt_query outputter and add support for block devices
- Make _auth calls visible with master stats
- Repair mount.fstab_present always returning pending changes
- Set virtual grain in Podman systemd container
- Fix crash due wrong client reference on `SaltMakoTemplateLookup`
- Enhace batch async and fix some detected issues
- Added:
  * repair-virt_query-outputter-655.patch
  * make-_auth-calls-visible-with-master-stats-696.patch
  * repair-fstab_present-test-mode-702.patch
  * set-virtual-grain-in-podman-systemd-container-703.patch
  * fixed-file-client-private-attribute-reference-on-sal.patch
  * backport-batch-async-fixes-and-improvements-701.patch

OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=273
2025-02-21 13:06:26 +00:00

305 lines
12 KiB
Diff

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