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 fix-refresh-of-osrelease-and-related-grains-on-pytho.patch of Package venv-salt-minion

From 722484c93995b253bc61e93867a521693d3ca0b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
 <psuarezhernandez@suse.com>
Date: Wed, 2 Apr 2025 13:29:27 +0100
Subject: [PATCH] Fix refresh of osrelease and related grains on Python
 3.10+ (#712)

* Fix refresh of osrelease and related grains on Python 3.10+

* Add test__freedesktop_os_release_cache_is_invalidated unit test
---
 changelog/67932.fixed.md               |  1 +
 salt/grains/core.py                    |  5 ++++
 tests/pytests/unit/grains/test_core.py | 41 ++++++++++++++++++++++++++
 3 files changed, 47 insertions(+)
 create mode 100644 changelog/67932.fixed.md

diff --git a/changelog/67932.fixed.md b/changelog/67932.fixed.md
new file mode 100644
index 0000000000..255d61b502
--- /dev/null
+++ b/changelog/67932.fixed.md
@@ -0,0 +1 @@
+Fix refresh of osrelease and related grains on Python 3.10+
diff --git a/salt/grains/core.py b/salt/grains/core.py
index 94f58e8c4e..619969df9a 100644
--- a/salt/grains/core.py
+++ b/salt/grains/core.py
@@ -2170,6 +2170,11 @@ def _linux_distribution_data():
 
     log.trace("Getting OS name, release, and codename from freedesktop_os_release")
     try:
+        # If using platform.freedesktop_os_release we must invalidate
+        # the internal platform os_release cache to allow grains to be
+        # actually recalculated during grains_refresh
+        if hasattr(platform, "_os_release_cache"):
+            platform._os_release_cache = None
         os_release = _freedesktop_os_release()
         grains.update(_os_release_to_grains(os_release))
 
diff --git a/tests/pytests/unit/grains/test_core.py b/tests/pytests/unit/grains/test_core.py
index c3cf12c10f..c15a3b4360 100644
--- a/tests/pytests/unit/grains/test_core.py
+++ b/tests/pytests/unit/grains/test_core.py
@@ -406,6 +406,47 @@ def test__linux_lsb_distrib_data():
     assert not has_error
 
 
+@pytest.mark.skip_unless_on_linux
+@pytest.mark.skipif(
+    sys.version_info < (3, 10),
+    reason="platform.freedesktop_os_release not available in Python < 3.10",
+)
+def test__freedesktop_os_release_cache_is_invalidated():
+    OS_RELEASE_DATA = {
+        "NAME": "openSUSE Leap",
+        "ID": "opensuse-leap",
+        "PRETTY_NAME": "openSUSE Leap 15.6",
+        "VERSION": "15.6",
+        "ID_LIKE": "suse opensuse",
+        "VERSION_ID": "15.6",
+        "ANSI_COLOR": "0;32",
+        "CPE_NAME": "cpe:/o:opensuse:leap:15.6",
+        "BUG_REPORT_URL": "https://bugs.opensuse.org",
+        "HOME_URL": "https://www.opensuse.org/",
+        "DOCUMENTATION_URL": "https://en.opensuse.org/Portal:Leap",
+        "LOGO": "distributor-logo-Leap",
+    }
+
+    class FreeDesktopOSReleaseMock:
+        def __call__(self):
+            if hasattr(platform, "_os_release_cache"):
+                assert platform._os_release_cache is None
+            return OS_RELEASE_DATA
+
+    with patch.object(
+        core, "_linux_lsb_distrib_data", MagicMock(return_value=({}, None))
+    ), patch.object(
+        core, "_freedesktop_os_release", FreeDesktopOSReleaseMock()
+    ), patch.object(
+        core,
+        "_legacy_linux_distribution_data",
+        MagicMock(return_value={"osrelease": "15.6"}),
+    ):
+        platform._os_release_cache = {"this-cache-should-be-invalidated": "foobar"}
+        ret = core._linux_distribution_data()
+        assert ret == {"osrelease": "15.6"}
+
+
 @pytest.mark.skip_unless_on_linux
 def test_gnu_slash_linux_in_os_name():
     """
-- 
2.49.0

openSUSE Build Service is sponsored by