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 add-subsystem-filter-to-udev.exportdb-bsc-1236621-71.patch of Package salt

From a272ba87ec054e9751d50b8041be78258e86b360 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
 <psuarezhernandez@suse.com>
Date: Wed, 11 Jun 2025 11:53:28 +0100
Subject: [PATCH] Add subsystem filter to udev.exportdb (bsc#1236621)
 (#717)

Co-authored-by: Alexander Graul <agraul@suse.com>
---
 salt/modules/udev.py                    | 34 +++++++++++---
 tests/pytests/unit/modules/test_udev.py | 60 +++++++++++++++++++++++++
 2 files changed, 89 insertions(+), 5 deletions(-)

diff --git a/salt/modules/udev.py b/salt/modules/udev.py
index 9a734edf4b7..9ca1a5b6b57 100644
--- a/salt/modules/udev.py
+++ b/salt/modules/udev.py
@@ -9,7 +9,7 @@ import logging
 
 import salt.modules.cmdmod
 import salt.utils.path
-from salt.exceptions import CommandExecutionError
+from salt.exceptions import CommandExecutionError, SaltInvocationError
 
 __salt__ = {
     "cmd.run_all": salt.modules.cmdmod.run_all,
@@ -162,21 +162,45 @@ def links(dev):
     return info(dev).get("S", None)
 
 
-def exportdb():
-    """
-    Return all the udev database
+def _filter_subsystems(udevadm_info, subsystems):
+    """Filter udevadm_info, keep entries that match any of the passed subsystems."""
+
+    ret = []
+    for entry in udevadm_info:
+        if entry["E"]["SUBSYSTEM"] in subsystems:
+            ret.append(entry)
+    return ret
+
+
+def exportdb(subsystems=None):
+    """Return the complete udev database.
+
+    :param list subsystems: This parameter limits the returned data to specified
+        subsystems such as "pci", "usb", "block", etc.
+
+        .. versionadded :: 3008
 
     CLI Example:
 
     .. code-block:: bash
 
         salt '*' udev.exportdb
+        salt '*' udev.exportdb subsystems='[usb, block]'
+
     """
 
+    if subsystems is not None:
+        if not isinstance(subsystems, list):
+            raise SaltInvocationError("subsystems must be a list")
+
     cmd = "udevadm info --export-db"
     udev_result = __salt__["cmd.run_all"](cmd, output_loglevel="quiet")
 
     if udev_result["retcode"]:
         raise CommandExecutionError(udev_result["stderr"])
 
-    return _parse_udevadm_info(udev_result["stdout"])
+    ret = _parse_udevadm_info(udev_result["stdout"])
+    if subsystems is not None:
+        ret = _filter_subsystems(ret, subsystems)
+
+    return ret
diff --git a/tests/pytests/unit/modules/test_udev.py b/tests/pytests/unit/modules/test_udev.py
index d5dbee9d20f..6077293a058 100644
--- a/tests/pytests/unit/modules/test_udev.py
+++ b/tests/pytests/unit/modules/test_udev.py
@@ -187,3 +187,63 @@ def test_normalize_info():
         "some": "data",
         "key": ["value", "here"],
     }
+
+
+def test_udev_subsystem_filter():
+    udev_db = [
+        {
+            "P": "/devices/LNXSYSTM:00/LNXPWRBN:00",
+            "E": {
+                "MODALIAS": "acpi:LNXPWRBN:",
+                "SUBSYSTEM": "acpi",
+                "DRIVER": "button",
+                "DEVPATH": "/devices/LNXSYSTM:00/LNXPWRBN:00",
+            },
+        },
+        {
+            "P": "/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2",
+            "E": {
+                "SUBSYSTEM": "input",
+                "PRODUCT": "19/0/1/0",
+                "PHYS": '"LNXPWRBN/button/input0"',
+                "NAME": '"Power Button"',
+                "ID_INPUT": 1,
+                "DEVPATH": "/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2",
+                "MODALIAS": "input:b0019v0000p0001e0000-e0,1,k74,ramlsfw",
+                "ID_PATH_TAG": "acpi-LNXPWRBN_00",
+                "TAGS": ":seat:",
+                "PROP": 0,
+                "ID_FOR_SEAT": "input-acpi-LNXPWRBN_00",
+                "KEY": "10000000000000 0",
+                "USEC_INITIALIZED": 2010022,
+                "ID_PATH": "acpi-LNXPWRBN:00",
+                "EV": 3,
+                "ID_INPUT_KEY": 1,
+            },
+        },
+        {
+            "P": "/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2/event2",
+            "E": {
+                "SUBSYSTEM": "input",
+                "XKBLAYOUT": "us",
+                "MAJOR": 13,
+                "ID_INPUT": 1,
+                "DEVPATH": "/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2/event2",
+                "ID_PATH_TAG": "acpi-LNXPWRBN_00",
+                "DEVNAME": "/dev/input/event2",
+                "TAGS": ":power-switch:",
+                "BACKSPACE": "guess",
+                "MINOR": 66,
+                "USEC_INITIALIZED": 2076101,
+                "ID_PATH": "acpi-LNXPWRBN:00",
+                "XKBMODEL": "pc105",
+                "ID_INPUT_KEY": 1,
+            },
+            "N": "input/event2",
+        },
+    ]
+
+    filtered = udev._filter_subsystems(udev_db, ["acpi", "usb"])
+
+    assert len(filtered) == 1
+    assert filtered[0]["P"] == "/devices/LNXSYSTM:00/LNXPWRBN:00"
-- 
2.49.0

openSUSE Build Service is sponsored by