- 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
305 lines
12 KiB
Diff
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
|
|
|