From e3f25965af0e2de490e8ad0e87d4975c2826b091 Mon Sep 17 00:00:00 2001 From: Ben Grande Date: Tue, 15 Oct 2024 11:19:51 +0200 Subject: [PATCH 01/23] Regularize yumpkg option separators Add logging and convert to formatted string literal. Other Yum options uses equal sign as separator but setopt separator is irregular using space as separator. Fix: https://github.com/saltstack/salt/issues/66970 --- salt/modules/yumpkg.py | 3 ++- tests/pytests/unit/modules/test_yumpkg.py | 30 ++++++++--------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/salt/modules/yumpkg.py b/salt/modules/yumpkg.py index a301d93eac34..fd89b9e90c29 100644 --- a/salt/modules/yumpkg.py +++ b/salt/modules/yumpkg.py @@ -315,7 +315,8 @@ def _get_options(**kwargs): ret.append(f"--branch={branch}") for item in setopt: - ret.extend(["--setopt", str(item)]) + log.info("Adding configuration option '%s'", item) + ret.extend([f"--setopt={item}"]) if get_extra_options: # sorting here to make order uniform, makes unit testing more reliable diff --git a/tests/pytests/unit/modules/test_yumpkg.py b/tests/pytests/unit/modules/test_yumpkg.py index db1dc919a58c..ed5e77faeb46 100644 --- a/tests/pytests/unit/modules/test_yumpkg.py +++ b/tests/pytests/unit/modules/test_yumpkg.py @@ -1423,10 +1423,8 @@ def test_install_with_options(): "--disablerepo=*", "--enablerepo=good", "--branch=foo", - "--setopt", - "obsoletes=0", - "--setopt", - "plugins=0", + "--setopt=obsoletes=0", + "--setopt=plugins=0", "install", "foo", ], @@ -1454,10 +1452,8 @@ def test_install_with_options(): "--disablerepo=bad", "--enablerepo=good", "--branch=foo", - "--setopt", - "obsoletes=0", - "--setopt", - "plugins=0", + "--setopt=obsoletes=0", + "--setopt=plugins=0", "install", "foo", ], @@ -1852,10 +1848,8 @@ def test_upgrade_with_options(): "--disablerepo=*", "--enablerepo=good", "--branch=foo", - "--setopt", - "obsoletes=0", - "--setopt", - "plugins=0", + "--setopt=obsoletes=0", + "--setopt=plugins=0", "--exclude=kernel*", "--nogpgcheck", "upgrade", @@ -1897,10 +1891,8 @@ def test_upgrade_with_options(): "--disablerepo=bad", "--enablerepo=good", "--branch=foo", - "--setopt", - "obsoletes=0", - "--setopt", - "plugins=0", + "--setopt=obsoletes=0", + "--setopt=plugins=0", "--exclude=kernel*", "upgrade", ], @@ -3046,10 +3038,8 @@ def test_pkg_update_dnf(): "dnf", "--quiet", "-y", - "--setopt", - "plugins=0", - "--setopt", - "obsoletes=False", + "--setopt=plugins=0", + "--setopt=obsoletes=False", "upgrade", "foo", ], From 30e0de375f2c8bae05ee8c1418a0f320e00f63c0 Mon Sep 17 00:00:00 2001 From: twangboy Date: Mon, 14 Oct 2024 16:11:55 -0600 Subject: [PATCH 02/23] Remove wmic usage from disk grains on Windows --- changelog/66959.fixed.md | 2 + salt/grains/disks.py | 56 ++++++++---------- salt/modules/cmdmod.py | 2 +- salt/utils/path.py | 2 +- tests/pytests/unit/grains/test_disks.py | 75 +++++++++++-------------- 5 files changed, 61 insertions(+), 76 deletions(-) create mode 100644 changelog/66959.fixed.md diff --git a/changelog/66959.fixed.md b/changelog/66959.fixed.md new file mode 100644 index 000000000000..ad9878c2577a --- /dev/null +++ b/changelog/66959.fixed.md @@ -0,0 +1,2 @@ +Removed the usage of wmic to get the disk grains for Windows. The wmic binary is +being deprecated. diff --git a/salt/grains/disks.py b/salt/grains/disks.py index f61ad6d6b34b..6b2887060361 100644 --- a/salt/grains/disks.py +++ b/salt/grains/disks.py @@ -16,8 +16,11 @@ __salt__ = { "cmd.run": salt.modules.cmdmod._run_quiet, "cmd.run_all": salt.modules.cmdmod._run_all_quiet, + "cmd.powershell": salt.modules.cmdmod.powershell, } +from salt.exceptions import CommandExecutionError + log = logging.getLogger(__name__) @@ -153,41 +156,28 @@ def _linux_disks(): def _windows_disks(): - wmic = salt.utils.path.which("wmic") - - namespace = r"\\root\microsoft\windows\storage" - path = "MSFT_PhysicalDisk" - get = "DeviceID,MediaType" + cmd = "Get-PhysicalDisk | Select DeviceID, MediaType" ret = {"disks": [], "ssds": []} - cmdret = __salt__["cmd.run_all"]( - "{} /namespace:{} path {} get {} /format:table".format( - wmic, namespace, path, get - ) - ) - - if cmdret["retcode"] != 0: - log.trace("Disk grain does not support this version of Windows") - else: - for line in cmdret["stdout"].splitlines(): - info = line.split() - if len(info) != 2 or not info[0].isdigit() or not info[1].isdigit(): - continue - device = rf"\\.\PhysicalDrive{info[0]}" - mediatype = info[1] - if mediatype == "3": - log.trace("Device %s reports itself as an HDD", device) - ret["disks"].append(device) - elif mediatype == "4": - log.trace("Device %s reports itself as an SSD", device) - ret["ssds"].append(device) - ret["disks"].append(device) - elif mediatype == "5": - log.trace("Device %s reports itself as an SCM", device) - ret["disks"].append(device) - else: - log.trace("Device %s reports itself as Unspecified", device) - ret["disks"].append(device) + drive_info = __salt__["cmd.powershell"](cmd) + + if not drive_info: + log.trace("No physical discs found") + return ret + + # We need a list of dict + if isinstance(drive_info, dict): + drive_info = [drive_info] + + for drive in drive_info: + # Make sure we have a valid drive type + if drive["MediaType"].lower() not in ["hdd", "ssd", "scm", "unspecified"]: + log.trace(f'Unknown media type: {drive["MediaType"]}') + continue + device = rf'\\.\PhysicalDrive{drive["DeviceID"]}' + ret["disks"].append(device) + if drive["MediaType"].lower() == "ssd": + ret["ssds"].append(device) return ret diff --git a/salt/modules/cmdmod.py b/salt/modules/cmdmod.py index 1891c044fb03..e708c10c0b00 100644 --- a/salt/modules/cmdmod.py +++ b/salt/modules/cmdmod.py @@ -266,7 +266,7 @@ def _prep_powershell_cmd(win_shell, cmd, encoded_cmd): win_shell = salt.utils.path.which(win_shell) if not win_shell: - raise CommandExecutionError("PowerShell binary not found") + raise CommandExecutionError(f"PowerShell binary not found: {win_shell}") new_cmd = [win_shell, "-NonInteractive", "-NoProfile", "-ExecutionPolicy", "Bypass"] diff --git a/salt/utils/path.py b/salt/utils/path.py index edaab010c06f..297433665c39 100644 --- a/salt/utils/path.py +++ b/salt/utils/path.py @@ -203,7 +203,7 @@ def is_executable(path, membership=res): # now to search through our system_path for path in system_path: - p = join(path, exe) + p = join(os.path.expandvars(path), exe) # iterate through all extensions to see which one is executable for ext in pathext: diff --git a/tests/pytests/unit/grains/test_disks.py b/tests/pytests/unit/grains/test_disks.py index a0d6d1030e7c..b2a2d5fbd2f1 100644 --- a/tests/pytests/unit/grains/test_disks.py +++ b/tests/pytests/unit/grains/test_disks.py @@ -2,8 +2,6 @@ :codeauthor: :email:`Shane Lee ` """ -import textwrap - import pytest import salt.grains.disks as disks @@ -17,63 +15,58 @@ def configure_loader_modules(): } -def test__windows_disks(): +def test__windows_disks_dict(): """ - Test grains._windows_disks, normal return - Should return a populated dictionary + Test grains._windows_disks with a single disk returned as a dict + Should return 1 disk and no ssds + """ + devices = {"DeviceID": 0, "MediaType": "HDD"} + mock_powershell = MagicMock(return_value=devices) + + with patch.dict(disks.__salt__, {"cmd.powershell": mock_powershell}): + result = disks._windows_disks() + expected = {"disks": ["\\\\.\\PhysicalDrive0"], "ssds": []} + assert result == expected + + +def test__windows_disks_list(): """ - mock_which = MagicMock(return_value="C:\\Windows\\System32\\wbem\\WMIC.exe") - wmic_result = textwrap.dedent( - """ - DeviceId MediaType - 0 4 - 1 0 - 2 3 - 3 5 + test grains._windows_disks with multiple disks and types as a list of dicts + Should return 4 disks and 1 ssd """ - ) - mock_run_all = MagicMock(return_value={"stdout": wmic_result, "retcode": 0}) + devices = [ + {"DeviceID": 0, "MediaType": "SSD"}, + {"DeviceID": 1, "MediaType": "HDD"}, + {"DeviceID": 2, "MediaType": "HDD"}, + {"DeviceID": 3, "MediaType": "HDD"}, + ] + mock_powershell = MagicMock(return_value=devices) - with patch("salt.utils.path.which", mock_which), patch.dict( - disks.__salt__, {"cmd.run_all": mock_run_all} - ): + with patch.dict(disks.__salt__, {"cmd.powershell": mock_powershell}): result = disks._windows_disks() expected = { - "ssds": ["\\\\.\\PhysicalDrive0"], "disks": [ "\\\\.\\PhysicalDrive0", "\\\\.\\PhysicalDrive1", "\\\\.\\PhysicalDrive2", "\\\\.\\PhysicalDrive3", ], + "ssds": ["\\\\.\\PhysicalDrive0"], } assert result == expected - cmd = " ".join( - [ - "C:\\Windows\\System32\\wbem\\WMIC.exe", - "/namespace:\\\\root\\microsoft\\windows\\storage", - "path", - "MSFT_PhysicalDisk", - "get", - "DeviceID,MediaType", - "/format:table", - ] - ) - mock_run_all.assert_called_once_with(cmd) - - -def test__windows_disks_retcode(): + + +def test__windows_disks_empty(): """ - Test grains._windows_disks, retcode 1 + Test grains._windows_disks when nothing is returned Should return empty lists """ - mock_which = MagicMock(return_value="C:\\Windows\\System32\\wbem\\WMIC.exe") - mock_run_all = MagicMock(return_value={"stdout": "", "retcode": 1}) - with patch("salt.utils.path.which", mock_which), patch.dict( - disks.__salt__, {"cmd.run_all": mock_run_all} - ): + devices = {} + mock_powershell = MagicMock(return_value=devices) + + with patch.dict(disks.__salt__, {"cmd.powershell": mock_powershell}): + expected = {"disks": [], "ssds": []} result = disks._windows_disks() - expected = {"ssds": [], "disks": []} assert result == expected From 6caf16d439fda747f710ab97fcd4c007c6620006 Mon Sep 17 00:00:00 2001 From: twangboy Date: Mon, 14 Oct 2024 16:30:34 -0600 Subject: [PATCH 03/23] Remove unused import --- salt/grains/disks.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/salt/grains/disks.py b/salt/grains/disks.py index 6b2887060361..7a3f04827706 100644 --- a/salt/grains/disks.py +++ b/salt/grains/disks.py @@ -19,8 +19,6 @@ "cmd.powershell": salt.modules.cmdmod.powershell, } -from salt.exceptions import CommandExecutionError - log = logging.getLogger(__name__) From 98f49eba4e1e9b4f7c0a6ff95c9f841b2b7f2e32 Mon Sep 17 00:00:00 2001 From: twangboy Date: Tue, 15 Oct 2024 11:10:51 -0600 Subject: [PATCH 04/23] Remove wmic from iscsi grains --- changelog/66959.fixed.md | 4 +-- salt/grains/iscsi.py | 29 ++++++++--------- tests/pytests/unit/grains/test_iscsi.py | 43 +++++++++++++++++++------ 3 files changed, 48 insertions(+), 28 deletions(-) diff --git a/changelog/66959.fixed.md b/changelog/66959.fixed.md index ad9878c2577a..69e40d664798 100644 --- a/changelog/66959.fixed.md +++ b/changelog/66959.fixed.md @@ -1,2 +1,2 @@ -Removed the usage of wmic to get the disk grains for Windows. The wmic binary is -being deprecated. +Removed the usage of wmic to get the disk and iscsi grains for Windows. The wmic +binary is being deprecated. diff --git a/salt/grains/iscsi.py b/salt/grains/iscsi.py index 64199d6e99d7..62c4eccc7199 100644 --- a/salt/grains/iscsi.py +++ b/salt/grains/iscsi.py @@ -85,28 +85,25 @@ def _aix_iqn(): def _windows_iqn(): """ - Return iSCSI IQN from a Windows host. + Return iSCSI nodes from a Windows host. """ + cmd = "Get-InitiatorPort | Select NodeAddress" ret = [] - wmic = salt.utils.path.which("wmic") + nodes = salt.modules.cmdmod.powershell(cmd) - if not wmic: + if not nodes: + log.trace("No iSCSI nodes found") return ret - namespace = r"\\root\WMI" - path = "MSiSCSIInitiator_MethodClass" - get = "iSCSINodeName" + # A single node will return a dictionary with a single entry + # {"NodeAddress": "iqn.1991-05.com.microsoft:johnj99-pc2.contoso.com"} + # Multiple nodes will return a list of single entry dicts + # We need a list of dict + if isinstance(nodes, dict): + nodes = [nodes] - cmd_ret = salt.modules.cmdmod.run_all( - "{} /namespace:{} path {} get {} /format:table".format( - wmic, namespace, path, get - ) - ) - - for line in cmd_ret["stdout"].splitlines(): - if line.startswith("iqn."): - line = line.rstrip() - ret.append(line.rstrip()) + for node in nodes: + ret.append(node["NodeAddress"]) return ret diff --git a/tests/pytests/unit/grains/test_iscsi.py b/tests/pytests/unit/grains/test_iscsi.py index 006c1bb4e8bf..615416c19d00 100644 --- a/tests/pytests/unit/grains/test_iscsi.py +++ b/tests/pytests/unit/grains/test_iscsi.py @@ -9,16 +9,39 @@ from tests.support.mock import MagicMock, mock_open, patch -def test_windows_iscsi_iqn_grains(): - cmd_run_mock = MagicMock( - return_value={"stdout": "iSCSINodeName\niqn.1991-05.com.microsoft:simon-x1\n"} - ) - _grains = {} - with patch("salt.utils.path.which", MagicMock(return_value=True)): - with patch("salt.modules.cmdmod.run_all", cmd_run_mock): - _grains["iscsi_iqn"] = iscsi._windows_iqn() - - assert _grains.get("iscsi_iqn") == ["iqn.1991-05.com.microsoft:simon-x1"] +def test_windows_iscsi_iqn_grains_empty(): + nodes_dict = {} + cmd_powershell_mock = MagicMock(return_value=nodes_dict) + with patch("salt.modules.cmdmod.powershell", cmd_powershell_mock): + result = iscsi._windows_iqn() + expected = [] + assert result == expected + + +def test_windows_iscsi_iqn_grains_single(): + nodes_dict = {"NodeAddress": "iqn.1991-05.com.microsoft:simon-x1"} + cmd_powershell_mock = MagicMock(return_value=nodes_dict) + with patch("salt.modules.cmdmod.powershell", cmd_powershell_mock): + result = iscsi._windows_iqn() + expected = ["iqn.1991-05.com.microsoft:simon-x1"] + assert result == expected + + +def test_windows_iscsi_iqn_grains_multiple(): + nodes_list = [ + {"NodeAddress": "iqn.1991-05.com.microsoft:simon-x1"}, + {"NodeAddress": "iqn.1991-05.com.microsoft:simon-x2"}, + {"NodeAddress": "iqn.1991-05.com.microsoft:simon-x3"}, + ] + cmd_powershell_mock = MagicMock(return_value=nodes_list) + with patch("salt.modules.cmdmod.powershell", cmd_powershell_mock): + result = iscsi._windows_iqn() + expected = [ + "iqn.1991-05.com.microsoft:simon-x1", + "iqn.1991-05.com.microsoft:simon-x2", + "iqn.1991-05.com.microsoft:simon-x3", + ] + assert result == expected def test_aix_iscsi_iqn_grains(): From 4e429ef772893f1aea9f37645aa2fe4f9ab8dd19 Mon Sep 17 00:00:00 2001 From: Georg Pfuetzenreuter Date: Sun, 15 Sep 2024 23:48:34 +0200 Subject: [PATCH 05/23] Remove perms from linux_acl.list_absent docstring Not a valid argument for this function, remove misleading documentation reference. Signed-off-by: Georg Pfuetzenreuter --- changelog/66891.fixed.md | 1 + salt/states/linux_acl.py | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) create mode 100644 changelog/66891.fixed.md diff --git a/changelog/66891.fixed.md b/changelog/66891.fixed.md new file mode 100644 index 000000000000..7bd756d7f298 --- /dev/null +++ b/changelog/66891.fixed.md @@ -0,0 +1 @@ +Remove "perms" from `linux_acl.list_absent()` documentation diff --git a/salt/states/linux_acl.py b/salt/states/linux_acl.py index 0413062b5ba0..39321732e963 100644 --- a/salt/states/linux_acl.py +++ b/salt/states/linux_acl.py @@ -697,9 +697,6 @@ def list_absent(name, acl_type, acl_names=None, recurse=False): acl_names The list of users or groups - perms - Remove the permissions eg.: rwx - recurse Set the permissions recursive in the path From 628c2d209586b46f981f5c4f77af5879e22e4a0c Mon Sep 17 00:00:00 2001 From: David Murphy Date: Thu, 17 Oct 2024 13:41:33 -0600 Subject: [PATCH 06/23] Add cryptography back as a dependency for Salt 3006 to base.txt requirements --- changelog/66883.fixed.md | 1 + requirements/base.txt | 1 + requirements/static/ci/py3.10/cloud.txt | 1 + requirements/static/ci/py3.10/darwin.txt | 1 + requirements/static/ci/py3.10/docs.txt | 12 ++++++++++++ requirements/static/ci/py3.10/freebsd.txt | 1 + requirements/static/ci/py3.10/lint.txt | 1 + requirements/static/ci/py3.10/linux.txt | 1 + requirements/static/ci/py3.10/windows.txt | 1 + requirements/static/ci/py3.11/cloud.txt | 1 + requirements/static/ci/py3.11/darwin.txt | 1 + requirements/static/ci/py3.11/docs.txt | 12 ++++++++++++ requirements/static/ci/py3.11/freebsd.txt | 1 + requirements/static/ci/py3.11/lint.txt | 1 + requirements/static/ci/py3.11/linux.txt | 1 + requirements/static/ci/py3.11/windows.txt | 1 + requirements/static/ci/py3.12/cloud.txt | 1 + requirements/static/ci/py3.12/darwin.txt | 1 + requirements/static/ci/py3.12/docs.txt | 12 ++++++++++++ requirements/static/ci/py3.12/freebsd.txt | 1 + requirements/static/ci/py3.12/lint.txt | 1 + requirements/static/ci/py3.12/linux.txt | 1 + requirements/static/ci/py3.12/windows.txt | 1 + requirements/static/ci/py3.7/cloud.txt | 1 + requirements/static/ci/py3.7/docs.txt | 12 ++++++++++++ requirements/static/ci/py3.7/freebsd.txt | 1 + requirements/static/ci/py3.7/linux.txt | 1 + requirements/static/ci/py3.7/windows.txt | 1 + requirements/static/ci/py3.8/cloud.txt | 1 + requirements/static/ci/py3.8/docs.txt | 12 ++++++++++++ requirements/static/ci/py3.8/freebsd.txt | 1 + requirements/static/ci/py3.8/lint.txt | 1 + requirements/static/ci/py3.8/linux.txt | 1 + requirements/static/ci/py3.8/windows.txt | 1 + requirements/static/ci/py3.9/cloud.txt | 1 + requirements/static/ci/py3.9/darwin.txt | 1 + requirements/static/ci/py3.9/docs.txt | 12 ++++++++++++ requirements/static/ci/py3.9/freebsd.txt | 1 + requirements/static/ci/py3.9/lint.txt | 1 + requirements/static/ci/py3.9/linux.txt | 1 + requirements/static/ci/py3.9/windows.txt | 1 + requirements/static/pkg/py3.10/darwin.txt | 1 + requirements/static/pkg/py3.10/freebsd.txt | 1 + requirements/static/pkg/py3.10/linux.txt | 1 + requirements/static/pkg/py3.10/windows.txt | 1 + requirements/static/pkg/py3.11/darwin.txt | 1 + requirements/static/pkg/py3.11/freebsd.txt | 1 + requirements/static/pkg/py3.11/linux.txt | 1 + requirements/static/pkg/py3.11/windows.txt | 1 + requirements/static/pkg/py3.12/darwin.txt | 1 + requirements/static/pkg/py3.12/freebsd.txt | 1 + requirements/static/pkg/py3.12/linux.txt | 1 + requirements/static/pkg/py3.12/windows.txt | 1 + requirements/static/pkg/py3.7/freebsd.txt | 1 + requirements/static/pkg/py3.7/linux.txt | 1 + requirements/static/pkg/py3.7/windows.txt | 1 + requirements/static/pkg/py3.8/freebsd.txt | 1 + requirements/static/pkg/py3.8/linux.txt | 1 + requirements/static/pkg/py3.8/windows.txt | 1 + requirements/static/pkg/py3.9/darwin.txt | 1 + requirements/static/pkg/py3.9/freebsd.txt | 1 + requirements/static/pkg/py3.9/linux.txt | 1 + requirements/static/pkg/py3.9/windows.txt | 1 + 63 files changed, 129 insertions(+) create mode 100644 changelog/66883.fixed.md diff --git a/changelog/66883.fixed.md b/changelog/66883.fixed.md new file mode 100644 index 000000000000..999b049857b6 --- /dev/null +++ b/changelog/66883.fixed.md @@ -0,0 +1 @@ +Added cryptogrpahy back to base.txt requirements as a dependency diff --git a/requirements/base.txt b/requirements/base.txt index de9cbaab17bb..1159d4e8899e 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -16,3 +16,4 @@ looseversion croniter>=0.3.0,!=0.3.22; sys_platform != 'win32' # We need contextvars for salt-ssh contextvars +cryptography>=42.0.0 diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index b64e1117dc19..94bf45b11e4a 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -127,6 +127,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index e5818d707bcb..b399f922ea66 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -93,6 +93,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt + # -r requirements/base.txt # -r requirements/darwin.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index 4aa8cfefe775..1180b647c22a 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -13,6 +13,10 @@ certifi==2024.7.4 ; python_version >= "3.10" # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt # requests +cffi==1.14.6 + # via + # -c requirements/static/ci/py3.10/linux.txt + # cryptography charset-normalizer==3.2.0 # via # -c requirements/static/ci/py3.10/linux.txt @@ -33,6 +37,10 @@ croniter==2.0.5 ; sys_platform != "win32" # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt +cryptography==42.0.5 + # via + # -c requirements/static/ci/py3.10/linux.txt + # -r requirements/base.txt distro==1.5.0 # via # -c requirements/static/ci/py3.10/linux.txt @@ -122,6 +130,10 @@ psutil==5.8.0 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt +pycparser==2.21 ; python_version >= "3.9" + # via + # -c requirements/static/ci/py3.10/linux.txt + # cffi pycryptodomex==3.19.1 # via # -c requirements/static/ci/py3.10/linux.txt diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 8df94c0cf59a..095c8a9e199c 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -90,6 +90,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 74febbd1a634..99fb12fb1511 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -139,6 +139,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # ansible-core # etcd3-py diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index e2142dcaa6b7..5e78edc43535 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -99,6 +99,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # ansible-core # etcd3-py diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index ae774c8c5da2..286affb096ee 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -82,6 +82,7 @@ contextvars==2.4 cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt + # -r requirements/base.txt # -r requirements/windows.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.11/cloud.txt b/requirements/static/ci/py3.11/cloud.txt index c1f9e9183648..401fffc51b42 100644 --- a/requirements/static/ci/py3.11/cloud.txt +++ b/requirements/static/ci/py3.11/cloud.txt @@ -123,6 +123,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index f03ecc33041a..01570c3faa3e 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -89,6 +89,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt + # -r requirements/base.txt # -r requirements/darwin.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.11/docs.txt b/requirements/static/ci/py3.11/docs.txt index eeb248be3f87..ad2a13f569a6 100644 --- a/requirements/static/ci/py3.11/docs.txt +++ b/requirements/static/ci/py3.11/docs.txt @@ -13,6 +13,10 @@ certifi==2024.7.4 ; python_version >= "3.10" # -c requirements/static/ci/py3.11/linux.txt # -r requirements/base.txt # requests +cffi==1.14.6 + # via + # -c requirements/static/ci/py3.11/linux.txt + # cryptography charset-normalizer==3.2.0 # via # -c requirements/static/ci/py3.11/linux.txt @@ -33,6 +37,10 @@ croniter==2.0.5 ; sys_platform != "win32" # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/base.txt +cryptography==42.0.5 + # via + # -c requirements/static/ci/py3.11/linux.txt + # -r requirements/base.txt distro==1.5.0 # via # -c requirements/static/ci/py3.11/linux.txt @@ -122,6 +130,10 @@ psutil==5.8.0 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/base.txt +pycparser==2.21 ; python_version >= "3.9" + # via + # -c requirements/static/ci/py3.11/linux.txt + # cffi pycryptodomex==3.19.1 # via # -c requirements/static/ci/py3.11/linux.txt diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index f590604d2be9..cba43034e457 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -88,6 +88,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.11/lint.txt b/requirements/static/ci/py3.11/lint.txt index dfc0dd7c8b8f..a3de9683b5da 100644 --- a/requirements/static/ci/py3.11/lint.txt +++ b/requirements/static/ci/py3.11/lint.txt @@ -135,6 +135,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # ansible-core # etcd3-py diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index 1c23b60c1818..2d4f745d732c 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -97,6 +97,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # ansible-core # etcd3-py diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 5805ca012b04..75a74f8c678d 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -80,6 +80,7 @@ contextvars==2.4 cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt + # -r requirements/base.txt # -r requirements/windows.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.12/cloud.txt b/requirements/static/ci/py3.12/cloud.txt index deb11a5621f0..31947e06f350 100644 --- a/requirements/static/ci/py3.12/cloud.txt +++ b/requirements/static/ci/py3.12/cloud.txt @@ -123,6 +123,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.12/darwin.txt b/requirements/static/ci/py3.12/darwin.txt index dee6d2f8a3bd..5bbc7163abbd 100644 --- a/requirements/static/ci/py3.12/darwin.txt +++ b/requirements/static/ci/py3.12/darwin.txt @@ -89,6 +89,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.12/darwin.txt + # -r requirements/base.txt # -r requirements/darwin.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.12/docs.txt b/requirements/static/ci/py3.12/docs.txt index c9695c7f880d..9aff7f0d7cb0 100644 --- a/requirements/static/ci/py3.12/docs.txt +++ b/requirements/static/ci/py3.12/docs.txt @@ -13,6 +13,10 @@ certifi==2024.7.4 ; python_version >= "3.10" # -c requirements/static/ci/py3.12/linux.txt # -r requirements/base.txt # requests +cffi==1.14.6 + # via + # -c requirements/static/ci/py3.12/linux.txt + # cryptography charset-normalizer==3.2.0 # via # -c requirements/static/ci/py3.12/linux.txt @@ -33,6 +37,10 @@ croniter==2.0.5 ; sys_platform != "win32" # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/base.txt +cryptography==42.0.5 + # via + # -c requirements/static/ci/py3.12/linux.txt + # -r requirements/base.txt distro==1.5.0 # via # -c requirements/static/ci/py3.12/linux.txt @@ -122,6 +130,10 @@ psutil==5.8.0 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/base.txt +pycparser==2.21 ; python_version >= "3.9" + # via + # -c requirements/static/ci/py3.12/linux.txt + # cffi pycryptodomex==3.19.1 # via # -c requirements/static/ci/py3.12/linux.txt diff --git a/requirements/static/ci/py3.12/freebsd.txt b/requirements/static/ci/py3.12/freebsd.txt index 31444237bdad..4251e4326fa3 100644 --- a/requirements/static/ci/py3.12/freebsd.txt +++ b/requirements/static/ci/py3.12/freebsd.txt @@ -88,6 +88,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.12/freebsd.txt + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.12/lint.txt b/requirements/static/ci/py3.12/lint.txt index 814acff00ac2..f4cd09272921 100644 --- a/requirements/static/ci/py3.12/lint.txt +++ b/requirements/static/ci/py3.12/lint.txt @@ -135,6 +135,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # ansible-core # etcd3-py diff --git a/requirements/static/ci/py3.12/linux.txt b/requirements/static/ci/py3.12/linux.txt index 5c9055f8c864..b09aa47954e5 100644 --- a/requirements/static/ci/py3.12/linux.txt +++ b/requirements/static/ci/py3.12/linux.txt @@ -97,6 +97,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.12/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # ansible-core # etcd3-py diff --git a/requirements/static/ci/py3.12/windows.txt b/requirements/static/ci/py3.12/windows.txt index c154d4f98785..37b8134af9fb 100644 --- a/requirements/static/ci/py3.12/windows.txt +++ b/requirements/static/ci/py3.12/windows.txt @@ -80,6 +80,7 @@ contextvars==2.4 cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.12/windows.txt + # -r requirements/base.txt # -r requirements/windows.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 0c6c573ae001..621e8b28f89c 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -141,6 +141,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.7/docs.txt b/requirements/static/ci/py3.7/docs.txt index 3792e50f5423..ec02a7ebb8f1 100644 --- a/requirements/static/ci/py3.7/docs.txt +++ b/requirements/static/ci/py3.7/docs.txt @@ -13,6 +13,10 @@ certifi==2023.07.22 ; python_version < "3.10" # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt # requests +cffi==1.14.6 + # via + # -c requirements/static/ci/py3.7/linux.txt + # cryptography charset-normalizer==3.2.0 # via # -c requirements/static/ci/py3.7/linux.txt @@ -33,6 +37,10 @@ croniter==2.0.5 ; sys_platform != "win32" # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt +cryptography==42.0.5 + # via + # -c requirements/static/ci/py3.7/linux.txt + # -r requirements/base.txt distro==1.5.0 # via # -c requirements/static/ci/py3.7/linux.txt @@ -126,6 +134,10 @@ psutil==5.8.0 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt +pycparser==2.17 + # via + # -c requirements/static/ci/py3.7/linux.txt + # cffi pycryptodomex==3.19.1 # via # -c requirements/static/ci/py3.7/linux.txt diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index a2bc4b2d666f..beae6670b18a 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -100,6 +100,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 8e5253ad65b2..31c051f48245 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -107,6 +107,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index e59c9ccc427c..f23a23a4cd18 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -89,6 +89,7 @@ contextvars==2.4 cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.7/windows.txt + # -r requirements/base.txt # -r requirements/windows.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index a72f33cb2c92..dd2333da0053 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -136,6 +136,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index d1a767aff5e3..b65e21eb177b 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -13,6 +13,10 @@ certifi==2023.07.22 ; python_version < "3.10" # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt # requests +cffi==1.14.6 + # via + # -c requirements/static/ci/py3.8/linux.txt + # cryptography charset-normalizer==3.2.0 # via # -c requirements/static/ci/py3.8/linux.txt @@ -33,6 +37,10 @@ croniter==2.0.5 ; sys_platform != "win32" # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt +cryptography==42.0.5 + # via + # -c requirements/static/ci/py3.8/linux.txt + # -r requirements/base.txt distro==1.5.0 # via # -c requirements/static/ci/py3.8/linux.txt @@ -122,6 +130,10 @@ psutil==5.8.0 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt +pycparser==2.17 + # via + # -c requirements/static/ci/py3.8/linux.txt + # cffi pycryptodomex==3.19.1 # via # -c requirements/static/ci/py3.8/linux.txt diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index cbacf12301e8..3e24a8c85e37 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -95,6 +95,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 90e1576cda24..00cb52ecb63d 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -144,6 +144,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 583da473b1d7..03405dc3e32d 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -102,6 +102,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 9d490f6f8994..68ecf63678dc 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -84,6 +84,7 @@ contextvars==2.4 cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt + # -r requirements/base.txt # -r requirements/windows.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 8cc07e4db5d7..22aa907e00dc 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -136,6 +136,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index d54f2e9281f8..e2c5c3c9c5b9 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -98,6 +98,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt + # -r requirements/base.txt # -r requirements/darwin.txt # etcd3-py # moto diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 70e1fdc800ac..002fe5eb50f2 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -13,6 +13,10 @@ certifi==2023.07.22 ; python_version < "3.10" # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt # requests +cffi==1.14.6 + # via + # -c requirements/static/ci/py3.9/linux.txt + # cryptography charset-normalizer==3.2.0 # via # -c requirements/static/ci/py3.9/linux.txt @@ -33,6 +37,10 @@ croniter==2.0.5 ; sys_platform != "win32" # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt +cryptography==42.0.5 + # via + # -c requirements/static/ci/py3.9/linux.txt + # -r requirements/base.txt distro==1.5.0 # via # -c requirements/static/ci/py3.9/linux.txt @@ -126,6 +134,10 @@ psutil==5.8.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt +pycparser==2.21 ; python_version >= "3.9" + # via + # -c requirements/static/ci/py3.9/linux.txt + # cffi pycryptodomex==3.19.1 # via # -c requirements/static/ci/py3.9/linux.txt diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 1e830cd7cf3d..f32029a5fead 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -95,6 +95,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 201d3042e40b..e3547ad531ec 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -140,6 +140,7 @@ cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 8075f781b7d9..0c11148993aa 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -100,6 +100,7 @@ croniter==2.0.5 ; sys_platform != "win32" cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # etcd3-py # moto diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 03d521b7b0d9..2493f0a06174 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -84,6 +84,7 @@ contextvars==2.4 cryptography==42.0.5 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt + # -r requirements/base.txt # -r requirements/windows.txt # etcd3-py # moto diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index b9dd0a54313b..e0936a9f2f7f 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -24,6 +24,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/darwin.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index 063a0c1a7adb..dbf0c0474c08 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index 96b8248f0ac5..83c05e28efe1 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index fd9408cfcf84..a58a2a5ad1ea 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -25,6 +25,7 @@ contextvars==2.4 # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/windows.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index d403e84ad32d..4b03d67f6f8a 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -24,6 +24,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/darwin.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.11/freebsd.txt b/requirements/static/pkg/py3.11/freebsd.txt index 651e7d4da8b9..082c9b744b37 100644 --- a/requirements/static/pkg/py3.11/freebsd.txt +++ b/requirements/static/pkg/py3.11/freebsd.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.11/linux.txt b/requirements/static/pkg/py3.11/linux.txt index 11f449c7875d..7a57d2b83035 100644 --- a/requirements/static/pkg/py3.11/linux.txt +++ b/requirements/static/pkg/py3.11/linux.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.11/windows.txt b/requirements/static/pkg/py3.11/windows.txt index 5543ea3ad166..177c36b4316c 100644 --- a/requirements/static/pkg/py3.11/windows.txt +++ b/requirements/static/pkg/py3.11/windows.txt @@ -25,6 +25,7 @@ contextvars==2.4 # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/windows.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.12/darwin.txt b/requirements/static/pkg/py3.12/darwin.txt index 41a493ed5886..09def6355ab1 100644 --- a/requirements/static/pkg/py3.12/darwin.txt +++ b/requirements/static/pkg/py3.12/darwin.txt @@ -24,6 +24,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/darwin.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.12/freebsd.txt b/requirements/static/pkg/py3.12/freebsd.txt index 2185eee52989..e762c8e7462f 100644 --- a/requirements/static/pkg/py3.12/freebsd.txt +++ b/requirements/static/pkg/py3.12/freebsd.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.12/linux.txt b/requirements/static/pkg/py3.12/linux.txt index 2b8334224003..07e0614a1b18 100644 --- a/requirements/static/pkg/py3.12/linux.txt +++ b/requirements/static/pkg/py3.12/linux.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.12/windows.txt b/requirements/static/pkg/py3.12/windows.txt index 0a73cd361bab..a8366dc4f616 100644 --- a/requirements/static/pkg/py3.12/windows.txt +++ b/requirements/static/pkg/py3.12/windows.txt @@ -25,6 +25,7 @@ contextvars==2.4 # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/windows.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.7/freebsd.txt b/requirements/static/pkg/py3.7/freebsd.txt index 85f182959c5f..4938943ad5a4 100644 --- a/requirements/static/pkg/py3.7/freebsd.txt +++ b/requirements/static/pkg/py3.7/freebsd.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.7/linux.txt b/requirements/static/pkg/py3.7/linux.txt index 813d798eed8b..50144205383f 100644 --- a/requirements/static/pkg/py3.7/linux.txt +++ b/requirements/static/pkg/py3.7/linux.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index 68afbd4c574a..f24915b016bb 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -25,6 +25,7 @@ contextvars==2.4 # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/windows.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index 7e4336de18c7..9ad2c58ff3a8 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index 0cd5288ade7b..af3647ae1f66 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 45a94eded657..fad3b96697fc 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -25,6 +25,7 @@ contextvars==2.4 # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/windows.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index db297a4d1a81..1888d68be225 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -24,6 +24,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/darwin.txt # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 5d40272ea6f4..927ac8ee86f3 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/freebsd.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index dde6cb7889a4..e5710bd387b3 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -22,6 +22,7 @@ croniter==2.0.5 ; sys_platform != "win32" # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/static/pkg/linux.in # pyopenssl distro==1.5.0 diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index f6beb8c616e1..e383681c8267 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -25,6 +25,7 @@ contextvars==2.4 # via -r requirements/base.txt cryptography==42.0.5 # via + # -r requirements/base.txt # -r requirements/windows.txt # pyopenssl distro==1.5.0 From 3b8c57e29d0099efc8351ce7b1f36dc955b3cafa Mon Sep 17 00:00:00 2001 From: Daniel Dehennin Date: Thu, 26 Sep 2024 21:49:48 +0200 Subject: [PATCH 07/23] Add test for saltclass nested classes expansion --- tests/pytests/unit/pillar/test_saltclass.py | 188 +++++++++++++++++++- 1 file changed, 183 insertions(+), 5 deletions(-) diff --git a/tests/pytests/unit/pillar/test_saltclass.py b/tests/pytests/unit/pillar/test_saltclass.py index b96db78bc49a..f4bb0bcbd577 100644 --- a/tests/pytests/unit/pillar/test_saltclass.py +++ b/tests/pytests/unit/pillar/test_saltclass.py @@ -23,6 +23,8 @@ def temp_saltclass_tree(tmp_path, minion_id): nodes_dir.mkdir(parents=True, exist_ok=True) default_dir = classes_dir / "default" default_dir.mkdir(parents=True, exist_ok=True) + users_dir = default_dir / "users" + users_dir.mkdir(parents=True, exist_ok=True) roles_dir = classes_dir / "roles" roles_dir.mkdir(parents=True, exist_ok=True) nginx_subdir = roles_dir / "nginx" @@ -35,6 +37,9 @@ def temp_saltclass_tree(tmp_path, minion_id): - default.motd - default.empty + states: + - default + pillars: default: network: @@ -50,6 +55,13 @@ def temp_saltclass_tree(tmp_path, minion_id): test_list: - a: ${default:network:ntp:srv1} - ${default:network:ntp:srv2} + + global_scalar: from default + test_dict: + a_scalar: from default + a_list: + - element1 + - element2 """ default_init.write_text(test_list) @@ -57,24 +69,91 @@ def temp_saltclass_tree(tmp_path, minion_id): nodes_text = """ environment: base + states: + - minion_node + classes: {% for class in ['default', 'roles.*', 'empty.*'] %} - {{ class }} {% endfor %} + + pillars: + global_scalar: from minion_node + test_dict: + a_scalar: from minion_node """ minion_node_file.write_text(nodes_text) - (default_dir / "users.yml").write_text("test: this is a test") + (users_dir / "init.yml").write_text( + """ + classes: + - default.users.foo + + states: + - users + + pillars: + default: + ntp: + srv1: 192.168.20.10 + + global_scalar: from users + test_dict: + a_scalar: from users + """ + ) + (users_dir / "foo.yml").write_text( + """ + states: + - users.foo + + global_scalar: from users.foo + users_foo_scalar: from users.foo + test_dict: + a_scalar: from users.foo + """ + ) (default_dir / "empty.yml").write_text("test: this is a test") - (default_dir / "motd.yml").write_text("test: this is a test") - (roles_dir / "app.yml").write_text("test: this is a test") - (nginx_subdir / "init.yml").write_text("test: this is a test") + (default_dir / "motd.yml").write_text( + """ + states: + - motd + + pillars: + global_scalar: from motd + """ + ) + (roles_dir / "app.yml").write_text( + """ + states: + - app + + pillars: + global_scalar: from app + """ + ) + (nginx_subdir / "init.yml").write_text( + """ + states: + - nginx + + pillars: + global_scalar: from nginx + nginx_scalar: from nginx + """ + ) return dirname -def test_succeeds(temp_saltclass_tree): +def test_classes_order(temp_saltclass_tree): + """ + Classes must be correctly ordered. + + See: https://github.com/saltstack/salt/issues/58969 + """ expected_ret = [ + "default.users.foo", "default.users", "default.motd", "default.empty", @@ -110,3 +189,102 @@ def test_list_expansion_succeeds(temp_saltclass_tree): pytest.fail(err) # Else give the parsed content result assert expected_ret == parsed_ret + + +def test_node_override_classes_scalars(temp_saltclass_tree): + """ + Scalars pillars defined in a node definition must override the + definition from classes. + """ + expected_ret = "from minion_node" + fake_args = {"path": str(temp_saltclass_tree)} + fake_pillar = {} + fake_minion_id = "fake_id" + try: + full_ret = saltclass.ext_pillar(fake_minion_id, fake_pillar, fake_args) + parsed_ret = full_ret["global_scalar"] + # Fail the test if we hit our NoneType error + except TypeError as err: + pytest.fail(err) + # Else give the parsed content result + assert expected_ret == parsed_ret + + +def test_node_override_classes_scalar_in_dict(temp_saltclass_tree): + """ + Scalars defined in `dict` pillars defined in a node definition must override the + same dict definition from classes. + + See: https://github.com/saltstack/salt/issues/63933 + """ + expected_ret = "from minion_node" + fake_args = {"path": str(temp_saltclass_tree)} + fake_pillar = {} + fake_minion_id = "fake_id" + try: + full_ret = saltclass.ext_pillar(fake_minion_id, fake_pillar, fake_args) + parsed_ret = full_ret["test_dict"]["a_scalar"] + # Fail the test if we hit our NoneType error + except TypeError as err: + pytest.fail(err) + # Else give the parsed content result + assert expected_ret == parsed_ret + + +def test_node_override_classes_list_in_dict(temp_saltclass_tree): + """ + `list` under a `dict` defined in a node definition must override the + same definition from classes. + + See: https://github.com/saltstack/salt/issues/63933 + """ + expected_ret = {"srv1": "192.168.10.10", "srv2": "192.168.10.20"} + fake_args = {"path": str(temp_saltclass_tree)} + fake_pillar = {} + fake_minion_id = "fake_id" + try: + full_ret = saltclass.ext_pillar(fake_minion_id, fake_pillar, fake_args) + parsed_ret = full_ret["default"]["network"]["ntp"] + # Fail the test if we hit our NoneType error + except TypeError as err: + pytest.fail(err) + # Else give the parsed content result + assert expected_ret == parsed_ret + + +def test_list_in_dict_no_duplication(temp_saltclass_tree): + """ + `list` under a `dict` in pillar must not be duplicated. + + See: + """ + expected_ret = ["element1", "element2"] + fake_args = {"path": str(temp_saltclass_tree)} + fake_pillar = {} + fake_minion_id = "fake_id" + try: + full_ret = saltclass.ext_pillar(fake_minion_id, fake_pillar, fake_args) + parsed_ret = full_ret["test_dict"]["a_list"] + # Fail the test if we hit our NoneType error + except TypeError as err: + pytest.fail(err) + # Else give the parsed content result + assert expected_ret == parsed_ret + + +def test_nested_classes_has_pillars(temp_saltclass_tree): + """ + pillars defined in nested classes are present + """ + expected_ret = "from nginx" + fake_args = {"path": str(temp_saltclass_tree)} + fake_pillar = {} + fake_minion_id = "fake_id" + try: + full_ret = saltclass.ext_pillar(fake_minion_id, fake_pillar, fake_args) + parsed_ret = full_ret["nginx_scalar"] + # Fail the test if we hit our NoneType error + except TypeError as err: + pytest.fail(err) + # Else give the parsed content result + assert expected_ret == parsed_ret From 9ef879aee4acf9c8dec8daa58beefa9ba8f7be76 Mon Sep 17 00:00:00 2001 From: Daniel Dehennin Date: Thu, 26 Sep 2024 21:50:19 +0200 Subject: [PATCH 08/23] fix(saltclass): don't lose nested classes and states in recursion Fixes: #58969 --- changelog/58969.fixed.md | 4 ++ salt/utils/saltclass.py | 118 +++++++++++++++++++-------------------- 2 files changed, 61 insertions(+), 61 deletions(-) create mode 100644 changelog/58969.fixed.md diff --git a/changelog/58969.fixed.md b/changelog/58969.fixed.md new file mode 100644 index 000000000000..366607bd97e7 --- /dev/null +++ b/changelog/58969.fixed.md @@ -0,0 +1,4 @@ +Issue 58969: Fixes an issue with `saltclass.expand_classes_in_order` +function where it was losing nested classes states during class +expansion. The logic now use `salt.utils.odict.OrderedDict` to keep +the inclusion ordering. diff --git a/salt/utils/saltclass.py b/salt/utils/saltclass.py index 7d6fec7c578d..1f6df19d1280 100644 --- a/salt/utils/saltclass.py +++ b/salt/utils/saltclass.py @@ -5,6 +5,7 @@ from jinja2 import Environment, FileSystemLoader +import salt.utils.odict import salt.utils.path import salt.utils.yaml @@ -277,9 +278,27 @@ def expand_classes_glob(classes, salt_data): return expanded_classes -def expand_classes_in_order( - minion_dict, salt_data, seen_classes, expanded_classes, classes_to_expand -): +def expand_classes_in_order(minion_dict, salt_data, seen_classes, classes_to_expand): + """ + Expand the list of `classes_to_expand` and return them in the order found + + The return order is `[C, B, A, M, B, L, MINION_ID]` when: + + - minion node include classes `A` and `L` + - `A` include class `B` + - `B` include class `C` + - `L` include class `M` and `B` + + :param dict minion_dict: definition of minion node + :param dict salt_data: configuration data + :param iterable(str) seen_classes: classes already processed + :param iterable(str) classes_to_expand: classes to recursivly expand + :return: Expanded classes in proper order + :rtype: salt.utils.odict.OrderedDict + """ + + expanded_classes = salt.utils.odict.OrderedDict() + # Get classes to expand from minion dictionary if not classes_to_expand and "classes" in minion_dict: classes_to_expand = minion_dict["classes"] @@ -290,71 +309,37 @@ def expand_classes_in_order( for klass in classes_to_expand: if klass not in seen_classes: seen_classes.append(klass) - expanded_classes[klass] = get_class(klass, salt_data) + klass_dict = salt.utils.odict.OrderedDict( + {klass: get_class(klass, salt_data)} + ) # Fix corner case where class is loaded but doesn't contain anything - if expanded_classes[klass] is None: - expanded_classes[klass] = {} + if klass_dict[klass] is None: + klass_dict[klass] = {} # Merge newly found pillars into existing ones - new_pillars = expanded_classes[klass].get("pillars", {}) + new_pillars = klass_dict[klass].get("pillars", {}) if new_pillars: dict_merge(salt_data["__pillar__"], new_pillars) - # Now replace class element in classes_to_expand by expansion - if expanded_classes[klass].get("classes"): - l_id = classes_to_expand.index(klass) - classes_to_expand[l_id:l_id] = expanded_classes[klass]["classes"] - expand_classes_in_order( - minion_dict, + if "classes" in klass_dict[klass]: + nested_classes = expand_classes_in_order( + {}, salt_data, seen_classes, - expanded_classes, - classes_to_expand, + klass_dict[klass].get("classes", {}), ) - else: - expand_classes_in_order( - minion_dict, - salt_data, - seen_classes, - expanded_classes, - classes_to_expand, - ) - - # We may have duplicates here and we want to remove them - tmp = [] - for t_element in classes_to_expand: - if t_element not in tmp: - tmp.append(t_element) - - classes_to_expand = tmp - - # Now that we've retrieved every class in order, - # let's return an ordered list of dicts - ord_expanded_classes = [] - ord_expanded_states = [] - for ord_klass in classes_to_expand: - ord_expanded_classes.append(expanded_classes[ord_klass]) - # And be smart and sort out states list - # Address the corner case where states is empty in a class definition - if ( - "states" in expanded_classes[ord_klass] - and expanded_classes[ord_klass]["states"] is None - ): - expanded_classes[ord_klass]["states"] = {} - if "states" in expanded_classes[ord_klass]: - ord_expanded_states.extend(expanded_classes[ord_klass]["states"]) + # Put current class after nested classes + klass_dict.update(nested_classes) + klass_dict.move_to_end(klass) - # Add our minion dict as final element but check if we have states to process - if "states" in minion_dict and minion_dict["states"] is None: - minion_dict["states"] = [] + expanded_classes.update(klass_dict) - if "states" in minion_dict: - ord_expanded_states.extend(minion_dict["states"]) + # Minion dict must be at the end + if minion_dict: + expanded_classes.update({salt_data["minion_id"]: minion_dict}) - ord_expanded_classes.append(minion_dict) - - return ord_expanded_classes, classes_to_expand, ord_expanded_states + return expanded_classes def expanded_dict_from_minion(minion_id, salt_data): @@ -382,17 +367,28 @@ def expanded_dict_from_minion(minion_id, salt_data): # Get 2 ordered lists: # expanded_classes: A list of all the dicts # classes_list: List of all the classes - expanded_classes, classes_list, states_list = expand_classes_in_order( - node_dict[minion_id], salt_data, [], {}, [] - ) + expanded_classes = expand_classes_in_order(node_dict[minion_id], salt_data, [], []) # Here merge the pillars together pillars_dict = {} - for exp_dict in expanded_classes: + states_list = [] + classes_list = list(expanded_classes.keys())[:-1] + classes_values = list(expanded_classes.values()) + for exp_dict in classes_values: if "pillars" in exp_dict: dict_merge(pillars_dict, exp_dict) - - return expanded_classes, pillars_dict, classes_list, states_list + if "states" in exp_dict: + states_list.extend(exp_dict["states"]) + + # Avoid duplicates, keep first + state_seen = set() + states_list = [ + state + for state in states_list + if not (state in state_seen or state_seen.add(state)) + ] + + return classes_values, pillars_dict, classes_list, states_list def get_pillars(minion_id, salt_data): From d1ca30c2ad66635c98c934be6ac9955cf3384a57 Mon Sep 17 00:00:00 2001 From: Daniel Dehennin Date: Thu, 26 Sep 2024 21:50:24 +0200 Subject: [PATCH 09/23] Fix incorrect override of minion node definition A pillars dict in a minion node definition was not overridding correctly the same dict in classes. * salt/utils/saltclass.py (expanded_dict_from_minion): do not pass a reference to minion dict or it will be overridden by classes during expansion. Fixes: #63933 --- changelog/63933.fixed.md | 4 ++++ salt/utils/saltclass.py | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 changelog/63933.fixed.md diff --git a/changelog/63933.fixed.md b/changelog/63933.fixed.md new file mode 100644 index 000000000000..794c170bd047 --- /dev/null +++ b/changelog/63933.fixed.md @@ -0,0 +1,4 @@ +Issue 63933: Fixes an issue with `saltclass.expanded_dict_from_minion` +function where it was passing a reference to minion `dict` which was +overridden by nested classes during class expansion. Copy the node +definition with `copy.deepcopy` instead of passing a reference. diff --git a/salt/utils/saltclass.py b/salt/utils/saltclass.py index 1f6df19d1280..c18d01af3d1e 100644 --- a/salt/utils/saltclass.py +++ b/salt/utils/saltclass.py @@ -1,3 +1,4 @@ +import copy import glob import logging import os @@ -362,7 +363,9 @@ def expanded_dict_from_minion(minion_id, salt_data): node_dict[minion_id] = {} # Merge newly found pillars into existing ones - dict_merge(salt_data["__pillar__"], node_dict[minion_id].get("pillars", {})) + dict_merge( + salt_data["__pillar__"], copy.deepcopy(node_dict[minion_id]).get("pillars", {}) + ) # Get 2 ordered lists: # expanded_classes: A list of all the dicts From 6e4f178ba27aab01a4c97cf847dc78bcba090873 Mon Sep 17 00:00:00 2001 From: Daniel Dehennin Date: Thu, 26 Sep 2024 21:50:33 +0200 Subject: [PATCH 10/23] Remove expand_classes_in_order from missing_docstrings --- tools/precommit/docstrings.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/precommit/docstrings.py b/tools/precommit/docstrings.py index dbf47e72b5aa..69abf323e3a3 100644 --- a/tools/precommit/docstrings.py +++ b/tools/precommit/docstrings.py @@ -345,7 +345,6 @@ "get_pillars", "expand_variables", "render_jinja", - "expand_classes_in_order", "dict_search_and_replace", "expanded_dict_from_minion", "find_value_to_expand", From 983cfe75e3bcce8fe2949f4aa1623bc428c14f81 Mon Sep 17 00:00:00 2001 From: Nick Porter Date: Thu, 21 Mar 2024 13:45:12 +0000 Subject: [PATCH 11/23] fixes #66252 correct use of egrep to parse semanage output --- changelog/66252.fixed.md | 1 + salt/modules/selinux.py | 2 +- tests/pytests/unit/modules/test_selinux.py | 32 ++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 changelog/66252.fixed.md diff --git a/changelog/66252.fixed.md b/changelog/66252.fixed.md new file mode 100644 index 000000000000..2227c8998448 --- /dev/null +++ b/changelog/66252.fixed.md @@ -0,0 +1 @@ +Applying `selinux.fcontext_policy_present` to a shorter path than an existing entry now works diff --git a/salt/modules/selinux.py b/salt/modules/selinux.py index da7d0bc3beee..44e0bd48b30a 100644 --- a/salt/modules/selinux.py +++ b/salt/modules/selinux.py @@ -616,7 +616,7 @@ def _fcontext_add_or_delete_policy( if "add" == action: # need to use --modify if context for name file exists, otherwise ValueError filespec = re.escape(name) - cmd = f"semanage fcontext -l | egrep '{filespec}'" + cmd = f"semanage fcontext -l | egrep '{filespec} '" current_entry_text = __salt__["cmd.shell"](cmd, ignore_retcode=True) if current_entry_text != "": action = "modify" diff --git a/tests/pytests/unit/modules/test_selinux.py b/tests/pytests/unit/modules/test_selinux.py index b67a1b525774..818a5f97a496 100644 --- a/tests/pytests/unit/modules/test_selinux.py +++ b/tests/pytests/unit/modules/test_selinux.py @@ -410,3 +410,35 @@ def test_selinux_add_policy_regex(name, sel_type): mock_cmd_run_all.assert_called_once_with( expected_cmd_run_all, ) + + +@pytest.mark.parametrize( + "name,sel_type", + ( + ("/usr/share/munin/plugins/mysql_queries", "services_munin_plugin_exec_t"), + ("/usr/share/munin/plugins/mysql_", "unconfined_munin_plugin_exec_t"), + ), +) +def test_selinux_add_policy_shorter_path(name, sel_type): + """ + Test adding policy with a shorter path than an existing entry + """ + mock_cmd_shell = MagicMock(return_value={"retcode": 0}) + mock_cmd_run_all = MagicMock(return_value={"retcode": 0}) + + with patch.dict(selinux.__salt__, {"cmd.shell": mock_cmd_shell}), patch.dict( + selinux.__salt__, {"cmd.run_all": mock_cmd_run_all} + ): + selinux.fcontext_add_policy(name, sel_type=sel_type) + filespec = re.escape(name) + expected_cmd_shell = f"semanage fcontext -l | egrep '{filespec}'" + mock_cmd_shell.assert_called_once_with( + expected_cmd_shell, + ignore_retcode=True, + ) + expected_cmd_run_all = ( + f"semanage fcontext --modify --type {sel_type} {filespec}" + ) + mock_cmd_run_all.assert_called_once_with( + expected_cmd_run_all, + ) From eee8215933321bafe8948b0e7aef9963fee8eb9c Mon Sep 17 00:00:00 2001 From: Shane Lee Date: Fri, 28 Jun 2024 13:16:44 -0600 Subject: [PATCH 12/23] Skip tests unless on Linux --- tests/pytests/unit/modules/test_selinux.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/pytests/unit/modules/test_selinux.py b/tests/pytests/unit/modules/test_selinux.py index 818a5f97a496..7470685cee0d 100644 --- a/tests/pytests/unit/modules/test_selinux.py +++ b/tests/pytests/unit/modules/test_selinux.py @@ -6,6 +6,8 @@ from salt.exceptions import SaltInvocationError from tests.support.mock import MagicMock, mock_open, patch +pytestmark = [pytest.mark.skip_unless_on_linux] + @pytest.fixture def configure_loader_modules(): From e4b4f571f54b13cb68f71f1a4930ed71f62d88ca Mon Sep 17 00:00:00 2001 From: David Murphy Date: Tue, 22 Oct 2024 11:36:29 -0600 Subject: [PATCH 13/23] Fix nightly builds and update psutil to 6.0.0 or greater --- requirements/base.txt | 2 +- requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/docs.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.11/cloud.txt | 2 +- requirements/static/ci/py3.11/darwin.txt | 2 +- requirements/static/ci/py3.11/docs.txt | 2 +- requirements/static/ci/py3.11/freebsd.txt | 2 +- requirements/static/ci/py3.11/lint.txt | 2 +- requirements/static/ci/py3.11/linux.txt | 2 +- requirements/static/ci/py3.11/windows.txt | 2 +- requirements/static/ci/py3.12/cloud.txt | 2 +- requirements/static/ci/py3.12/darwin.txt | 2 +- requirements/static/ci/py3.12/docs.txt | 2 +- requirements/static/ci/py3.12/freebsd.txt | 2 +- requirements/static/ci/py3.12/lint.txt | 2 +- requirements/static/ci/py3.12/linux.txt | 2 +- requirements/static/ci/py3.12/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/docs.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/freebsd.txt | 2 +- requirements/static/pkg/py3.10/linux.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.11/darwin.txt | 2 +- requirements/static/pkg/py3.11/freebsd.txt | 2 +- requirements/static/pkg/py3.11/linux.txt | 2 +- requirements/static/pkg/py3.11/windows.txt | 2 +- requirements/static/pkg/py3.12/darwin.txt | 2 +- requirements/static/pkg/py3.12/freebsd.txt | 2 +- requirements/static/pkg/py3.12/linux.txt | 2 +- requirements/static/pkg/py3.12/windows.txt | 2 +- requirements/static/pkg/py3.7/freebsd.txt | 2 +- requirements/static/pkg/py3.7/linux.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/freebsd.txt | 2 +- requirements/static/pkg/py3.8/linux.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/freebsd.txt | 2 +- requirements/static/pkg/py3.9/linux.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- salt/modules/selinux.py | 6 +++--- 63 files changed, 65 insertions(+), 65 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 1159d4e8899e..ec35c50cdeab 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -10,7 +10,7 @@ requests>=2.32.3 ; python_version >= '3.10' certifi==2023.07.22; python_version < '3.10' certifi>=2024.7.4; python_version >= '3.10' distro>=1.0.1 -psutil>=5.0.0 +psutil>=6.0.0 packaging>=21.3 looseversion croniter>=0.3.0,!=0.3.22; sys_platform != 'win32' diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 94bf45b11e4a..3a2c719a8d5b 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -395,7 +395,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index b399f922ea66..54d1f72b7a46 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -281,7 +281,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index 1180b647c22a..61bcc2a3ae4e 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -126,7 +126,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.10/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 095c8a9e199c..606d008f123a 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -274,7 +274,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 99fb12fb1511..de2938cbbe97 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -395,7 +395,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 5e78edc43535..af24f4152361 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -285,7 +285,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 286affb096ee..bf76db6faaae 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -254,7 +254,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.11/cloud.txt b/requirements/static/ci/py3.11/cloud.txt index 401fffc51b42..f5c041d3a794 100644 --- a/requirements/static/ci/py3.11/cloud.txt +++ b/requirements/static/ci/py3.11/cloud.txt @@ -367,7 +367,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index 01570c3faa3e..7978a04548ec 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -258,7 +258,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.11/docs.txt b/requirements/static/ci/py3.11/docs.txt index ad2a13f569a6..867425b46fa5 100644 --- a/requirements/static/ci/py3.11/docs.txt +++ b/requirements/static/ci/py3.11/docs.txt @@ -126,7 +126,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.11/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index cba43034e457..6551c7d93c01 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -255,7 +255,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.11/lint.txt b/requirements/static/ci/py3.11/lint.txt index a3de9683b5da..308e35d7efd0 100644 --- a/requirements/static/ci/py3.11/lint.txt +++ b/requirements/static/ci/py3.11/lint.txt @@ -370,7 +370,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index 2d4f745d732c..9f5b799915d3 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -266,7 +266,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 75a74f8c678d..404f5dc466c3 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -250,7 +250,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.12/cloud.txt b/requirements/static/ci/py3.12/cloud.txt index 31947e06f350..cd8e72df21c6 100644 --- a/requirements/static/ci/py3.12/cloud.txt +++ b/requirements/static/ci/py3.12/cloud.txt @@ -367,7 +367,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt diff --git a/requirements/static/ci/py3.12/darwin.txt b/requirements/static/ci/py3.12/darwin.txt index 5bbc7163abbd..99f9d586134c 100644 --- a/requirements/static/ci/py3.12/darwin.txt +++ b/requirements/static/ci/py3.12/darwin.txt @@ -258,7 +258,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.12/darwin.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.12/darwin.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.12/docs.txt b/requirements/static/ci/py3.12/docs.txt index 9aff7f0d7cb0..d24684e2003f 100644 --- a/requirements/static/ci/py3.12/docs.txt +++ b/requirements/static/ci/py3.12/docs.txt @@ -126,7 +126,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.12/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.12/freebsd.txt b/requirements/static/ci/py3.12/freebsd.txt index 4251e4326fa3..139b0f3983c0 100644 --- a/requirements/static/ci/py3.12/freebsd.txt +++ b/requirements/static/ci/py3.12/freebsd.txt @@ -255,7 +255,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.12/freebsd.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.12/freebsd.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.12/lint.txt b/requirements/static/ci/py3.12/lint.txt index f4cd09272921..e2716231a2a8 100644 --- a/requirements/static/ci/py3.12/lint.txt +++ b/requirements/static/ci/py3.12/lint.txt @@ -370,7 +370,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt diff --git a/requirements/static/ci/py3.12/linux.txt b/requirements/static/ci/py3.12/linux.txt index b09aa47954e5..2c554389a72b 100644 --- a/requirements/static/ci/py3.12/linux.txt +++ b/requirements/static/ci/py3.12/linux.txt @@ -266,7 +266,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.12/windows.txt b/requirements/static/ci/py3.12/windows.txt index 37b8134af9fb..dc107b928426 100644 --- a/requirements/static/ci/py3.12/windows.txt +++ b/requirements/static/ci/py3.12/windows.txt @@ -250,7 +250,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.12/windows.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.12/windows.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 621e8b28f89c..e87c4eaa91ec 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -440,7 +440,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt diff --git a/requirements/static/ci/py3.7/docs.txt b/requirements/static/ci/py3.7/docs.txt index ec02a7ebb8f1..42fa1b1696aa 100644 --- a/requirements/static/ci/py3.7/docs.txt +++ b/requirements/static/ci/py3.7/docs.txt @@ -130,7 +130,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.7/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index beae6670b18a..88e21e1e5823 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -313,7 +313,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 31c051f48245..a48164f63b4c 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -319,7 +319,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index f23a23a4cd18..f22afea47e26 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -270,7 +270,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.7/windows.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.7/windows.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index dd2333da0053..f806f65c613d 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -426,7 +426,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index b65e21eb177b..3134d405242e 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -126,7 +126,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.8/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 3e24a8c85e37..639b2ce154d6 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -299,7 +299,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 00cb52ecb63d..b6897f979216 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -419,7 +419,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 03405dc3e32d..2350dfa9052b 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -305,7 +305,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 68ecf63678dc..e44bbe656e45 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -256,7 +256,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 22aa907e00dc..75ac8316a38d 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -426,7 +426,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index e2c5c3c9c5b9..0dbaf30bdbd9 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -306,7 +306,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 002fe5eb50f2..5e674f694100 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -130,7 +130,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.9/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index f32029a5fead..e233eb1b3e07 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -299,7 +299,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index e3547ad531ec..b2bcfb09f426 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -415,7 +415,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 0c11148993aa..dc999138691e 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -303,7 +303,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 2493f0a06174..1b23482691d5 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -256,7 +256,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # cherrypy -psutil==5.8.0 +psutil==6.1.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/base.txt diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index e0936a9f2f7f..53967f0dcfd4 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -76,7 +76,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index dbf0c0474c08..b60e8945f50d 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index 83c05e28efe1..2cf0395a141a 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index a58a2a5ad1ea..7a6e6563dd93 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index 4b03d67f6f8a..0da77bec7e44 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -76,7 +76,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.11/freebsd.txt b/requirements/static/pkg/py3.11/freebsd.txt index 082c9b744b37..9dd3a89c320d 100644 --- a/requirements/static/pkg/py3.11/freebsd.txt +++ b/requirements/static/pkg/py3.11/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.11/linux.txt b/requirements/static/pkg/py3.11/linux.txt index 7a57d2b83035..f48061650e37 100644 --- a/requirements/static/pkg/py3.11/linux.txt +++ b/requirements/static/pkg/py3.11/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.11/windows.txt b/requirements/static/pkg/py3.11/windows.txt index 177c36b4316c..bb03cc097562 100644 --- a/requirements/static/pkg/py3.11/windows.txt +++ b/requirements/static/pkg/py3.11/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.12/darwin.txt b/requirements/static/pkg/py3.12/darwin.txt index 09def6355ab1..e60e9f5f8b0c 100644 --- a/requirements/static/pkg/py3.12/darwin.txt +++ b/requirements/static/pkg/py3.12/darwin.txt @@ -76,7 +76,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.12/freebsd.txt b/requirements/static/pkg/py3.12/freebsd.txt index e762c8e7462f..e62d9bfb9a53 100644 --- a/requirements/static/pkg/py3.12/freebsd.txt +++ b/requirements/static/pkg/py3.12/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.12/linux.txt b/requirements/static/pkg/py3.12/linux.txt index 07e0614a1b18..b088f3d1946d 100644 --- a/requirements/static/pkg/py3.12/linux.txt +++ b/requirements/static/pkg/py3.12/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.12/windows.txt b/requirements/static/pkg/py3.12/windows.txt index a8366dc4f616..17149a2d3051 100644 --- a/requirements/static/pkg/py3.12/windows.txt +++ b/requirements/static/pkg/py3.12/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.7/freebsd.txt b/requirements/static/pkg/py3.7/freebsd.txt index 4938943ad5a4..5d120c36327b 100644 --- a/requirements/static/pkg/py3.7/freebsd.txt +++ b/requirements/static/pkg/py3.7/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.17 # via cffi diff --git a/requirements/static/pkg/py3.7/linux.txt b/requirements/static/pkg/py3.7/linux.txt index 50144205383f..389e48b4a038 100644 --- a/requirements/static/pkg/py3.7/linux.txt +++ b/requirements/static/pkg/py3.7/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.17 # via cffi diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index f24915b016bb..931d116dada2 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index 9ad2c58ff3a8..8d12dd9b308e 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.17 # via cffi diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index af3647ae1f66..e932b40b90d6 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.17 # via cffi diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index fad3b96697fc..68e50b0975bc 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index 1888d68be225..54953b71c13a 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -76,7 +76,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 927ac8ee86f3..8e073a8c7f1a 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index e5710bd387b3..aea758e5bbe1 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index e383681c8267..924eccd59a22 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==5.8.0 +psutil==6.1.0 # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/salt/modules/selinux.py b/salt/modules/selinux.py index 44e0bd48b30a..f1c98f917027 100644 --- a/salt/modules/selinux.py +++ b/salt/modules/selinux.py @@ -490,7 +490,7 @@ def fcontext_get_policy( "[[:alpha:] ]+" if filetype is None else filetype_id_to_string(filetype) ) cmd = ( - "semanage fcontext -l | egrep " + "semanage fcontext -l | grep -E " + "'^{filespec}{spacer}{filetype}{spacer}{sel_user}:{sel_role}:{sel_type}:{sel_level}{ospacer}$'".format( **cmd_kwargs ) @@ -616,7 +616,7 @@ def _fcontext_add_or_delete_policy( if "add" == action: # need to use --modify if context for name file exists, otherwise ValueError filespec = re.escape(name) - cmd = f"semanage fcontext -l | egrep '{filespec} '" + cmd = f"semanage fcontext -l | grep -E '{filespec} '" current_entry_text = __salt__["cmd.shell"](cmd, ignore_retcode=True) if current_entry_text != "": action = "modify" @@ -762,7 +762,7 @@ def port_get_policy(name, sel_type=None, protocol=None, port=None): "port": port, } cmd = ( - "semanage port -l | egrep " + "semanage port -l | grep -E " + "'^{sel_type}{spacer}{protocol}{spacer}((.*)*)[ ]{port}($|,)'".format( **cmd_kwargs ) From a8a73c40f52aa9dbed0f259ce35562348d8772e4 Mon Sep 17 00:00:00 2001 From: David Murphy Date: Tue, 22 Oct 2024 17:53:23 -0600 Subject: [PATCH 14/23] Revert psutil dependency back to greater than 5.0.0 --- requirements/base.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/base.txt b/requirements/base.txt index ec35c50cdeab..1159d4e8899e 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -10,7 +10,7 @@ requests>=2.32.3 ; python_version >= '3.10' certifi==2023.07.22; python_version < '3.10' certifi>=2024.7.4; python_version >= '3.10' distro>=1.0.1 -psutil>=6.0.0 +psutil>=5.0.0 packaging>=21.3 looseversion croniter>=0.3.0,!=0.3.22; sys_platform != 'win32' From bbd061b47b98e0fe5fa71ae37e1a917580fad2a0 Mon Sep 17 00:00:00 2001 From: David Murphy Date: Wed, 23 Oct 2024 09:31:31 -0600 Subject: [PATCH 15/23] Forcing rebuild --- requirements/base.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements/base.txt b/requirements/base.txt index 1159d4e8899e..297a09c552f7 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -17,3 +17,5 @@ croniter>=0.3.0,!=0.3.22; sys_platform != 'win32' # We need contextvars for salt-ssh contextvars cryptography>=42.0.0 + +# force rebuild From c61822fbd9f1316b9d0c44ebd2d93f262179eb38 Mon Sep 17 00:00:00 2001 From: David Murphy Date: Wed, 23 Oct 2024 13:12:15 -0600 Subject: [PATCH 16/23] Updates due to pytest-shell-utilities and psutil version updates --- requirements/base.txt | 5 ++--- requirements/pytest.txt | 2 ++ requirements/static/ci/py3.10/cloud.txt | 6 +++--- requirements/static/ci/py3.10/darwin.txt | 12 ++++++------ requirements/static/ci/py3.10/docs.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 12 ++++++------ requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 12 ++++++------ requirements/static/ci/py3.10/windows.txt | 12 ++++++------ requirements/static/ci/py3.11/cloud.txt | 6 +++--- requirements/static/ci/py3.11/darwin.txt | 12 ++++++------ requirements/static/ci/py3.11/docs.txt | 2 +- requirements/static/ci/py3.11/freebsd.txt | 12 ++++++------ requirements/static/ci/py3.11/lint.txt | 2 +- requirements/static/ci/py3.11/linux.txt | 12 ++++++------ requirements/static/ci/py3.11/windows.txt | 12 ++++++------ requirements/static/ci/py3.12/cloud.txt | 6 +++--- requirements/static/ci/py3.12/darwin.txt | 12 ++++++------ requirements/static/ci/py3.12/docs.txt | 2 +- requirements/static/ci/py3.12/freebsd.txt | 12 ++++++------ requirements/static/ci/py3.12/lint.txt | 2 +- requirements/static/ci/py3.12/linux.txt | 12 ++++++------ requirements/static/ci/py3.12/windows.txt | 12 ++++++------ requirements/static/ci/py3.7/cloud.txt | 5 +++-- requirements/static/ci/py3.7/docs.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 8 +++++--- requirements/static/ci/py3.7/linux.txt | 8 +++++--- requirements/static/ci/py3.7/windows.txt | 8 +++++--- requirements/static/ci/py3.8/cloud.txt | 5 +++-- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 8 +++++--- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 8 +++++--- requirements/static/ci/py3.8/windows.txt | 8 +++++--- requirements/static/ci/py3.9/cloud.txt | 5 +++-- requirements/static/ci/py3.9/darwin.txt | 8 +++++--- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 8 +++++--- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 8 +++++--- requirements/static/ci/py3.9/windows.txt | 8 +++++--- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/freebsd.txt | 2 +- requirements/static/pkg/py3.10/linux.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.11/darwin.txt | 2 +- requirements/static/pkg/py3.11/freebsd.txt | 2 +- requirements/static/pkg/py3.11/linux.txt | 2 +- requirements/static/pkg/py3.11/windows.txt | 2 +- requirements/static/pkg/py3.12/darwin.txt | 2 +- requirements/static/pkg/py3.12/freebsd.txt | 2 +- requirements/static/pkg/py3.12/linux.txt | 2 +- requirements/static/pkg/py3.12/windows.txt | 2 +- requirements/static/pkg/py3.7/freebsd.txt | 2 +- requirements/static/pkg/py3.7/linux.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/freebsd.txt | 2 +- requirements/static/pkg/py3.8/linux.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/freebsd.txt | 2 +- requirements/static/pkg/py3.9/linux.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- salt/modules/selinux.py | 6 +++--- 64 files changed, 180 insertions(+), 156 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 297a09c552f7..91e74a2ba8dd 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -10,12 +10,11 @@ requests>=2.32.3 ; python_version >= '3.10' certifi==2023.07.22; python_version < '3.10' certifi>=2024.7.4; python_version >= '3.10' distro>=1.0.1 -psutil>=5.0.0 +psutil<6.0.0; python_version <= '3.9' +psutil>=5.0.0; python_version >= '3.10' packaging>=21.3 looseversion croniter>=0.3.0,!=0.3.22; sys_platform != 'win32' # We need contextvars for salt-ssh contextvars cryptography>=42.0.0 - -# force rebuild diff --git a/requirements/pytest.txt b/requirements/pytest.txt index 82dd91389585..a8a26ea38920 100644 --- a/requirements/pytest.txt +++ b/requirements/pytest.txt @@ -15,3 +15,5 @@ pyfakefs trustme pytest-skip-markers >= 1.5.2 ; python_version >= '3.8' pytest-skip-markers <= 1.5.1 ; python_version < '3.8' +pytest-shell-utilities <= 1.9.0; python_version <= '3.9' +pytest-shell-utilities >= 1.9.7; python_version >= '3.10' diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 3a2c719a8d5b..d40e35e3fea5 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -395,7 +395,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt @@ -479,9 +479,10 @@ pytest-salt-factories==1.0.1 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" # via # -c requirements/static/ci/py3.10/linux.txt + # -r requirements/pytest.txt # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via @@ -689,7 +690,6 @@ trustme==1.1.0 typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.10/linux.txt - # pytest-shell-utilities # pytest-system-statistics urllib3==1.26.18 # via diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 54d1f72b7a46..4a24aabb2a4f 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -281,7 +281,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/base.txt @@ -336,8 +336,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -475,9 +477,7 @@ transitions==0.8.9 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.2.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index 61bcc2a3ae4e..26970270a34d 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -126,7 +126,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.10/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 606d008f123a..1a8587f26551 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -274,7 +274,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/base.txt @@ -329,8 +329,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -467,9 +469,7 @@ transitions==0.8.9 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.8.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index de2938cbbe97..041231763c9f 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -395,7 +395,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index af24f4152361..8a573d009a44 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -285,7 +285,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/base.txt @@ -346,8 +346,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -514,9 +516,7 @@ trustme==1.1.0 twilio==7.9.2 # via -r requirements/static/ci/linux.in typing-extensions==4.8.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics tzlocal==3.0 # via apscheduler urllib3==1.26.18 diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index bf76db6faaae..3c271b0cd413 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -254,7 +254,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/base.txt @@ -307,8 +307,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -450,9 +452,7 @@ tomli==2.0.1 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.4.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt diff --git a/requirements/static/ci/py3.11/cloud.txt b/requirements/static/ci/py3.11/cloud.txt index f5c041d3a794..460da41efc80 100644 --- a/requirements/static/ci/py3.11/cloud.txt +++ b/requirements/static/ci/py3.11/cloud.txt @@ -367,7 +367,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt @@ -443,9 +443,10 @@ pytest-salt-factories==1.0.1 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" # via # -c requirements/static/ci/py3.11/linux.txt + # -r requirements/pytest.txt # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via @@ -636,7 +637,6 @@ trustme==1.1.0 typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.11/linux.txt - # pytest-shell-utilities # pytest-system-statistics urllib3==1.26.18 # via diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index 7978a04548ec..376053f23487 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -258,7 +258,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # -r requirements/base.txt @@ -307,8 +307,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -436,9 +438,7 @@ toml==0.10.2 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.2.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt diff --git a/requirements/static/ci/py3.11/docs.txt b/requirements/static/ci/py3.11/docs.txt index 867425b46fa5..4d78150e4363 100644 --- a/requirements/static/ci/py3.11/docs.txt +++ b/requirements/static/ci/py3.11/docs.txt @@ -126,7 +126,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.11/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index 6551c7d93c01..f2822d4a2adc 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -255,7 +255,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt # -r requirements/base.txt @@ -306,8 +306,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -433,9 +435,7 @@ toml==0.10.2 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.8.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt diff --git a/requirements/static/ci/py3.11/lint.txt b/requirements/static/ci/py3.11/lint.txt index 308e35d7efd0..525ba97b0807 100644 --- a/requirements/static/ci/py3.11/lint.txt +++ b/requirements/static/ci/py3.11/lint.txt @@ -370,7 +370,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index 9f5b799915d3..9887856537ce 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -266,7 +266,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # -r requirements/base.txt @@ -323,8 +323,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -480,9 +482,7 @@ trustme==1.1.0 twilio==7.9.2 # via -r requirements/static/ci/linux.in typing-extensions==4.8.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics tzlocal==3.0 # via apscheduler urllib3==1.26.18 diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 404f5dc466c3..9fee82fa466d 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -250,7 +250,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/base.txt @@ -303,8 +303,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -444,9 +446,7 @@ toml==0.10.2 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.4.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt diff --git a/requirements/static/ci/py3.12/cloud.txt b/requirements/static/ci/py3.12/cloud.txt index cd8e72df21c6..efbaf7aca330 100644 --- a/requirements/static/ci/py3.12/cloud.txt +++ b/requirements/static/ci/py3.12/cloud.txt @@ -367,7 +367,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt @@ -443,9 +443,10 @@ pytest-salt-factories==1.0.1 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" # via # -c requirements/static/ci/py3.12/linux.txt + # -r requirements/pytest.txt # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via @@ -636,7 +637,6 @@ trustme==1.1.0 typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.12/linux.txt - # pytest-shell-utilities # pytest-system-statistics urllib3==1.26.18 # via diff --git a/requirements/static/ci/py3.12/darwin.txt b/requirements/static/ci/py3.12/darwin.txt index 99f9d586134c..b3f191566709 100644 --- a/requirements/static/ci/py3.12/darwin.txt +++ b/requirements/static/ci/py3.12/darwin.txt @@ -258,7 +258,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.12/darwin.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.12/darwin.txt # -r requirements/base.txt @@ -307,8 +307,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -436,9 +438,7 @@ toml==0.10.2 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.2.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.12/darwin.txt diff --git a/requirements/static/ci/py3.12/docs.txt b/requirements/static/ci/py3.12/docs.txt index d24684e2003f..3c536f15de86 100644 --- a/requirements/static/ci/py3.12/docs.txt +++ b/requirements/static/ci/py3.12/docs.txt @@ -126,7 +126,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.12/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.12/freebsd.txt b/requirements/static/ci/py3.12/freebsd.txt index 139b0f3983c0..74142860bb03 100644 --- a/requirements/static/ci/py3.12/freebsd.txt +++ b/requirements/static/ci/py3.12/freebsd.txt @@ -255,7 +255,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.12/freebsd.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.12/freebsd.txt # -r requirements/base.txt @@ -306,8 +306,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -433,9 +435,7 @@ toml==0.10.2 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.8.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.12/freebsd.txt diff --git a/requirements/static/ci/py3.12/lint.txt b/requirements/static/ci/py3.12/lint.txt index e2716231a2a8..b796d01ed4c8 100644 --- a/requirements/static/ci/py3.12/lint.txt +++ b/requirements/static/ci/py3.12/lint.txt @@ -370,7 +370,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt diff --git a/requirements/static/ci/py3.12/linux.txt b/requirements/static/ci/py3.12/linux.txt index 2c554389a72b..c21d0cac0ddf 100644 --- a/requirements/static/ci/py3.12/linux.txt +++ b/requirements/static/ci/py3.12/linux.txt @@ -266,7 +266,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.12/linux.txt # -r requirements/base.txt @@ -323,8 +323,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -480,9 +482,7 @@ trustme==1.1.0 twilio==7.9.2 # via -r requirements/static/ci/linux.in typing-extensions==4.8.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics tzlocal==3.0 # via apscheduler urllib3==1.26.18 diff --git a/requirements/static/ci/py3.12/windows.txt b/requirements/static/ci/py3.12/windows.txt index dc107b928426..5affc00a7f0a 100644 --- a/requirements/static/ci/py3.12/windows.txt +++ b/requirements/static/ci/py3.12/windows.txt @@ -250,7 +250,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.12/windows.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via # -c requirements/static/ci/../pkg/py3.12/windows.txt # -r requirements/base.txt @@ -303,8 +303,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.9.7 ; python_version >= "3.10" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt @@ -444,9 +446,7 @@ toml==0.10.2 trustme==1.1.0 # via -r requirements/pytest.txt typing-extensions==4.4.0 - # via - # pytest-shell-utilities - # pytest-system-statistics + # via pytest-system-statistics urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.12/windows.txt diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index e87c4eaa91ec..9280c610e40d 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -440,7 +440,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt @@ -527,9 +527,10 @@ pytest-salt-factories==1.0.1 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/py3.7/linux.txt + # -r requirements/pytest.txt # pytest-salt-factories pytest-skip-markers==1.5.0 ; python_version < "3.8" # via diff --git a/requirements/static/ci/py3.7/docs.txt b/requirements/static/ci/py3.7/docs.txt index 42fa1b1696aa..b0ac8d78ed8b 100644 --- a/requirements/static/ci/py3.7/docs.txt +++ b/requirements/static/ci/py3.7/docs.txt @@ -130,7 +130,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.7/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 88e21e1e5823..394bc0b38b3f 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -313,7 +313,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/base.txt @@ -370,8 +370,10 @@ pytest-httpserver==1.0.6 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.0 ; python_version < "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index a48164f63b4c..53e6a0598adb 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -319,7 +319,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -r requirements/base.txt @@ -382,8 +382,10 @@ pytest-httpserver==1.0.6 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.0 ; python_version < "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index f22afea47e26..3be85a5d491b 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -270,7 +270,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.7/windows.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.7/windows.txt # -r requirements/base.txt @@ -322,8 +322,10 @@ pytest-httpserver==1.0.6 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.0 ; python_version < "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index f806f65c613d..9f18c56bb166 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -426,7 +426,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt @@ -513,9 +513,10 @@ pytest-salt-factories==1.0.1 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/py3.8/linux.txt + # -r requirements/pytest.txt # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index 3134d405242e..7f440e0dc0f3 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -126,7 +126,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.8/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 639b2ce154d6..e42ad37bd0f2 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -299,7 +299,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/base.txt @@ -356,8 +356,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index b6897f979216..7b6ffbbfde61 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -419,7 +419,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 2350dfa9052b..6a9dcd361f71 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -305,7 +305,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/base.txt @@ -368,8 +368,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index e44bbe656e45..f38be0bcc274 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -256,7 +256,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/base.txt @@ -308,8 +308,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 75ac8316a38d..b24fdf78b10a 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -426,7 +426,7 @@ portend==2.4 # cherrypy profitbricks==4.1.3 # via -r requirements/static/ci/cloud.in -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt @@ -515,9 +515,10 @@ pytest-salt-factories==1.0.1 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/py3.9/linux.txt + # -r requirements/pytest.txt # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 0dbaf30bdbd9..66bddbb9630a 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -306,7 +306,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/base.txt @@ -365,8 +365,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 5e674f694100..9b9f3136276b 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -130,7 +130,7 @@ portend==2.4 # via # -c requirements/static/ci/py3.9/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index e233eb1b3e07..c7a81642b26e 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -299,7 +299,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/base.txt @@ -358,8 +358,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index b2bcfb09f426..d23f65943dbe 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -415,7 +415,7 @@ portend==2.4 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index dc999138691e..fd5f770ef998 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -303,7 +303,7 @@ portend==2.4 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/base.txt @@ -368,8 +368,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 1b23482691d5..5c9bd25c8efa 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -256,7 +256,7 @@ portend==2.6 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/base.txt @@ -309,8 +309,10 @@ pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.1 # via -r requirements/pytest.txt -pytest-shell-utilities==1.8.0 - # via pytest-salt-factories +pytest-shell-utilities==1.8.0 ; python_version <= "3.9" + # via + # -r requirements/pytest.txt + # pytest-salt-factories pytest-skip-markers==1.5.2 ; python_version >= "3.8" # via # -r requirements/pytest.txt diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index 53967f0dcfd4..ccb85c35ee22 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -76,7 +76,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index b60e8945f50d..332e944ecf55 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index 2cf0395a141a..4708e14af5d5 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 7a6e6563dd93..ee99032daecc 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index 0da77bec7e44..81f749256068 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -76,7 +76,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.11/freebsd.txt b/requirements/static/pkg/py3.11/freebsd.txt index 9dd3a89c320d..ddfb15ab43b5 100644 --- a/requirements/static/pkg/py3.11/freebsd.txt +++ b/requirements/static/pkg/py3.11/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.11/linux.txt b/requirements/static/pkg/py3.11/linux.txt index f48061650e37..c77f1b8293f3 100644 --- a/requirements/static/pkg/py3.11/linux.txt +++ b/requirements/static/pkg/py3.11/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.11/windows.txt b/requirements/static/pkg/py3.11/windows.txt index bb03cc097562..95f415ad3623 100644 --- a/requirements/static/pkg/py3.11/windows.txt +++ b/requirements/static/pkg/py3.11/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.12/darwin.txt b/requirements/static/pkg/py3.12/darwin.txt index e60e9f5f8b0c..27c282a67988 100644 --- a/requirements/static/pkg/py3.12/darwin.txt +++ b/requirements/static/pkg/py3.12/darwin.txt @@ -76,7 +76,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.12/freebsd.txt b/requirements/static/pkg/py3.12/freebsd.txt index e62d9bfb9a53..2a361dec5a4d 100644 --- a/requirements/static/pkg/py3.12/freebsd.txt +++ b/requirements/static/pkg/py3.12/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.12/linux.txt b/requirements/static/pkg/py3.12/linux.txt index b088f3d1946d..af50baf542ef 100644 --- a/requirements/static/pkg/py3.12/linux.txt +++ b/requirements/static/pkg/py3.12/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.12/windows.txt b/requirements/static/pkg/py3.12/windows.txt index 17149a2d3051..dc7316cff1d9 100644 --- a/requirements/static/pkg/py3.12/windows.txt +++ b/requirements/static/pkg/py3.12/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version >= "3.10" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.7/freebsd.txt b/requirements/static/pkg/py3.7/freebsd.txt index 5d120c36327b..5140b00211e0 100644 --- a/requirements/static/pkg/py3.7/freebsd.txt +++ b/requirements/static/pkg/py3.7/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pycparser==2.17 # via cffi diff --git a/requirements/static/pkg/py3.7/linux.txt b/requirements/static/pkg/py3.7/linux.txt index 389e48b4a038..41e6230e6603 100644 --- a/requirements/static/pkg/py3.7/linux.txt +++ b/requirements/static/pkg/py3.7/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pycparser==2.17 # via cffi diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index 931d116dada2..09b5efed8d4a 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index 8d12dd9b308e..bdc6fa9ee05c 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pycparser==2.17 # via cffi diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index e932b40b90d6..81f0e4c6d5c2 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pycparser==2.17 # via cffi diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 68e50b0975bc..6a848bf55304 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index 54953b71c13a..3f0e827f089c 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -76,7 +76,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 8e073a8c7f1a..78dbbf27f285 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -68,7 +68,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index aea758e5bbe1..3f0c1b8b1389 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -66,7 +66,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.4 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pycparser==2.21 ; python_version >= "3.9" # via diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index 924eccd59a22..afa060a8fef0 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -77,7 +77,7 @@ packaging==22.0 # via -r requirements/base.txt portend==2.6 # via cherrypy -psutil==6.1.0 +psutil==5.8.0 ; python_version <= "3.9" # via -r requirements/base.txt pyasn1==0.4.8 # via -r requirements/windows.txt diff --git a/salt/modules/selinux.py b/salt/modules/selinux.py index f1c98f917027..44e0bd48b30a 100644 --- a/salt/modules/selinux.py +++ b/salt/modules/selinux.py @@ -490,7 +490,7 @@ def fcontext_get_policy( "[[:alpha:] ]+" if filetype is None else filetype_id_to_string(filetype) ) cmd = ( - "semanage fcontext -l | grep -E " + "semanage fcontext -l | egrep " + "'^{filespec}{spacer}{filetype}{spacer}{sel_user}:{sel_role}:{sel_type}:{sel_level}{ospacer}$'".format( **cmd_kwargs ) @@ -616,7 +616,7 @@ def _fcontext_add_or_delete_policy( if "add" == action: # need to use --modify if context for name file exists, otherwise ValueError filespec = re.escape(name) - cmd = f"semanage fcontext -l | grep -E '{filespec} '" + cmd = f"semanage fcontext -l | egrep '{filespec} '" current_entry_text = __salt__["cmd.shell"](cmd, ignore_retcode=True) if current_entry_text != "": action = "modify" @@ -762,7 +762,7 @@ def port_get_policy(name, sel_type=None, protocol=None, port=None): "port": port, } cmd = ( - "semanage port -l | grep -E " + "semanage port -l | egrep " + "'^{sel_type}{spacer}{protocol}{spacer}((.*)*)[ ]{port}($|,)'".format( **cmd_kwargs ) From d19258590bc22d3bdc56aec8c98c908569b99c46 Mon Sep 17 00:00:00 2001 From: David Murphy Date: Wed, 23 Oct 2024 15:00:16 -0600 Subject: [PATCH 17/23] Adjusted selinux and tests for egrep to grep -E --- salt/modules/selinux.py | 6 +++--- tests/pytests/unit/modules/test_selinux.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/salt/modules/selinux.py b/salt/modules/selinux.py index 44e0bd48b30a..0c4a0d108f21 100644 --- a/salt/modules/selinux.py +++ b/salt/modules/selinux.py @@ -490,7 +490,7 @@ def fcontext_get_policy( "[[:alpha:] ]+" if filetype is None else filetype_id_to_string(filetype) ) cmd = ( - "semanage fcontext -l | egrep " + "semanage fcontext -l | grep -E " + "'^{filespec}{spacer}{filetype}{spacer}{sel_user}:{sel_role}:{sel_type}:{sel_level}{ospacer}$'".format( **cmd_kwargs ) @@ -616,7 +616,7 @@ def _fcontext_add_or_delete_policy( if "add" == action: # need to use --modify if context for name file exists, otherwise ValueError filespec = re.escape(name) - cmd = f"semanage fcontext -l | egrep '{filespec} '" + cmd = f"semanage fcontext -l | grep -E '{filespec}'" current_entry_text = __salt__["cmd.shell"](cmd, ignore_retcode=True) if current_entry_text != "": action = "modify" @@ -762,7 +762,7 @@ def port_get_policy(name, sel_type=None, protocol=None, port=None): "port": port, } cmd = ( - "semanage port -l | egrep " + "semanage port -l | grep -E " + "'^{sel_type}{spacer}{protocol}{spacer}((.*)*)[ ]{port}($|,)'".format( **cmd_kwargs ) diff --git a/tests/pytests/unit/modules/test_selinux.py b/tests/pytests/unit/modules/test_selinux.py index 7470685cee0d..5152b4910ab1 100644 --- a/tests/pytests/unit/modules/test_selinux.py +++ b/tests/pytests/unit/modules/test_selinux.py @@ -401,7 +401,7 @@ def test_selinux_add_policy_regex(name, sel_type): ): selinux.fcontext_add_policy(name, sel_type=sel_type) filespec = re.escape(name) - expected_cmd_shell = f"semanage fcontext -l | egrep '{filespec}'" + expected_cmd_shell = f"semanage fcontext -l | grep -E '{filespec}'" mock_cmd_shell.assert_called_once_with( expected_cmd_shell, ignore_retcode=True, @@ -433,7 +433,7 @@ def test_selinux_add_policy_shorter_path(name, sel_type): ): selinux.fcontext_add_policy(name, sel_type=sel_type) filespec = re.escape(name) - expected_cmd_shell = f"semanage fcontext -l | egrep '{filespec}'" + expected_cmd_shell = f"semanage fcontext -l | grep -E '{filespec}'" mock_cmd_shell.assert_called_once_with( expected_cmd_shell, ignore_retcode=True, From ed894240593d7b7a355389149065ab5c115a26a7 Mon Sep 17 00:00:00 2001 From: David Murphy Date: Thu, 24 Oct 2024 09:33:34 -0600 Subject: [PATCH 18/23] Updated selinux commands and tests after reviewer comments, need the extra space --- salt/modules/selinux.py | 2 +- tests/pytests/unit/modules/test_selinux.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/salt/modules/selinux.py b/salt/modules/selinux.py index 0c4a0d108f21..f1c98f917027 100644 --- a/salt/modules/selinux.py +++ b/salt/modules/selinux.py @@ -616,7 +616,7 @@ def _fcontext_add_or_delete_policy( if "add" == action: # need to use --modify if context for name file exists, otherwise ValueError filespec = re.escape(name) - cmd = f"semanage fcontext -l | grep -E '{filespec}'" + cmd = f"semanage fcontext -l | grep -E '{filespec} '" current_entry_text = __salt__["cmd.shell"](cmd, ignore_retcode=True) if current_entry_text != "": action = "modify" diff --git a/tests/pytests/unit/modules/test_selinux.py b/tests/pytests/unit/modules/test_selinux.py index 5152b4910ab1..0ceba06a1341 100644 --- a/tests/pytests/unit/modules/test_selinux.py +++ b/tests/pytests/unit/modules/test_selinux.py @@ -401,7 +401,7 @@ def test_selinux_add_policy_regex(name, sel_type): ): selinux.fcontext_add_policy(name, sel_type=sel_type) filespec = re.escape(name) - expected_cmd_shell = f"semanage fcontext -l | grep -E '{filespec}'" + expected_cmd_shell = f"semanage fcontext -l | grep -E '{filespec} '" mock_cmd_shell.assert_called_once_with( expected_cmd_shell, ignore_retcode=True, @@ -433,7 +433,7 @@ def test_selinux_add_policy_shorter_path(name, sel_type): ): selinux.fcontext_add_policy(name, sel_type=sel_type) filespec = re.escape(name) - expected_cmd_shell = f"semanage fcontext -l | grep -E '{filespec}'" + expected_cmd_shell = f"semanage fcontext -l | grep -E '{filespec} '" mock_cmd_shell.assert_called_once_with( expected_cmd_shell, ignore_retcode=True, From 931e4632ce27a2a7a6fd44e706c2b903d13d767f Mon Sep 17 00:00:00 2001 From: jeanluc Date: Thu, 24 Oct 2024 14:16:22 +0200 Subject: [PATCH 19/23] Add test for issue #66996 --- .../functional/modules/state/test_state.py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/pytests/functional/modules/state/test_state.py b/tests/pytests/functional/modules/state/test_state.py index e5e104ffcca0..c9d188d3b364 100644 --- a/tests/pytests/functional/modules/state/test_state.py +++ b/tests/pytests/functional/modules/state/test_state.py @@ -3,6 +3,7 @@ import textwrap import threading import time +from textwrap import dedent import pytest @@ -1081,3 +1082,47 @@ def test_state_sls_mock_ret(state_tree): ret["cmd_|-echo1_|-echo 'This is a test!'_|-run"]["comment"] == "Not called, mocked" ) + + +@pytest.fixture +def _state_requires_env(loaders, state_tree): + mod_contents = dedent( + r""" + def test_it(name): + return { + "name": name, + "result": __env__ == "base", + "comment": "", + "changes": {}, + } + """ + ) + sls = "test_spawning" + sls_contents = dedent( + """ + This should not fail on spawning platforms: + requires_env.test_it: + - name: foo + - parallel: true + """ + ) + with pytest.helpers.temp_file( + f"{sls}.sls", sls_contents, state_tree + ), pytest.helpers.temp_file("_states/requires_env.py", mod_contents, state_tree): + res = loaders.modules.saltutil.sync_states() + assert "states.requires_env" in res + yield sls + + +def test_state_apply_parallel_spawning_with_global_dunders(state, _state_requires_env): + """ + Ensure state modules called via `parallel: true` have access to injected + global dunders like `__env__`. + """ + ret = state.apply(_state_requires_env) + assert ( + ret[ + "requires_env_|-This should not fail on spawning platforms_|-foo_|-test_it" + ]["result"] + is True + ) From 0e3d73e35e368543d878f5e5f49d8c377290aa57 Mon Sep 17 00:00:00 2001 From: jeanluc Date: Thu, 24 Oct 2024 14:18:37 +0200 Subject: [PATCH 20/23] Fix parallel states on spawning platforms in general This was introduced by https://github.com/saltstack/salt/pull/66517 `__invocation_jid` is rewriten to `_State__invocation_id`, making `cls(**init_kwargs)` fail with a TypeError (unexpected argument `__invocation_jid` (this behavior is called name mangling). --- salt/state.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/salt/state.py b/salt/state.py index e515e368b180..fc4f6d3a280a 100644 --- a/salt/state.py +++ b/salt/state.py @@ -753,21 +753,21 @@ def __init__( loader="states", initial_pillar=None, file_client=None, - __invocation_id=None, + _invocation_id=None, ): """ When instantiating an object of this class, do not pass - ``__invocation_id``. It is an internal field for tracking + ``_invocation_id``. It is an internal field for tracking parallel executions where no jid is available (Salt-SSH) and only exposed as an init argument to work on spawning platforms. """ if jid is not None: - __invocation_id = jid - if __invocation_id is None: + _invocation_id = jid + if _invocation_id is None: # For salt-ssh parallel states, we need a unique identifier # for a single execution. self.jid should not be set there # since it's used for other purposes as well. - __invocation_id = salt.utils.jid.gen_jid(opts) + _invocation_id = salt.utils.jid.gen_jid(opts) self._init_kwargs = { "opts": opts, "pillar_override": pillar_override, @@ -778,7 +778,7 @@ def __init__( "mocked": mocked, "loader": loader, "initial_pillar": initial_pillar, - "__invocation_id": __invocation_id, + "_invocation_id": _invocation_id, } self.states_loader = loader if "grains" not in opts: @@ -825,7 +825,7 @@ def __init__( self.pre = {} self.__run_num = 0 self.jid = jid - self.invocation_id = __invocation_id + self.invocation_id = _invocation_id self.instance_id = str(id(self)) self.inject_globals = {} self.mocked = mocked From c4361cf828e799f2af2cffb514beea745d3ad4b4 Mon Sep 17 00:00:00 2001 From: jeanluc Date: Thu, 24 Oct 2024 14:26:03 +0200 Subject: [PATCH 21/23] Ensure injected globals are defined on spawning platforms This ensures dunders like __env__ are defined in states running in parallel on spawning platforms. The __running__ dict can contain salt.utils.process.Process instances, which are still picklable. --- changelog/66996.fixed.md | 1 + salt/state.py | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 changelog/66996.fixed.md diff --git a/changelog/66996.fixed.md b/changelog/66996.fixed.md new file mode 100644 index 000000000000..eff5079f53e7 --- /dev/null +++ b/changelog/66996.fixed.md @@ -0,0 +1 @@ +Ensured global dunders like __env__ are defined in state module that are run in parallel on spawning platforms diff --git a/salt/state.py b/salt/state.py index fc4f6d3a280a..6ac44c303681 100644 --- a/salt/state.py +++ b/salt/state.py @@ -2151,12 +2151,15 @@ def requisite_in(self, high): return req_in_high, errors @classmethod - def _call_parallel_target(cls, instance, init_kwargs, name, cdata, low): + def _call_parallel_target( + cls, instance, init_kwargs, name, cdata, low, inject_globals + ): """ The target function to call that will create the parallel thread/process """ if instance is None: instance = cls(**init_kwargs) + instance.states.inject_globals = inject_globals # we need to re-record start/end duration here because it is impossible to # correctly calculate further down the chain utc_start_time = datetime.datetime.utcnow() @@ -2261,7 +2264,7 @@ def _call_parallel_target(cls, instance, init_kwargs, name, cdata, low): with salt.utils.files.fopen(tfile, "wb+") as fp_: fp_.write(msgpack_serialize(ret)) - def call_parallel(self, cdata, low): + def call_parallel(self, cdata, low, inject_globals): """ Call the state defined in the given cdata in parallel """ @@ -2278,10 +2281,11 @@ def call_parallel(self, cdata, low): instance = None else: instance = self + inject_globals = None proc = salt.utils.process.Process( target=self._call_parallel_target, - args=(instance, self._init_kwargs, name, cdata, low), + args=(instance, self._init_kwargs, name, cdata, low, inject_globals), name=f"ParallelState({name})", ) proc.start() @@ -2428,7 +2432,7 @@ def call(self, low, chunks=None, running=None, retries=1): ) elif not low.get("__prereq__") and low.get("parallel"): # run the state call in parallel, but only if not in a prereq - ret = self.call_parallel(cdata, low) + ret = self.call_parallel(cdata, low, inject_globals) else: self.format_slots(cdata) with salt.utils.files.set_umask(low.get("__umask__")): From a27549800b47e0380525b93e00ab766030e99277 Mon Sep 17 00:00:00 2001 From: jeanluc Date: Fri, 25 Oct 2024 01:17:51 +0200 Subject: [PATCH 22/23] Add test for issue #66999 --- .../functional/modules/state/test_state.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/pytests/functional/modules/state/test_state.py b/tests/pytests/functional/modules/state/test_state.py index c9d188d3b364..26928962e7ad 100644 --- a/tests/pytests/functional/modules/state/test_state.py +++ b/tests/pytests/functional/modules/state/test_state.py @@ -1126,3 +1126,53 @@ def test_state_apply_parallel_spawning_with_global_dunders(state, _state_require ]["result"] is True ) + + +@pytest.fixture +def _state_unpicklable_ctx(loaders, state_tree): + mod_contents = dedent( + r""" + import threading + + class Unpicklable: + def __init__(self): + self._lock = threading.RLock() + + def test_it(): + __context__["booh"] = Unpicklable() + """ + ) + sls = "test_spawning_unpicklable" + sls_contents = dedent( + r""" + {%- do salt["unpicklable.test_it"]() %} + + This should not fail on spawning platforms: + test.nop: + - name: foo + - parallel: true + """ + ) + with pytest.helpers.temp_file( + f"{sls}.sls", sls_contents, state_tree + ), pytest.helpers.temp_file("_modules/unpicklable.py", mod_contents, state_tree): + res = loaders.modules.saltutil.sync_modules() + assert "modules.unpicklable" in res + yield sls + + +@pytest.mark.skip_unless_on_spawning_platform( + reason="Pickling is only relevant on spawning platforms" +) +def test_state_apply_parallel_spawning_with_unpicklable_context( + state, _state_unpicklable_ctx +): + """ + Ensure that if the __context__ dictionary contains unpicklable objects, + they are filtered out instead of causing a crash. + """ + ret = state.apply(_state_unpicklable_ctx) + assert ( + ret["test_|-This should not fail on spawning platforms_|-foo_|-nop"]["result"] + is True + ) From fd7b0dcea2bee4cc1fb8ce91901753f6443779ee Mon Sep 17 00:00:00 2001 From: jeanluc Date: Fri, 25 Oct 2024 01:22:19 +0200 Subject: [PATCH 23/23] Filter unpicklable objects from the context dict when necessary --- changelog/66999.fixed.md | 1 + salt/state.py | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 changelog/66999.fixed.md diff --git a/changelog/66999.fixed.md b/changelog/66999.fixed.md new file mode 100644 index 000000000000..83c219f98deb --- /dev/null +++ b/changelog/66999.fixed.md @@ -0,0 +1 @@ +Filtered unpicklable objects from the context dict when invoking states in parallel on spawning platforms to avoid a crash diff --git a/salt/state.py b/salt/state.py index 6ac44c303681..359ebb7a7698 100644 --- a/salt/state.py +++ b/salt/state.py @@ -18,6 +18,7 @@ import inspect import logging import os +import pickle import random import re import site @@ -2288,7 +2289,30 @@ def call_parallel(self, cdata, low, inject_globals): args=(instance, self._init_kwargs, name, cdata, low, inject_globals), name=f"ParallelState({name})", ) - proc.start() + try: + proc.start() + except TypeError as err: + # Some modules use the context to cache unpicklable objects like + # database connections or loader instances. + # Ensure we don't crash because of that on spawning platforms. + if "cannot pickle" not in str(err): + raise + clean_context = {} + for var, val in self._init_kwargs["context"].items(): + try: + pickle.dumps(val) + except TypeError: + pass + else: + clean_context[var] = val + init_kwargs = self._init_kwargs.copy() + init_kwargs["context"] = clean_context + proc = salt.utils.process.Process( + target=self._call_parallel_target, + args=(instance, init_kwargs, name, cdata, low, inject_globals), + name=f"ParallelState({name})", + ) + proc.start() ret = { "name": name, "result": None,