148 lines
4.7 KiB
Diff
148 lines
4.7 KiB
Diff
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
|
|
|