salt/set-virtual-grain-in-podman-systemd-container-703.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

85 lines
2.9 KiB
Diff

From dde665763bd2f043022f9601dd25d0ca8aa716be Mon Sep 17 00:00:00 2001
From: Georg <georg@lysergic.dev>
Date: Fri, 21 Feb 2025 10:24:51 +0000
Subject: [PATCH] Set virtual grain in Podman systemd container (#703)
Correctly handle the systemd-detect-virt output to identify a Podman
container running systemd as what it is instead of as a physical machine.
Signed-off-by: Georg Pfuetzenreuter <georg.pfuetzenreuter@suse.com>
(cherry picked from commit cf504a06859fb4a4fe9b8ebdd76380697f1f0c25)
---
changelog/67733.fixed.md | 1 +
salt/grains/core.py | 4 ++++
tests/pytests/unit/grains/test_core.py | 31 ++++++++++++++++++++++++++
3 files changed, 36 insertions(+)
create mode 100644 changelog/67733.fixed.md
diff --git a/changelog/67733.fixed.md b/changelog/67733.fixed.md
new file mode 100644
index 0000000000..242f65ec76
--- /dev/null
+++ b/changelog/67733.fixed.md
@@ -0,0 +1 @@
+Set correct virtual grain in systemd based Podman containers
diff --git a/salt/grains/core.py b/salt/grains/core.py
index 84d5b179dd..ceb142a7b8 100644
--- a/salt/grains/core.py
+++ b/salt/grains/core.py
@@ -911,6 +911,10 @@ def _virtual(osdata):
grains["virtual"] = "container"
grains["virtual_subtype"] = "LXC"
break
+ elif "podman" in output:
+ grains["virtual"] = "container"
+ grains["virtual_subtype"] = "Podman"
+ break
elif "amazon" in output:
grains["virtual"] = "Nitro"
grains["virtual_subtype"] = "Amazon EC2"
diff --git a/tests/pytests/unit/grains/test_core.py b/tests/pytests/unit/grains/test_core.py
index 3d2beaa2c9..072287248f 100644
--- a/tests/pytests/unit/grains/test_core.py
+++ b/tests/pytests/unit/grains/test_core.py
@@ -1752,6 +1752,37 @@ def test_lxc_virtual_with_virt_what():
assert ret["virtual_subtype"] == "LXC"
+@pytest.mark.skip_on_windows
+def test_podman_virtual_with_systemd_detect_virt():
+ """
+ Test if virtual grains are parsed correctly in Podman using systemd-detect-virt.
+ """
+
+ def _which_side_effect(path):
+ if path == "systemd-detect-virt":
+ return "/usr/bin/systemd-detect-virt"
+ return None
+
+ with patch.object(
+ salt.utils.platform, "is_windows", MagicMock(return_value=False)
+ ), patch.object(
+ salt.utils.path,
+ "which",
+ MagicMock(return_value=True, side_effect=_which_side_effect),
+ ), patch.dict(
+ core.__salt__,
+ {
+ "cmd.run_all": MagicMock(
+ return_value={"pid": 78, "retcode": 0, "stderr": "", "stdout": "podman"}
+ )
+ },
+ ):
+ osdata = {"kernel": "test"}
+ ret = core._virtual(osdata)
+ assert ret["virtual"] == "container"
+ assert ret["virtual_subtype"] == "Podman"
+
+
@pytest.mark.skip_on_windows
def test_container_inside_virtual_machine():
"""
--
2.48.1