diff --git a/requirements/base.txt b/requirements/base.txt index 4ff5f023ead..75a17f3b69d 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 d38a53d3101..82f744d426e 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 03aed248703..26db28a4a5e 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 b94527e3e26..a824c362068 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 8387571e9b0..228a1d4dd1c 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 db35eb82e9a..c8956208d31 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 9fcbd9a2e7a..d895e5983ae 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 d96697d24cb..7c7d74cb1b5 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 eab77cd9053..02c0d7e0a5b 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 91536cbeb92..99320d635ba 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 2de251e8d23..b97fb10e821 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 d4983cb783f..9d13849d867 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 1ae325868d1..320b3cf642f 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 0f0d78e6bc9..a7d8249edc2 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 0679ee0853f..09fbd61098c 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 ce21cc7cb66..8805f2c76ec 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 e2fdcb1a273..eaaaf89679d 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 c5b479d2591..9f6f6da2d1e 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 08e036ae3e3..604a4d3797f 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 a33dc7402ab..7498e79a13e 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 cb5d73f35b1..f8ff845a0e1 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 79a3940ab54..8437214434a 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 7595f06d255..dc2dd070b3b 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 da52e59971b..2475709bba3 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 ee2d844c2d0..dfb5362e016 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 a0a621cb63c..0c67829b6bd 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 d5733c9f873..35dcbd24d5b 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 841a6d45d02..d6ac9a7aed3 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 043922de1af..22b8d52ddb9 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 110689c48cf..e8692147b5f 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 60448507aea..9373e9c5d09 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 34a3a1f3abc..2fb38fb1d2b 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 1a39d942391..bbb43b56468 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 33290ea6c61..41e82cc27ce 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 b0dfe85f82b..c2f0683a564 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 a817b1b4177..cd7d97c0c8d 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 642cb950830..f5916c9115f 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 057d63e2b00..7eec9cdc1a1 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 194d3c1de41..1a12ddc90eb 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 a271829cf22..b73e65fbadb 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 35f4d9edecb..510ae34b479 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 305c81719b5..3d7d2757bb0 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 a3a4950f893..3a9b8e514bb 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 2cead97d0b2..9f9c3e60be5 100644 --- a/salt/_compat.py +++ b/salt/_compat.py @@ -14,18 +14,21 @@ if sys.version_info >= (3, 9, 5): 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 e545584f642..2195d5b0bea 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 01f61aa14d5..e79f4321e64 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 e401fdd1d89..cf4a592fd2f 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 b353793cf69..188188311e7 100644 --- a/salt/utils/requisite.py +++ b/salt/utils/requisite.py @@ -13,7 +13,7 @@ from collections.abc import Generator, Iterable, Sequence 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 @@ class DependencyGraph: 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 137383a704a..e52cf35c0d8 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 fec7fb31f10..c2a474f1892 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 ab435d248ff..7b9a0d12fc4 100644 --- a/tests/support/helpers.py +++ b/tests/support/helpers.py @@ -1673,9 +1673,9 @@ class VirtualEnv: 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 @@ class SaltVirtualEnv(VirtualEnv): 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)