From 6f12f3450276b79668186e7931228ef15734c0a2 Mon Sep 17 00:00:00 2001 From: bdrx312 Date: Thu, 3 Oct 2024 23:47:43 -0400 Subject: [PATCH] Use importlib.metadata for python >= 3.10 Add slots to DependencyGraph Pinned networkx to 3.1 Pinned networkx to latest version supported on python 3.8 to support running salt-ssh to systems with python 3.8 Fixed assignment of env in support helpers VirtualEnv Restrict networkx version with contraints instead of in base Fixed setting context retcode in some places where errors are returned. Removed unnecessary pylint ignore comment. Reverted importlib-metadata version bump. Added networkx to versions report Actually fixed VirtualEnv env assignment from kwargs --- requirements/base.txt | 3 +- requirements/constraints.txt | 2 + requirements/static/ci/py3.10/darwin.txt | 3 +- requirements/static/ci/py3.10/freebsd.txt | 3 +- requirements/static/ci/py3.10/linux.txt | 3 +- requirements/static/ci/py3.10/windows.txt | 3 +- requirements/static/ci/py3.11/darwin.txt | 3 +- requirements/static/ci/py3.11/freebsd.txt | 3 +- requirements/static/ci/py3.11/linux.txt | 3 +- requirements/static/ci/py3.11/windows.txt | 3 +- requirements/static/ci/py3.12/cloud.txt | 3 +- requirements/static/ci/py3.12/darwin.txt | 3 +- requirements/static/ci/py3.12/docs.txt | 3 +- requirements/static/ci/py3.12/freebsd.txt | 3 +- requirements/static/ci/py3.12/lint.txt | 3 +- requirements/static/ci/py3.12/linux.txt | 3 +- requirements/static/ci/py3.12/windows.txt | 3 +- requirements/static/ci/py3.8/freebsd.txt | 1 + requirements/static/ci/py3.8/linux.txt | 1 + requirements/static/ci/py3.8/windows.txt | 1 + requirements/static/ci/py3.9/darwin.txt | 3 +- requirements/static/ci/py3.9/freebsd.txt | 3 +- requirements/static/ci/py3.9/linux.txt | 3 +- requirements/static/ci/py3.9/windows.txt | 3 +- requirements/static/pkg/py3.10/darwin.txt | 6 +- requirements/static/pkg/py3.10/freebsd.txt | 6 +- requirements/static/pkg/py3.10/linux.txt | 6 +- requirements/static/pkg/py3.10/windows.txt | 6 +- requirements/static/pkg/py3.11/darwin.txt | 6 +- requirements/static/pkg/py3.11/freebsd.txt | 6 +- requirements/static/pkg/py3.11/linux.txt | 6 +- requirements/static/pkg/py3.11/windows.txt | 6 +- requirements/static/pkg/py3.12/darwin.txt | 6 +- requirements/static/pkg/py3.12/freebsd.txt | 6 +- requirements/static/pkg/py3.12/linux.txt | 6 +- requirements/static/pkg/py3.12/windows.txt | 6 +- requirements/static/pkg/py3.8/freebsd.txt | 4 +- requirements/static/pkg/py3.8/linux.txt | 4 +- requirements/static/pkg/py3.8/windows.txt | 4 +- requirements/static/pkg/py3.9/darwin.txt | 6 +- requirements/static/pkg/py3.9/freebsd.txt | 6 +- requirements/static/pkg/py3.9/linux.txt | 6 +- requirements/static/pkg/py3.9/windows.txt | 6 +- salt/_compat.py | 27 +++++---- salt/client/ssh/wrapper/state.py | 1 + salt/modules/chroot.py | 3 + salt/modules/state.py | 2 + salt/utils/requisite.py | 5 +- salt/version.py | 1 + .../pytests/unit/state/test_state_compiler.py | 59 +------------------ tests/support/helpers.py | 9 ++- 51 files changed, 149 insertions(+), 131 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 4ff5f023ead8..75a17f3b69d8 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -5,6 +5,7 @@ jmespath msgpack>=1.0.0 PyYAML MarkupSafe +# pin to a version available on all supported python versions so salt-ssh can run on older targets networkx requests>=2.31.0 ; python_version < '3.8' requests>=2.32.0 ; python_version >= '3.8' @@ -26,7 +27,7 @@ pyopenssl>=24.0.0 python-dateutil>=2.8.1 python-gnupg>=0.4.7 cherrypy>=18.6.1 -importlib-metadata>=4.3.0 +importlib-metadata>=3.3.0 cryptography>=42.0.0 # From old requirements/static/pkg/linux.in diff --git a/requirements/constraints.txt b/requirements/constraints.txt index d38a53d31017..82f744d426e4 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -1,3 +1,5 @@ setuptools >= 65.6.3,< 69.0 setuptools-scm < 8.0.0 pip >= 23.3,< 24.0 +# Restrict to a version that works on all supported python versions so salt-ssh can run on older targets +networkx >= 3.0,< 3.2 diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 03aed2487038..26db28a4a5ec 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -282,8 +282,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index b94527e3e262..a824c362068a 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -285,8 +285,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 8387571e9b0a..228a1d4dd1c1 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -310,8 +310,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index db35eb82e9a8..c8956208d313 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -253,8 +253,9 @@ multidict==6.0.4 # -c requirements/static/ci/../pkg/py3.10/windows.txt # aiohttp # yarl -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/base.txt packaging==23.1 diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index 9fcbd9a2e7ab..d895e5983ae2 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -275,8 +275,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.11/darwin.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index d96697d24cbb..7c7d74cb1b5c 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -278,8 +278,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.11/freebsd.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index eab77cd90537..02c0d7e0a5bb 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -301,8 +301,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.11/linux.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 91536cbeb92d..99320d635bac 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -246,8 +246,9 @@ multidict==6.0.4 # -c requirements/static/ci/../pkg/py3.11/windows.txt # aiohttp # yarl -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/base.txt packaging==23.1 diff --git a/requirements/static/ci/py3.12/cloud.txt b/requirements/static/ci/py3.12/cloud.txt index 2de251e8d235..b97fb10e821e 100644 --- a/requirements/static/ci/py3.12/cloud.txt +++ b/requirements/static/ci/py3.12/cloud.txt @@ -385,8 +385,9 @@ netutils==1.6.0 # via # -c requirements/static/ci/py3.12/linux.txt # napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.12/darwin.txt b/requirements/static/ci/py3.12/darwin.txt index d4983cb783ff..9d13849d8673 100644 --- a/requirements/static/ci/py3.12/darwin.txt +++ b/requirements/static/ci/py3.12/darwin.txt @@ -275,8 +275,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.12/darwin.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.12/docs.txt b/requirements/static/ci/py3.12/docs.txt index 1ae325868d1e..320b3cf642f1 100644 --- a/requirements/static/ci/py3.12/docs.txt +++ b/requirements/static/ci/py3.12/docs.txt @@ -158,8 +158,9 @@ multidict==6.0.4 # yarl myst-docutils[linkify]==1.0.0 # via -r requirements/static/ci/docs.in -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/py3.12/linux.txt # -r requirements/base.txt packaging==23.1 diff --git a/requirements/static/ci/py3.12/freebsd.txt b/requirements/static/ci/py3.12/freebsd.txt index 0f0d78e6bc96..a7d8249edc23 100644 --- a/requirements/static/ci/py3.12/freebsd.txt +++ b/requirements/static/ci/py3.12/freebsd.txt @@ -278,8 +278,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.12/freebsd.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.12/lint.txt b/requirements/static/ci/py3.12/lint.txt index 0679ee0853fd..09fbd61098c7 100644 --- a/requirements/static/ci/py3.12/lint.txt +++ b/requirements/static/ci/py3.12/lint.txt @@ -412,8 +412,9 @@ netutils==1.6.0 # via # -c requirements/static/ci/py3.12/linux.txt # napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt # -r requirements/base.txt diff --git a/requirements/static/ci/py3.12/linux.txt b/requirements/static/ci/py3.12/linux.txt index ce21cc7cb661..8805f2c76ec0 100644 --- a/requirements/static/ci/py3.12/linux.txt +++ b/requirements/static/ci/py3.12/linux.txt @@ -301,8 +301,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.12/windows.txt b/requirements/static/ci/py3.12/windows.txt index e2fdcb1a2732..eaaaf89679d1 100644 --- a/requirements/static/ci/py3.12/windows.txt +++ b/requirements/static/ci/py3.12/windows.txt @@ -246,8 +246,9 @@ multidict==6.0.4 # -c requirements/static/ci/../pkg/py3.12/windows.txt # aiohttp # yarl -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.12/windows.txt # -r requirements/base.txt packaging==23.1 diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index c5b479d2591e..9f6f6da2d1ea 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -291,6 +291,7 @@ netutils==1.6.0 # via napalm networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 08e036ae3e38..604a4d3797fc 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -310,6 +310,7 @@ netutils==1.6.0 # via napalm networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index a33dc7402abf..7498e79a13e4 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -259,6 +259,7 @@ multidict==6.0.4 # yarl networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/base.txt packaging==23.1 diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index cb5d73f35b15..f8ff845a0e15 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -282,8 +282,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 79a3940ab542..8437214434ac 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -285,8 +285,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 7595f06d2551..dc2dd070b3be 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -304,8 +304,9 @@ netmiko==4.2.0 # via napalm netutils==1.6.0 # via napalm -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/base.txt ntc-templates==4.0.1 diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index da52e59971bd..2475709bba3e 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -253,8 +253,9 @@ multidict==6.0.4 # -c requirements/static/ci/../pkg/py3.9/windows.txt # aiohttp # yarl -networkx==3.2.1 +networkx==3.1 # via + # -c requirements/constraints.txt # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/base.txt packaging==23.1 diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index ee2d844c2d0c..dfb5362e016a 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -83,8 +83,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index a0a621cb63c5..0c67829b6bd6 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -83,8 +83,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index d5733c9f8731..35dcbd24d5bc 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -83,8 +83,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 841a6d45d023..d6ac9a7aed3c 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -91,8 +91,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index 043922de1afd..22b8d52ddb90 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -81,8 +81,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.11/freebsd.txt b/requirements/static/pkg/py3.11/freebsd.txt index 110689c48cfb..e8692147b5f6 100644 --- a/requirements/static/pkg/py3.11/freebsd.txt +++ b/requirements/static/pkg/py3.11/freebsd.txt @@ -81,8 +81,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.11/linux.txt b/requirements/static/pkg/py3.11/linux.txt index 60448507aeaa..9373e9c5d095 100644 --- a/requirements/static/pkg/py3.11/linux.txt +++ b/requirements/static/pkg/py3.11/linux.txt @@ -81,8 +81,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.11/windows.txt b/requirements/static/pkg/py3.11/windows.txt index 34a3a1f3abc2..2fb38fb1d2b8 100644 --- a/requirements/static/pkg/py3.11/windows.txt +++ b/requirements/static/pkg/py3.11/windows.txt @@ -89,8 +89,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.12/darwin.txt b/requirements/static/pkg/py3.12/darwin.txt index 1a39d942391f..bbb43b56468e 100644 --- a/requirements/static/pkg/py3.12/darwin.txt +++ b/requirements/static/pkg/py3.12/darwin.txt @@ -81,8 +81,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.12/freebsd.txt b/requirements/static/pkg/py3.12/freebsd.txt index 33290ea6c61c..41e82cc27cee 100644 --- a/requirements/static/pkg/py3.12/freebsd.txt +++ b/requirements/static/pkg/py3.12/freebsd.txt @@ -81,8 +81,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.12/linux.txt b/requirements/static/pkg/py3.12/linux.txt index b0dfe85f82be..c2f0683a5645 100644 --- a/requirements/static/pkg/py3.12/linux.txt +++ b/requirements/static/pkg/py3.12/linux.txt @@ -81,8 +81,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.12/windows.txt b/requirements/static/pkg/py3.12/windows.txt index a817b1b41773..cd7d97c0c8d4 100644 --- a/requirements/static/pkg/py3.12/windows.txt +++ b/requirements/static/pkg/py3.12/windows.txt @@ -89,8 +89,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index 642cb9508306..f5916c9115f9 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -86,7 +86,9 @@ multidict==6.0.4 # aiohttp # yarl networkx==3.1 - # via -r requirements/base.txt + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index 057d63e2b001..7eec9cdc1a16 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -86,7 +86,9 @@ multidict==6.0.4 # aiohttp # yarl networkx==3.1 - # via -r requirements/base.txt + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 194d3c1de414..1a12ddc90ebf 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -94,7 +94,9 @@ multidict==6.0.4 # aiohttp # yarl networkx==3.1 - # via -r requirements/base.txt + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index a271829cf225..b73e65fbadb4 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -83,8 +83,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 35f4d9edecb7..510ae34b479c 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -83,8 +83,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index 305c81719b50..3d7d2757bb0b 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -83,8 +83,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index a3a4950f8938..3a9b8e514bbb 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -91,8 +91,10 @@ multidict==6.0.4 # via # aiohttp # yarl -networkx==3.2.1 - # via -r requirements/base.txt +networkx==3.1 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt packaging==23.1 # via -r requirements/base.txt portend==3.1.0 diff --git a/salt/_compat.py b/salt/_compat.py index 2cead97d0b26..9f9c3e60be5d 100644 --- a/salt/_compat.py +++ b/salt/_compat.py @@ -14,18 +14,21 @@ else: import salt.ext.ipaddress as ipaddress -# importlib_metadata before version 3.3.0 does not include the functionality we need. -try: - import importlib_metadata +if sys.version_info >= (3, 10): + import importlib.metadata as importlib_metadata +else: + # importlib_metadata before version 3.3.0 does not include the functionality we need. + try: + import importlib_metadata - importlib_metadata_version = [ - int(part) - for part in importlib_metadata.version("importlib_metadata").split(".") - if part.isdigit() - ] - if tuple(importlib_metadata_version) < (3, 3, 0): + importlib_metadata_version = [ + int(part) + for part in importlib_metadata.version("importlib_metadata").split(".") + if part.isdigit() + ] + if tuple(importlib_metadata_version) < (3, 3, 0): + # Use the vendored importlib_metadata + import salt.ext.importlib_metadata as importlib_metadata + except ImportError: # Use the vendored importlib_metadata import salt.ext.importlib_metadata as importlib_metadata -except ImportError: - # Use the vendored importlib_metadata - import salt.ext.importlib_metadata as importlib_metadata diff --git a/salt/client/ssh/wrapper/state.py b/salt/client/ssh/wrapper/state.py index e545584f642a..2195d5b0bea3 100644 --- a/salt/client/ssh/wrapper/state.py +++ b/salt/client/ssh/wrapper/state.py @@ -435,6 +435,7 @@ def high(data, **kwargs): st_.push_active() chunks, errors = st_.state.compile_high_data(data) if errors: + __context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR return errors file_refs = salt.client.ssh.state.lowstate_file_refs( chunks, diff --git a/salt/modules/chroot.py b/salt/modules/chroot.py index 01f61aa14d5f..e79f4321e64c 100644 --- a/salt/modules/chroot.py +++ b/salt/modules/chroot.py @@ -337,11 +337,13 @@ def sls(root, mods, saltenv="base", test=None, exclude=None, **kwargs): errors += ext_errors errors += st_.state.verify_high(high_data) if errors: + __context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR return errors high_data, req_in_errors = st_.state.requisite_in(high_data) errors += req_in_errors if errors: + __context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR return errors high_data = st_.state.apply_exclude(high_data) @@ -349,6 +351,7 @@ def sls(root, mods, saltenv="base", test=None, exclude=None, **kwargs): # Compile and verify the raw chunks chunks, errors = st_.state.compile_high_data(high_data) if errors: + __context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR return errors file_refs = salt.client.ssh.state.lowstate_file_refs( chunks, diff --git a/salt/modules/state.py b/salt/modules/state.py index e401fdd1d898..cf4a592fd2f7 100644 --- a/salt/modules/state.py +++ b/salt/modules/state.py @@ -1921,6 +1921,7 @@ def sls_id(id_, mods, test=None, queue=None, state_events=None, **kwargs): return errors chunks, errors = st_.state.compile_high_data(high_) if errors: + __context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR return errors ret = {} for chunk in chunks: @@ -2031,6 +2032,7 @@ def show_low_sls(mods, test=None, queue=None, **kwargs): return errors ret, errors = st_.state.compile_high_data(high_) if errors: + __context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR return errors # Work around Windows multiprocessing bug, set __opts__['test'] back to # value from before this function was run. diff --git a/salt/utils/requisite.py b/salt/utils/requisite.py index b353793cf69f..188188311e73 100644 --- a/salt/utils/requisite.py +++ b/salt/utils/requisite.py @@ -13,7 +13,7 @@ from enum import Enum, auto from typing import TYPE_CHECKING, Any -import networkx as nx # pylint: disable=3rd-party-module-not-gated +import networkx as nx log = logging.getLogger(__name__) @@ -96,6 +96,8 @@ class DependencyGraph: between the states. """ + __slots__ = ("dag", "nodes_lookup_map", "sls_to_nodes") + def __init__(self) -> None: self.dag = nx.MultiDiGraph() # a mapping to node_id to be able to find nodes with @@ -245,7 +247,6 @@ def add_dependency( self, low: LowChunk, req_type: RequisiteType, req_key: str, req_val: str ) -> bool: found = False - prereq_tag = None has_prereq_node = low.get("__prereq__", False) if req_key == "sls": # Allow requisite tracking of entire sls files diff --git a/salt/version.py b/salt/version.py index 137383a704a2..e52cf35c0d81 100644 --- a/salt/version.py +++ b/salt/version.py @@ -704,6 +704,7 @@ def dependency_information(include_salt_cloud=False): ("M2Crypto", "M2Crypto", "version"), ("msgpack", "msgpack", "version"), ("msgpack-pure", "msgpack_pure", "version"), + ("networkx", "networkx", "__version__"), ("pycrypto", "Crypto", "__version__"), ("pycryptodome", "Cryptodome", "version_info"), ("cryptography", "cryptography", "__version__"), diff --git a/tests/pytests/unit/state/test_state_compiler.py b/tests/pytests/unit/state/test_state_compiler.py index fec7fb31f10d..c2a474f1892b 100644 --- a/tests/pytests/unit/state/test_state_compiler.py +++ b/tests/pytests/unit/state/test_state_compiler.py @@ -960,68 +960,13 @@ def test_mod_aggregate(minion_opts): ] # Ensure that the require requisite from the - # figlet state finds its way into this state - assert "require" in low_ret + # figlet state doesn't find its way into this state + assert "require" not in low_ret # Ensure pkgs were aggregated assert low_ret["pkgs"] == ["sl", "hello"] -def test_mod_aggregate_order(minion_opts): - """ - Test to ensure that the state_aggregate setting correctly aggregates package installations - while respecting the 'require' requisite to enforce execution order. - """ - # Setup the chunks based on the provided scenario - chunks = [ - { - "state": "pkg", - "name": "first packages", - "__id__": "first packages", - "pkgs": ["drpm"], - "fun": "installed", - "order": 1, - "__env__": "base", - "__sls__": "base", - }, - { - "state": "test", - "name": "requirement", - "__id__": "requirement", - "fun": "nop", - "order": 2, - "__env__": "base", - "__sls__": "base", - }, - { - "state": "pkg", - "name": "second packages", - "__id__": "second packages", - "pkgs": ["gc"], - "fun": "installed", - "order": 3, - "require": [{"test": "requirement"}], - "provider": "yumpkg", - "__env__": "base", - "__sls__": "base", - }, - ] - - # Setup the State object - with patch("salt.state.State._gather_pillar"): - state_obj = salt.state.State(minion_opts) - state_obj.load_modules(chunks[-1]) - state_obj.opts["state_aggregate"] = True # Ensure state aggregation is enabled - - # Process each chunk with _mod_aggregate to simulate state execution - state_obj.call_chunks(chunks) - - first_state_low = chunks[0] - last_state_low = chunks[-1] - # Verify that the requisites got aggregated as well - assert first_state_low["require"] == last_state_low["require"] - - def test_verify_onlyif_cmd_opts_exclude(minion_opts): """ Verify cmd.run state arguments are properly excluded from cmd.retcode diff --git a/tests/support/helpers.py b/tests/support/helpers.py index ab435d248ffd..7b9a0d12fc44 100644 --- a/tests/support/helpers.py +++ b/tests/support/helpers.py @@ -1673,9 +1673,9 @@ def run(self, *args, **kwargs): kwargs.setdefault("stdout", subprocess.PIPE) kwargs.setdefault("stderr", subprocess.PIPE) kwargs.setdefault("universal_newlines", True) - env = kwargs.pop("env", None) - if env: - env = self.environ.copy().update(env) + if kwenv := kwargs.pop("env", None): + env = self.environ.copy() + env.update(kwenv) else: env = self.environ proc = subprocess.run(args, check=False, env=env, **kwargs) @@ -1780,8 +1780,7 @@ def _create_virtualenv(self): self.install(RUNTIME_VARS.CODE_DIR) def install(self, *args, **kwargs): - env = self.environ.copy() - env.update(kwargs.pop("env", None) or {}) + env = kwargs.pop("env", None) or {} env["USE_STATIC_REQUIREMENTS"] = "1" kwargs["env"] = env return super().install(*args, **kwargs)