summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-admin/salt')
-rw-r--r--app-admin/salt/Manifest9
-rw-r--r--app-admin/salt/files/api-confd-14
-rw-r--r--app-admin/salt/files/api-initd-414
-rw-r--r--app-admin/salt/files/api-initd-519
-rw-r--r--app-admin/salt/files/master-initd-414
-rw-r--r--app-admin/salt/files/master-initd-519
-rw-r--r--app-admin/salt/files/minion-initd-415
-rw-r--r--app-admin/salt/files/minion-initd-520
-rw-r--r--app-admin/salt/files/salt-2017.7.0-dont-realpath-tmpdir.patch19
-rw-r--r--app-admin/salt/files/salt-2019.2.0-remove-raet-tests.patch43
-rw-r--r--app-admin/salt/files/salt-2019.2.0-skip-tests-that-oom-machine.patch20
-rw-r--r--app-admin/salt/files/salt-2019.2.0-tests.patch73
-rw-r--r--app-admin/salt/files/salt-2019.2.2-newer-deps.patch136
-rw-r--r--app-admin/salt/files/salt-2019.2.2-workaround-broken-mock-on-py2.patch28
-rw-r--r--app-admin/salt/files/salt-3000.1-tests.patch58
-rw-r--r--app-admin/salt/files/salt-3000.2-py38-abc.patch79
-rw-r--r--app-admin/salt/files/salt-3000.2-py38-logwarn.patch116
-rw-r--r--app-admin/salt/files/salt-3000.2-py38.patch60
-rw-r--r--app-admin/salt/files/salt-3000.2-tests.patch18
-rw-r--r--app-admin/salt/files/salt-3001.1-tests.patch151
-rw-r--r--app-admin/salt/files/salt-3002-tests.patch27
-rw-r--r--app-admin/salt/files/salt-3003-gentoolkit-revdep.patch13
-rw-r--r--app-admin/salt/files/salt-3003.1-tests.patch25
-rw-r--r--app-admin/salt/files/salt-3005-tests.patch94
-rw-r--r--app-admin/salt/files/salt-3005.1-importlib-metadata-5-r1.patch29
-rw-r--r--app-admin/salt/files/salt-3005.1-modules-file-python-3.11-host.patch123
-rw-r--r--app-admin/salt/files/salt-3005.1-no-entry-points.patch13
-rw-r--r--app-admin/salt/files/salt-3005.1-tests.patch40
-rw-r--r--app-admin/salt/files/salt-3006.2-tests.patch114
-rw-r--r--app-admin/salt/files/syndic-confd-14
-rw-r--r--app-admin/salt/files/syndic-initd-414
-rw-r--r--app-admin/salt/files/syndic-initd-519
-rw-r--r--app-admin/salt/metadata.xml7
-rw-r--r--app-admin/salt/salt-2019.2.5-r1.ebuild150
-rw-r--r--app-admin/salt/salt-3000.2-r4.ebuild193
-rw-r--r--app-admin/salt/salt-3000.3.ebuild193
-rw-r--r--app-admin/salt/salt-3001.1-r2.ebuild184
-rw-r--r--app-admin/salt/salt-3005.5-r1.ebuild312
-rw-r--r--app-admin/salt/salt-3006.5-r1.ebuild342
-rw-r--r--app-admin/salt/salt-3006.7-r1.ebuild358
-rw-r--r--app-admin/salt/salt-3007.0-r1.ebuild610
41 files changed, 2188 insertions, 1591 deletions
diff --git a/app-admin/salt/Manifest b/app-admin/salt/Manifest
index 4f594f7a094f..779c5a6e36ea 100644
--- a/app-admin/salt/Manifest
+++ b/app-admin/salt/Manifest
@@ -1,5 +1,4 @@
-DIST salt-2019.2.5.tar.gz 14574347 BLAKE2B d456dd493e79640260f3ad3c964fdaaa26dd7bdc8d5676bd70f9dd143647c62b63aba2052e7f223041b7dd6859cd923398ad22f9d2d1302b8f18b4c69fe7aafb SHA512 95445dff498bea2bc8e3f32749131302481166c8591f11a5f76a7786c3286cb608049a743bc4878c8fbd4e4d22d4949f243f57f1e53725e7076d39aea5ceea20
-DIST salt-3000.2-py38-misc.patch.gz 6250 BLAKE2B 68fff80a042e6bf208ea2d9692da7a7b1e29572f1ec3c850c14743bbf2821d231f933ec4e6d6eaad12acee0b7666888a37a72872b2b082c92d8db9de988fbbec SHA512 6d4a66323a423e630f7cc73b566ed96c452c8fc3d72c25a2dd86033c4774c1c8e8b8701e1d4ee92994d4148c398d704f419023e26d8b40c8fdd63f9d79d9d52f
-DIST salt-3000.2.tar.gz 15231513 BLAKE2B 2090d0f52f953a42f1685ad190750e9c76ad6e862a3272444fef063a7605f69a6c542f04165a41fb9cdaa126a878cc133d4857faa70edc5eac4bf49bdde937ab SHA512 88e8876ed8cd18e942c2194686cda68f40fa49e69e317ca488bf58e095bcf6cdf8771d93eba7960038941cc5863e13a4eea4dad5256c12da7cd8288a2c61f59d
-DIST salt-3000.3.tar.gz 15237557 BLAKE2B ab51e07f56f9e02c47da58fad95c9482ea70e0685996a78e34382eadb3a9a3dace63ef65d643a9de284ea00c34785eae631d033f32e00e59eb3639514459af33 SHA512 a4697da9a2f7d484b72145e8b83f6d9032369f87e2e7119a9d51f59b989488285406543f79142fc686c41c144f5878eefba37927137581c892c88f03fc3a8208
-DIST salt-3001.1.tar.gz 14556156 BLAKE2B 3088955a07b6ff95588f5b6235e0bae9cea366e957e026bacd228af9f1ed500f88f7fb543833f2398d64fe7e4546f0f29d7c65362464097bf89424174e76c954 SHA512 d59b6c3580d3379192f36e462385c74b53b0b385e63b3db7734003d0a71df8f88593a59eeccd86b1dc15800e46d050094e7a88f2636673770ddc952d0110ca29
+DIST salt-3005.5.tar.gz 17940104 BLAKE2B c7a820bc946c2cd8124fb6f559608ab1dc3cd85d6f0e7d0a2a87b7bc0dda361178e83b307c2fecd8a47d59032f85dc9f4caeef5698e98c0e349d1c6979f9f68a SHA512 1332c9751a225dbf569601eb1932fe3ebea93c8d8be7485b1b8150d5200ad2e82954c970d59ba0e888860062d059db78a50bffe69fc367bdb7b2388b62e19f32
+DIST salt-3006.5.tar.gz 20536455 BLAKE2B cf475dc5e919f6ab180578db2aae5f3655623b39b134d67609da4f607be909340c6e55c940cfb66f129cc75d40b5cdda094e866db116d8a45aa5eef26d8fa1eb SHA512 8aaf5c5d36d8aa17b3fe867cee470f7b3c5dd1f6abaf5bdb49a3df76d3498d0dc1fa305a069bc95ad057489db229454b38b0ea9c1ade1e46b5d9b57aeef10c23
+DIST salt-3006.7.tar.gz 20562663 BLAKE2B b4ff9039509b1de7151060cb0e68252868d493e114e327a3c48bfc5584f67521a2106b41b77377f6d43ab5795399b6fe5860ce8e091459687c4a5b2378752729 SHA512 9d1759a7c0dfc9ad4fdc94460f0f3799483737207bfdc8ddd1424e5c6083ea74ef520f13c323d5cbd7f65c1d9bb13bbbeb5f2cafe6dcacbc2689e733794aef2d
+DIST salt-3007.0.tar.gz 20304228 BLAKE2B 3db95ce779cfd08d61536dcfb4ff6ac31788ad1d6d4665b640dcc430f5a33847f231f94fd574c5d8df7b14e2854511c80610a37cd19be5429c4643be8bd9e0eb SHA512 0e49d76dafdb981ee380ea89ceba2cddeae8cd95df1d188a6f8ba64a175c606aaf2f8101bacb040792255afdb46ae668cbc9464d0dbb055986e85cee4d5c130b
diff --git a/app-admin/salt/files/api-confd-1 b/app-admin/salt/files/api-confd-1
index c70e8e766da0..84a1c6c71a0e 100644
--- a/app-admin/salt/files/api-confd-1
+++ b/app-admin/salt/files/api-confd-1
@@ -1,5 +1,5 @@
-# /etc/conf.d/salt-master: config file for /etc/init.d/salt-master
+# /etc/conf.d/salt-api: config file for /etc/init.d/salt-api
-# see man pages for salt-minion or run `salt-master --help`
+# see man pages for salt-minion or run `salt-api --help`
# for valid cmdline options
SALT_OPTS="--log-level=warning"
diff --git a/app-admin/salt/files/api-initd-4 b/app-admin/salt/files/api-initd-4
deleted file mode 100644
index a0cb8265047d..000000000000
--- a/app-admin/salt/files/api-initd-4
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/sbin/openrc-run
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-command="/usr/bin/salt-api"
-command_args="${SALT_OPTS}"
-command_background="1"
-pidfile="/var/run/salt-api.pid"
-name="SALT API daemon"
-retry="20"
-
-depend() {
- use net logger
-}
diff --git a/app-admin/salt/files/api-initd-5 b/app-admin/salt/files/api-initd-5
new file mode 100644
index 000000000000..18e06c6fd086
--- /dev/null
+++ b/app-admin/salt/files/api-initd-5
@@ -0,0 +1,19 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command="/usr/bin/salt-api"
+command_args="${SALT_OPTS}"
+pidfile="/var/run/supervisor-salt-api.pid"
+daemon_pidfile="/var/run/salt-api.pid"
+command_args_background="--daemon --pid-file=\"${daemon_pidfile}\""
+name="SALT API daemon"
+retry="20"
+
+supervisor=supervise-daemon
+output_logger="logger -p daemon.info -t salt-api.stdout --"
+error_logger="logger -p daemon.err -t salt-api.error --"
+
+depend() {
+ use net logger
+}
diff --git a/app-admin/salt/files/master-initd-4 b/app-admin/salt/files/master-initd-4
deleted file mode 100644
index e07e72b0dae7..000000000000
--- a/app-admin/salt/files/master-initd-4
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/sbin/openrc-run
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-command="/usr/bin/salt-master"
-command_args="${SALT_OPTS}"
-command_background="1"
-pidfile="/var/run/salt-master.pid"
-name="SALT master daemon"
-retry="20"
-
-depend() {
- use net logger
-}
diff --git a/app-admin/salt/files/master-initd-5 b/app-admin/salt/files/master-initd-5
new file mode 100644
index 000000000000..7313e2b7a701
--- /dev/null
+++ b/app-admin/salt/files/master-initd-5
@@ -0,0 +1,19 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command="/usr/bin/salt-master"
+command_args="${SALT_OPTS}"
+pidfile="/var/run/supervisor-salt-master.pid"
+daemon_pidfile="/var/run/salt-master.pid"
+command_args_background="--daemon --pid-file=\"${daemon_pidfile}\""
+name="SALT master daemon"
+retry="20"
+
+supervisor=supervise-daemon
+output_logger="logger -p daemon.info -t salt-master.stdout --"
+error_logger="logger -p daemon.err -t salt-master.error --"
+
+depend() {
+ use net logger
+}
diff --git a/app-admin/salt/files/minion-initd-4 b/app-admin/salt/files/minion-initd-4
deleted file mode 100644
index c658ccf5c1df..000000000000
--- a/app-admin/salt/files/minion-initd-4
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/sbin/openrc-run
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-command="/usr/bin/salt-minion"
-command_args="${SALT_OPTS}"
-command_background="1"
-pidfile="/var/run/salt-minion.pid"
-name="SALT minion daemon"
-retry="20"
-
-depend() {
- need net
- use logger
-}
diff --git a/app-admin/salt/files/minion-initd-5 b/app-admin/salt/files/minion-initd-5
new file mode 100644
index 000000000000..426ba964dcb3
--- /dev/null
+++ b/app-admin/salt/files/minion-initd-5
@@ -0,0 +1,20 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command="/usr/bin/salt-minion"
+command_args="${SALT_OPTS}"
+pidfile="/var/run/supervisor-salt-minion.pid"
+daemon_pidfile="/var/run/salt-minion.pid"
+command_args_background="--daemon --pid-file=\"${daemon_pidfile}\""
+name="SALT minion daemon"
+retry="20"
+
+supervisor=supervise-daemon
+output_logger="logger -p daemon.info -t salt-minion.stdout --"
+error_logger="logger -p daemon.err -t salt-minion.error --"
+
+depend() {
+ need net
+ use logger
+}
diff --git a/app-admin/salt/files/salt-2017.7.0-dont-realpath-tmpdir.patch b/app-admin/salt/files/salt-2017.7.0-dont-realpath-tmpdir.patch
deleted file mode 100644
index 90a48a662998..000000000000
--- a/app-admin/salt/files/salt-2017.7.0-dont-realpath-tmpdir.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff --git a/tests/support/paths.py b/tests/support/paths.py
-index da93c8e1e3..895c636fef 100644
---- a/tests/support/paths.py
-+++ b/tests/support/paths.py
-@@ -40,12 +40,12 @@ if CODE_DIR not in sys.path:
- if TESTS_DIR not in sys.path:
- sys.path.insert(1, TESTS_DIR)
-
--SYS_TMP_DIR = os.path.abspath(os.path.realpath(
-+SYS_TMP_DIR = os.path.abspath(
- # Avoid ${TMPDIR} and gettempdir() on MacOS as they yield a base path too long
- # for unix sockets: ``error: AF_UNIX path too long``
- # Gentoo Portage prefers ebuild tests are rooted in ${TMPDIR}
- os.environ.get('TMPDIR', tempfile.gettempdir()) if not sys.platform.startswith('darwin') else '/tmp'
--))
-+)
- TMP = os.path.join(SYS_TMP_DIR, 'salt-tests-tmpdir')
- FILES = os.path.join(INTEGRATION_TEST_DIR, 'files')
- PYEXEC = 'python{0}.{1}'.format(*sys.version_info)
diff --git a/app-admin/salt/files/salt-2019.2.0-remove-raet-tests.patch b/app-admin/salt/files/salt-2019.2.0-remove-raet-tests.patch
deleted file mode 100644
index fab9f38df771..000000000000
--- a/app-admin/salt/files/salt-2019.2.0-remove-raet-tests.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-diff --git a/tests/unit/modules/test_event.py b/tests/unit/modules/test_event.py
-index e5d2c946ae..e9140670cb 100644
---- a/tests/unit/modules/test_event.py
-+++ b/tests/unit/modules/test_event.py
-@@ -47,12 +47,6 @@ class EventTestCase(TestCase, LoaderModuleMockMixin):
- preload = {'id': 'id', 'tag': 'tag', 'data': 'data',
- 'tok': 'salt', 'cmd': '_minion_event'}
-
-- with patch.dict(event.__opts__, {'transport': 'raet',
-- 'local': False}):
-- with patch.object(salt_transport_channel_factory, 'send',
-- return_value=None):
-- self.assertTrue(event.fire_master('data', 'tag'))
--
- with patch.dict(event.__opts__, {'transport': 'A',
- 'master_uri': 'localhost',
- 'local': False}):
-diff --git a/tests/unit/utils/test_verify.py b/tests/unit/utils/test_verify.py
-index 63b9ae3181..2c8294ef77 100644
---- a/tests/unit/utils/test_verify.py
-+++ b/tests/unit/utils/test_verify.py
-@@ -326,7 +326,7 @@ class TestVerifyLog(TestCase):
- verify_log_files([path], getpass.getuser())
- self.assertTrue(os.path.exists(path))
-
--
-+@skipIf(True, "broken under sandbox")
- class TestCleanPath(TestCase):
- '''
- salt.utils.clean_path works as expected
-@@ -396,10 +396,10 @@ class TestCleanPathLink(TestCase):
- test_path = os.path.join(self.from_path, 'test')
- expect_path = os.path.join(self.to_path, 'test')
- ret = clean_path(self.from_path, test_path)
-- assert ret == expect_path, "{} is not {}".format(ret, expect_path)
-+ assert ret == os.path.realpath(expect_path), "{} is not {}".format(ret, expect_path)
-
- def test_clean_path_symlinked_tgt(self):
- test_path = os.path.join(self.to_path, 'test')
- expect_path = os.path.join(self.to_path, 'test')
- ret = clean_path(self.from_path, test_path)
-- assert ret == expect_path, "{} is not {}".format(ret, expect_path)
-+ assert ret == os.path.realpath(expect_path), "{} is not {}".format(ret, expect_path)
diff --git a/app-admin/salt/files/salt-2019.2.0-skip-tests-that-oom-machine.patch b/app-admin/salt/files/salt-2019.2.0-skip-tests-that-oom-machine.patch
deleted file mode 100644
index d0172d739554..000000000000
--- a/app-admin/salt/files/salt-2019.2.0-skip-tests-that-oom-machine.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git a/tests/unit/modules/test_boto_apigateway.py b/tests/unit/modules/test_boto_apigateway.py
-index be26b3f093..ca971556d5 100644
---- a/tests/unit/modules/test_boto_apigateway.py
-+++ b/tests/unit/modules/test_boto_apigateway.py
-@@ -169,6 +169,7 @@ def _has_required_botocore():
- return True
-
-
-+@skipIf(True, "Causes machines to OOM")
- class BotoApiGatewayTestCaseBase(TestCase, LoaderModuleMockMixin):
- conn = None
-
-@@ -207,6 +208,7 @@ class BotoApiGatewayTestCaseBase(TestCase, LoaderModuleMockMixin):
- self.addCleanup(delattr, self, 'conn')
-
-
-+@skipIf(True, "Causes machines to OOM")
- class BotoApiGatewayTestCaseMixin(object):
- def _diff_list_dicts(self, listdict1, listdict2, sortkey):
- '''
diff --git a/app-admin/salt/files/salt-2019.2.0-tests.patch b/app-admin/salt/files/salt-2019.2.0-tests.patch
deleted file mode 100644
index 830fcbffe367..000000000000
--- a/app-admin/salt/files/salt-2019.2.0-tests.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-diff --git a/tests/unit/fileserver/test_gitfs.py b/tests/unit/fileserver/test_gitfs.py
-index 4e93df4e62..38c13efb6b 100644
---- a/tests/unit/fileserver/test_gitfs.py
-+++ b/tests/unit/fileserver/test_gitfs.py
-@@ -151,6 +151,7 @@ class GitfsConfigTestCase(TestCase, LoaderModuleMockMixin):
- if exc.errno != errno.EEXIST:
- raise
-
-+ @skipIf(True, 'currently failing on Gentoo')
- def test_per_saltenv_config(self):
- opts_override = textwrap.dedent('''
- gitfs_root: salt
-diff --git a/tests/unit/grains/test_core.py b/tests/unit/grains/test_core.py
-index 445df0c98a..17ca123172 100644
---- a/tests/unit/grains/test_core.py
-+++ b/tests/unit/grains/test_core.py
-@@ -710,6 +710,7 @@ class CoreGrainsTestCase(TestCase, LoaderModuleMockMixin):
- )
-
- @skipIf(not salt.utils.platform.is_linux(), 'System is not Linux')
-+ @skipIf(True, 'Test assumes running under Xen')
- def test_xen_virtual(self):
- '''
- Test if OS grains are parsed correctly in Ubuntu Xenial Xerus
-diff --git a/tests/unit/utils/test_asynchronous.py b/tests/unit/utils/test_asynchronous.py
-index 694a7aebfe..704f2d894f 100644
---- a/tests/unit/utils/test_asynchronous.py
-+++ b/tests/unit/utils/test_asynchronous.py
-@@ -3,6 +3,8 @@
- # Import Python Libs
- from __future__ import absolute_import, print_function, unicode_literals
-
-+from unittest import skipIf
-+
- # Import 3rd-party libs
- import tornado.testing
- import tornado.gen
-@@ -35,6 +37,7 @@ class HelperB(object):
-
-
- class TestSyncWrapper(AsyncTestCase):
-+ @skipIf(True, "fails in sandbox")
- @tornado.testing.gen_test
- def test_helpers(self):
- '''
-@@ -56,6 +59,7 @@ class TestSyncWrapper(AsyncTestCase):
- ret = sync.sleep()
- self.assertTrue(ret)
-
-+ @skipIf(True, "fails in sandbox")
- def test_double(self):
- '''
- Test when the asynchronous wrapper object itself creates a wrap of another thing
-@@ -67,6 +71,7 @@ class TestSyncWrapper(AsyncTestCase):
- ret = sync.sleep()
- self.assertFalse(ret)
-
-+ @skipIf(True, "fails in sandbox")
- def test_double_sameloop(self):
- '''
- Test asynchronous wrappers initiated from the same IOLoop, to ensure that
-diff --git a/tests/unit/utils/test_jinja.py b/tests/unit/utils/test_jinja.py
-index da666ef4c7..e3523049b7 100644
---- a/tests/unit/utils/test_jinja.py
-+++ b/tests/unit/utils/test_jinja.py
-@@ -1102,6 +1102,7 @@ class TestCustomExtensions(TestCase):
- dict(opts=self.local_opts, saltenv='test', salt=self.local_salt))
- self.assertEqual(rendered, '16777216')
-
-+ @skipIf(True, 'Skipping tests that require internet access')
- @flaky
- def test_http_query(self):
- '''
diff --git a/app-admin/salt/files/salt-2019.2.2-newer-deps.patch b/app-admin/salt/files/salt-2019.2.2-newer-deps.patch
deleted file mode 100644
index ee3bc0604173..000000000000
--- a/app-admin/salt/files/salt-2019.2.2-newer-deps.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-diff --git a/salt/modules/dockercompose.py b/salt/modules/dockercompose.py
-index 61e937536c..0f37e0d43a 100644
---- a/salt/modules/dockercompose.py
-+++ b/salt/modules/dockercompose.py
-@@ -241,7 +241,7 @@ def __load_docker_compose(path):
- None, None)
- try:
- with salt.utils.files.fopen(file_path, 'r') as fl:
-- loaded = yaml.load(fl)
-+ loaded = yaml.safe_load(fl)
- except EnvironmentError:
- return None, __standardize_result(False,
- 'Could not read {0}'.format(file_path),
-@@ -371,7 +371,7 @@ def __load_compose_definitions(path, definition):
- None, None)
- else:
- try:
-- loaded_definition = yaml.load(definition)
-+ loaded_definition = yaml.safe_load(definition)
- except yaml.YAMLError as yerr:
- msg = 'Could not parse {0} {1}'.format(definition, yerr)
- return None, None, __standardize_result(False, msg,
-diff --git a/tests/integration/utils/test_win_runas.py b/tests/integration/utils/test_win_runas.py
-index 3042a77991..d4057a4d03 100644
---- a/tests/integration/utils/test_win_runas.py
-+++ b/tests/integration/utils/test_win_runas.py
-@@ -539,7 +539,7 @@ class RunAsTest(ModuleCase):
- win32serviceutil.StartService('test service')
- wait_for_service('test service')
- with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
-- ret = yaml.load(fp)
-+ ret = yaml.safe_load(fp)
- assert ret['retcode'] == 1, ret
-
- @with_system_user('test-runas', on_existing='delete', delete=True,
-@@ -560,7 +560,7 @@ class RunAsTest(ModuleCase):
- win32serviceutil.StartService('test service')
- wait_for_service('test service')
- with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
-- ret = yaml.load(fp)
-+ ret = yaml.safe_load(fp)
- assert ret['retcode'] == 1, ret
-
- @with_system_user('test-runas-admin', on_existing='delete', delete=True,
-@@ -581,7 +581,7 @@ class RunAsTest(ModuleCase):
- win32serviceutil.StartService('test service')
- wait_for_service('test service')
- with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
-- ret = yaml.load(fp)
-+ ret = yaml.safe_load(fp)
- assert ret['retcode'] == 0, ret
-
- @with_system_user('test-runas-admin', on_existing='delete', delete=True,
-@@ -602,7 +602,7 @@ class RunAsTest(ModuleCase):
- win32serviceutil.StartService('test service')
- wait_for_service('test service')
- with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
-- ret = yaml.load(fp)
-+ ret = yaml.safe_load(fp)
- assert ret['retcode'] == 0, ret
-
- def test_runas_service_system_user(self):
-@@ -621,5 +621,5 @@ class RunAsTest(ModuleCase):
- win32serviceutil.StartService('test service')
- wait_for_service('test service')
- with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
-- ret = yaml.load(fp)
-+ ret = yaml.safe_load(fp)
- assert ret['retcode'] == 0, ret
-diff --git a/tests/unit/utils/test_schema.py b/tests/unit/utils/test_schema.py
-index a07fcbab6b..79072bb89e 100644
---- a/tests/unit/utils/test_schema.py
-+++ b/tests/unit/utils/test_schema.py
-@@ -5,6 +5,7 @@
-
- # Import python libs
- from __future__ import absolute_import, print_function, unicode_literals
-+import sys
- import copy
-
- # Import Salt Testing Libs
-@@ -506,10 +507,7 @@ class ConfigTestCase(TestCase):
- {'personal_access_token': 'foo'},
- Requirements.serialize()
- )
-- if JSONSCHEMA_VERSION >= _LooseVersion('3.0.0'):
-- self.assertIn('\'ssh_key_file\' is a required property', excinfo.exception.message)
-- else:
-- self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
-+ self.assertIn('\'ssh_key_file\' is a required property', excinfo.exception.message)
-
- def test_boolean_config(self):
- item = schema.BooleanItem(title='Hungry', description='Are you hungry?')
-@@ -1733,10 +1731,11 @@ class ConfigTestCase(TestCase):
-
- with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
- jsonschema.validate({'item': {'sides': '4', 'color': 'blue'}}, TestConf.serialize())
-- if JSONSCHEMA_VERSION >= _LooseVersion('3.0.0'):
-- self.assertIn('\'4\' is not of type \'boolean\'', excinfo.exception.message)
-+
-+ if sys.hexversion >= 0x03000000:
-+ self.assertIn("'4' is not of type 'boolean'", excinfo.exception.message)
- else:
-- self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
-+ self.assertIn("u'4' is not of type u'boolean'", excinfo.exception.message)
-
- class TestConf(schema.Schema):
- item = schema.DictItem(
-@@ -1839,10 +1838,10 @@ class ConfigTestCase(TestCase):
-
- with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
- jsonschema.validate({'item': ['maybe']}, TestConf.serialize())
-- if JSONSCHEMA_VERSION >= _LooseVersion('3.0.0'):
-- self.assertIn('\'maybe\' is not one of [\'yes\']', excinfo.exception.message)
-+ if sys.hexversion >= 0x03000000:
-+ self.assertIn("'maybe' is not one of ['yes']", excinfo.exception.message)
- else:
-- self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
-+ self.assertIn("u'maybe' is not one of [u'yes']", excinfo.exception.message)
-
- with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
- jsonschema.validate({'item': 2}, TestConf.serialize())
-@@ -1894,10 +1893,10 @@ class ConfigTestCase(TestCase):
-
- with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
- jsonschema.validate({'item': ['maybe']}, TestConf.serialize())
-- if JSONSCHEMA_VERSION >= _LooseVersion('3.0.0'):
-- self.assertIn('\'maybe\' is not one of [\'yes\']', excinfo.exception.message)
-+ if sys.hexversion >= 0x03000000:
-+ self.assertIn("'maybe' is not one of ['yes']", excinfo.exception.message)
- else:
-- self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
-+ self.assertIn("u'maybe' is not one of [u'yes']", excinfo.exception.message)
-
- with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
- jsonschema.validate({'item': 2}, TestConf.serialize())
diff --git a/app-admin/salt/files/salt-2019.2.2-workaround-broken-mock-on-py2.patch b/app-admin/salt/files/salt-2019.2.2-workaround-broken-mock-on-py2.patch
deleted file mode 100644
index 8d28fe7f16a6..000000000000
--- a/app-admin/salt/files/salt-2019.2.2-workaround-broken-mock-on-py2.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/tests/unit/utils/test_network.py b/tests/unit/utils/test_network.py
-index af5cbbab2b..15236c127a 100644
---- a/tests/unit/utils/test_network.py
-+++ b/tests/unit/utils/test_network.py
-@@ -1,6 +1,7 @@
- # -*- coding: utf-8 -*-
- # Import Python libs
- from __future__ import absolute_import, unicode_literals, print_function
-+import sys
- import logging
- import socket
- import textwrap
-@@ -249,6 +250,7 @@ class NetworkTestCase(TestCase):
- log.error('bad host_port value: "%s" failed to trigger ValueError exception', host_port)
- raise _e_
-
-+ @skipIf(sys.hexversion < 0x03000000, "https://github.com/testing-cabal/mock/issues/323")
- def test_dns_check(self):
- hosts = [
- {'host': '10.10.0.3',
-@@ -302,6 +304,7 @@ class NetworkTestCase(TestCase):
- "Invalid or unresolveable address"):
- network.dns_check('foo', '1')
-
-+ @skipIf(sys.hexversion < 0x03000000, "https://github.com/testing-cabal/mock/issues/323")
- def test_test_addrs(self):
- # subset of real data from getaddrinfo against saltstack.com
- addrinfo = [(30, 2, 17, '', ('2600:9000:21eb:a800:8:1031:abc0:93a1', 0, 0, 0)),
diff --git a/app-admin/salt/files/salt-3000.1-tests.patch b/app-admin/salt/files/salt-3000.1-tests.patch
deleted file mode 100644
index 12a2e7822b94..000000000000
--- a/app-admin/salt/files/salt-3000.1-tests.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-diff --git a/tests/unit/fileserver/test_roots.py b/tests/unit/fileserver/test_roots.py
-index e0d939a086..33a9b6dc35 100644
---- a/tests/unit/fileserver/test_roots.py
-+++ b/tests/unit/fileserver/test_roots.py
-@@ -11,7 +11,7 @@ import tempfile
-
- # Import Salt Testing libs
- from tests.support.mixins import AdaptedConfigurationTestCaseMixin, LoaderModuleMockMixin
--from tests.support.unit import TestCase
-+from tests.support.unit import TestCase, skipIf
- from tests.support.mock import patch
- from tests.support.runtests import RUNTIME_VARS
-
-@@ -165,6 +165,7 @@ class RootsTest(TestCase, AdaptedConfigurationTestCaseMixin, LoaderModuleMockMix
- self.assertIn('empty_dir', ret)
- self.assertIn(UNICODE_DIRNAME, ret)
-
-+ @skipIf(True, "doesn't like sandbox")
- def test_symlink_list(self):
- orig_file_roots = self.opts['file_roots']
- try:
-diff --git a/tests/unit/modules/test_dockermod.py b/tests/unit/modules/test_dockermod.py
-index 191bfc123f..1956127f0b 100644
---- a/tests/unit/modules/test_dockermod.py
-+++ b/tests/unit/modules/test_dockermod.py
-@@ -793,6 +793,7 @@ class DockerTestCase(TestCase, LoaderModuleMockMixin):
- },
- ret)
-
-+ @skipIf(True, "Doesn't work with sandbox")
- def test_call_success(self):
- '''
- test module calling inside containers
-diff --git a/tests/unit/states/test_pip_state.py b/tests/unit/states/test_pip_state.py
-index 13c158b309..27e10e6161 100644
---- a/tests/unit/states/test_pip_state.py
-+++ b/tests/unit/states/test_pip_state.py
-@@ -384,6 +384,7 @@ class PipStateUtilsTest(TestCase):
-
-
- @skipIf(salt.utils.path.which_bin(KNOWN_BINARY_NAMES) is None, 'virtualenv not installed')
-+@skipIf(True, "Needs network access")
- class PipStateInstallationErrorTest(TestCase):
-
- def test_importable_installation_error(self):
-diff --git a/tests/unit/utils/test_jinja.py b/tests/unit/utils/test_jinja.py
-index f48fa9d42c..bb57929cfa 100644
---- a/tests/unit/utils/test_jinja.py
-+++ b/tests/unit/utils/test_jinja.py
-@@ -1268,7 +1268,7 @@ class TestCustomExtensions(TestCase):
- dict(opts=self.local_opts, saltenv='test', salt=self.local_salt))
- self.assertEqual(rendered, '16777216')
-
-- @flaky
-+ @skipIf("True", "Needs network access")
- def test_http_query(self):
- '''
- Test the `http_query` Jinja filter.
diff --git a/app-admin/salt/files/salt-3000.2-py38-abc.patch b/app-admin/salt/files/salt-3000.2-py38-abc.patch
deleted file mode 100644
index e9f64b664178..000000000000
--- a/app-admin/salt/files/salt-3000.2-py38-abc.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From 11c23a526ae926ca082ee7ad92246e085c51b8e6 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?S=C3=A9bastien=20Blaisot?= <sebastien@blaisot.org>
-Date: Fri, 17 Jan 2020 17:06:42 +0100
-Subject: [PATCH] Import abstract base classes from collection.abc in python
- 3.3+
-
----
- salt/modules/file.py | 6 +++++-
- salt/modules/win_file.py | 5 ++++-
- salt/states/file.py | 6 +++++-
- salt/utils/dictdiffer.py | 5 ++++-
- 4 files changed, 18 insertions(+), 4 deletions(-)
-
-diff --git a/salt/modules/file.py b/salt/modules/file.py
-index 771b204d63fe..d1ec5e4c295d 100644
---- a/salt/modules/file.py
-+++ b/salt/modules/file.py
-@@ -29,7 +29,11 @@
- import glob
- import hashlib
- import mmap
--from collections import Iterable, Mapping, namedtuple
-+try:
-+ from collections.abc import Iterable, Mapping
-+except ImportError:
-+ from collections import Iterable, Mapping
-+from collections import namedtuple
- from functools import reduce # pylint: disable=redefined-builtin
-
- # pylint: disable=import-error,no-name-in-module,redefined-builtin
-diff --git a/salt/modules/win_file.py b/salt/modules/win_file.py
-index 4fd3eebcdd81..5bc983786a98 100644
---- a/salt/modules/win_file.py
-+++ b/salt/modules/win_file.py
-@@ -17,7 +17,10 @@
- import logging
- # pylint: disable=W0611
- import operator # do not remove
--from collections import Iterable, Mapping # do not remove
-+try:
-+ from collections.abc import Iterable, Mapping # do not remove
-+except ImportError:
-+ from collections import Iterable, Mapping # do not remove
- from functools import reduce # do not remove
- import datetime # do not remove.
- import tempfile # do not remove. Used in salt.modules.file.__clean_tmp
-diff --git a/salt/states/file.py b/salt/states/file.py
-index 23c3d3c53955..36231c69cff6 100644
---- a/salt/states/file.py
-+++ b/salt/states/file.py
-@@ -291,7 +291,11 @@ def run():
- import sys
- import time
- import traceback
--from collections import Iterable, Mapping, defaultdict
-+try:
-+ from collections.abc import Iterable, Mapping
-+except ImportError:
-+ from collections import Iterable, Mapping
-+from collections import defaultdict
- from datetime import datetime, date # python3 problem in the making?
-
- # Import salt libs
-diff --git a/salt/utils/dictdiffer.py b/salt/utils/dictdiffer.py
-index 30e87e885436..da6bd5ed944c 100644
---- a/salt/utils/dictdiffer.py
-+++ b/salt/utils/dictdiffer.py
-@@ -13,7 +13,10 @@
- '''
- from __future__ import absolute_import, print_function, unicode_literals
- import copy
--from collections import Mapping
-+try:
-+ from collections.abc import Mapping
-+except ImportError:
-+ from collections import Mapping
- from salt.ext import six
-
-
diff --git a/app-admin/salt/files/salt-3000.2-py38-logwarn.patch b/app-admin/salt/files/salt-3000.2-py38-logwarn.patch
deleted file mode 100644
index e77d2376ce1b..000000000000
--- a/app-admin/salt/files/salt-3000.2-py38-logwarn.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-diff --git a/salt/cloud/clouds/ec2.py b/salt/cloud/clouds/ec2.py
-index 68f752cb2d..fa2b96499d 100644
---- a/salt/cloud/clouds/ec2.py
-+++ b/salt/cloud/clouds/ec2.py
-@@ -4901,7 +4901,7 @@ def get_password_data(
-
- if not HAS_M2 and not HAS_PYCRYPTO:
- if 'key' in kwargs or 'key_file' in kwargs:
-- log.warn("No crypto library is installed, can not decrypt password")
-+ log.warning("No crypto library is installed, can not decrypt password")
- return ret
-
- if 'key' not in kwargs:
-diff --git a/salt/modules/gpg.py b/salt/modules/gpg.py
-index 9dd1007c1b..47c82a7141 100644
---- a/salt/modules/gpg.py
-+++ b/salt/modules/gpg.py
-@@ -1083,7 +1083,7 @@ def verify(text=None,
-
- if trustmodel and trustmodel not in trustmodels:
- msg = 'Invalid trustmodel defined: {}. Use one of: {}'.format(trustmodel, ', '.join(trustmodels))
-- log.warn(msg)
-+ log.warning(msg)
- return {'res': False, 'message': msg}
-
- extra_args = []
-diff --git a/salt/modules/network.py b/salt/modules/network.py
-index 38e2bc326e..f3a8a714cd 100644
---- a/salt/modules/network.py
-+++ b/salt/modules/network.py
-@@ -958,7 +958,7 @@ def traceroute(host):
-
- ret.append(result)
- if not result:
-- log.warn('Cannot parse traceroute output line: %s', line)
-+ log.warning('Cannot parse traceroute output line: %s', line)
- return ret
-
-
-diff --git a/salt/modules/saltutil.py b/salt/modules/saltutil.py
-index 138a0fcf51..5f026b0f36 100644
---- a/salt/modules/saltutil.py
-+++ b/salt/modules/saltutil.py
-@@ -1096,7 +1096,7 @@ def refresh_pillar(wait=False, timeout=30):
- tag='/salt/minion/minion_pillar_refresh_complete',
- wait=timeout)
- if not event_ret or event_ret['complete'] is False:
-- log.warn("Pillar refresh did not complete within timeout %s", timeout)
-+ log.warning("Pillar refresh did not complete within timeout %s", timeout)
- return ret
-
-
-diff --git a/salt/transport/tcp.py b/salt/transport/tcp.py
-index 12ef24e86f..e83d1c927f 100644
---- a/salt/transport/tcp.py
-+++ b/salt/transport/tcp.py
-@@ -1073,7 +1073,7 @@ class SaltMessageClient(object):
- self._connecting_future.set_result(True)
- break
- except Exception as exc: # pylint: disable=broad-except
-- log.warn('TCP Message Client encountered an exception %r', exc)
-+ log.warning('TCP Message Client encountered an exception %r', exc)
- yield salt.ext.tornado.gen.sleep(1) # TODO: backoff
- #self._connecting_future.set_exception(e)
-
-diff --git a/salt/utils/process.py b/salt/utils/process.py
-index 9626ac0cb2..18697ccf7c 100644
---- a/salt/utils/process.py
-+++ b/salt/utils/process.py
-@@ -124,7 +124,7 @@ def dup2(file1, file2):
- try:
- fno1 = file1.fileno()
- except io.UnsupportedOperation:
-- log.warn('Unsupported operation on file: %r', file1)
-+ log.warning('Unsupported operation on file: %r', file1)
- return
- if isinstance(file2, int):
- fno2 = file2
-@@ -132,7 +132,7 @@ def dup2(file1, file2):
- try:
- fno2 = file2.fileno()
- except io.UnsupportedOperation:
-- log.warn('Unsupported operation on file: %r', file2)
-+ log.warning('Unsupported operation on file: %r', file2)
- return
- os.dup2(fno1, fno2)
-
-@@ -829,13 +829,13 @@ class SignalHandlingProcess(Process):
- if child.is_running():
- child.terminate()
- except psutil.NoSuchProcess:
-- log.warn(
-+ log.warning(
- 'Unable to kill child of process %d, it does '
- 'not exist. My pid is %d',
- self.pid, os.getpid()
- )
- except psutil.NoSuchProcess:
-- log.warn(
-+ log.warning(
- 'Unable to kill children of process %d, it does not exist.'
- 'My pid is %d',
- self.pid, os.getpid()
-diff --git a/tests/integration/modules/test_state.py b/tests/integration/modules/test_state.py
-index 81b3b677b9..2f3bcaa613 100644
---- a/tests/integration/modules/test_state.py
-+++ b/tests/integration/modules/test_state.py
-@@ -2282,7 +2282,7 @@ class StateModuleTest(ModuleCase, SaltReturnAssertsMixin):
- try:
- os.remove(path)
- except OSError:
-- log.warn("Path not found: %s", path)
-+ log.warning("Path not found: %s", path)
-
- with salt.utils.files.fopen(module_path, 'w') as fp:
- fp.write('raise ImportError("No module named pip")')
diff --git a/app-admin/salt/files/salt-3000.2-py38.patch b/app-admin/salt/files/salt-3000.2-py38.patch
deleted file mode 100644
index 1c543a085b10..000000000000
--- a/app-admin/salt/files/salt-3000.2-py38.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 5259ba8ef6e5949815641edc563deab67ba68582 Mon Sep 17 00:00:00 2001
-From: Mathias Fussenegger <f.mathias@zignar.net>
-Date: Fri, 22 Nov 2019 17:05:27 +0100
-Subject: [PATCH] Remove _supported_dists import for python-3.8 support
-
-`_supported_dists` has been removed from platform in Python 3.8:
-
- https://github.com/python/cpython/commit/8b94b41ab7b12f745dea744e8940631318816935#diff-47c8e5750258a08a6dd9de3e9c3774acL267-L271
-
-This instead inlines all the values that have been there.
-
-Without this change running `salt-ssh` with Python 3.8 run into an
-import error.
----
- salt/grains/core.py | 31 +++++++++++++++++++++++++++----
- 1 file changed, 27 insertions(+), 4 deletions(-)
-
-diff --git a/salt/grains/core.py b/salt/grains/core.py
-index 04c1ae91b5f5..77694abe84f9 100644
---- a/salt/grains/core.py
-+++ b/salt/grains/core.py
-@@ -35,11 +35,34 @@
- __proxyenabled__ = ['*']
- __FQDN__ = None
-
--# Extend the default list of supported distros. This will be used for the
-+# Default list of supported distros. This will be used for the
- # /etc/DISTRO-release checking that is part of linux_distribution()
--from platform import _supported_dists
--_supported_dists += ('arch', 'mageia', 'meego', 'vmware', 'bluewhite64',
-- 'slamd64', 'ovs', 'system', 'mint', 'oracle', 'void')
-+_supported_dists = (
-+ 'SuSE',
-+ 'UnitedLinux',
-+ 'arch',
-+ 'bluewhite64',
-+ 'centos',
-+ 'debian',
-+ 'fedora',
-+ 'gentoo',
-+ 'mageia',
-+ 'mandrake',
-+ 'mandriva',
-+ 'meego',
-+ 'mint',
-+ 'oracle',
-+ 'ovs',
-+ 'redhat',
-+ 'rocks',
-+ 'slackware',
-+ 'slamd64',
-+ 'system',
-+ 'turbolinux',
-+ 'vmware',
-+ 'void',
-+ 'yellowdog',
-+)
-
- # linux_distribution deprecated in py3.7
- try:
diff --git a/app-admin/salt/files/salt-3000.2-tests.patch b/app-admin/salt/files/salt-3000.2-tests.patch
deleted file mode 100644
index a562dee5bf94..000000000000
--- a/app-admin/salt/files/salt-3000.2-tests.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- salt-3000.2.orig/tests/unit/utils/test_verify.py 2020-04-29 16:57:02.775635698 -0700
-+++ salt-3000.2/tests/unit/utils/test_verify.py 2020-04-29 16:57:58.042282147 -0700
-@@ -324,6 +324,7 @@
- self.assertTrue(os.path.exists(path))
-
-
-+@skipIf(True, "breaks under sandbox")
- class TestCleanPath(TestCase):
- '''
- salt.utils.clean_path works as expected
-@@ -366,6 +367,7 @@
- raise ctypes.WinError()
-
-
-+@skipIf(True, "breaks under sandbox")
- @skipIf(six.PY2 and salt.utils.platform.is_windows(), 'Skipped on windows py2')
- class TestCleanPathLink(TestCase):
- '''
diff --git a/app-admin/salt/files/salt-3001.1-tests.patch b/app-admin/salt/files/salt-3001.1-tests.patch
deleted file mode 100644
index ad32b611dfe2..000000000000
--- a/app-admin/salt/files/salt-3001.1-tests.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-diff --git a/tests/integration/master/test_event_return.py b/tests/integration/master/test_event_return.py
-index 1a97be0e5f..93c57f08ff 100644
---- a/tests/integration/master/test_event_return.py
-+++ b/tests/integration/master/test_event_return.py
-@@ -18,7 +18,7 @@ import time
- import salt.ext.six as six
- from salt.utils.nb_popen import NonBlockingPopen
- from saltfactories.utils.ports import get_unused_localhost_port
--from saltfactories.utils.processes.helpers import terminate_process
-+from saltfactories.utils.processes import terminate_process
- from tests.support.cli_scripts import ScriptPathMixin
- from tests.support.mixins import AdaptedConfigurationTestCaseMixin
- from tests.support.runtests import RUNTIME_VARS
-diff --git a/tests/integration/utils/testprogram.py b/tests/integration/utils/testprogram.py
-index 74bbc1cd90..be651591d1 100644
---- a/tests/integration/utils/testprogram.py
-+++ b/tests/integration/utils/testprogram.py
-@@ -30,7 +30,7 @@ import salt.utils.psutil_compat as psutils
- import salt.utils.yaml
- from salt.ext import six
- from salt.ext.six.moves import range
--from saltfactories.utils.processes.helpers import (
-+from saltfactories.utils.processes import (
- terminate_process,
- terminate_process_list,
- )
-diff --git a/tests/support/case.py b/tests/support/case.py
-index 9017027ae3..517cefb64a 100644
---- a/tests/support/case.py
-+++ b/tests/support/case.py
-@@ -25,7 +25,7 @@ import time
- from datetime import datetime, timedelta
-
- import salt.utils.files
--from saltfactories.utils.processes.helpers import terminate_process
-+from saltfactories.utils.processes import terminate_process
- from tests.support.cli_scripts import ScriptPathMixin
- from tests.support.helpers import RedirectStdStreams, requires_sshd_server
- from tests.support.mixins import ( # pylint: disable=unused-import
-diff --git a/tests/support/helpers.py b/tests/support/helpers.py
-index bae2dceff4..93fbb66742 100644
---- a/tests/support/helpers.py
-+++ b/tests/support/helpers.py
-@@ -42,7 +42,7 @@ import salt.utils.versions
- from salt.ext import six
- from salt.ext.six.moves import builtins, range
- from saltfactories.utils.ports import get_unused_localhost_port
--from saltfactories.utils.processes.bases import ProcessResult
-+from saltfactories.utils.processes import ProcessResult
- from tests.support.mock import patch
- from tests.support.runtests import RUNTIME_VARS
- from tests.support.sminion import create_sminion
-@@ -1674,7 +1674,7 @@ class VirtualEnv(object):
- kwargs.setdefault("stderr", subprocess.PIPE)
- kwargs.setdefault("universal_newlines", True)
- proc = subprocess.run(args, check=False, **kwargs)
-- ret = ProcessResult(proc.returncode, proc.stdout, proc.stderr, proc.args)
-+ ret = ProcessResult(proc.returncode, proc.stdout, proc.stderr, cmdline=proc.args)
- log.debug(ret)
- if check is True:
- proc.check_returncode()
-diff --git a/tests/support/paths.py b/tests/support/paths.py
-index 1e1e081dc4..981aa54eb7 100644
---- a/tests/support/paths.py
-+++ b/tests/support/paths.py
-@@ -49,14 +49,12 @@ if TESTS_DIR not in sys.path:
- sys.path.insert(1, TESTS_DIR)
-
- SYS_TMP_DIR = os.path.abspath(
-- os.path.realpath(
-- # Avoid ${TMPDIR} and gettempdir() on MacOS as they yield a base path too long
-- # for unix sockets: ``error: AF_UNIX path too long``
-- # Gentoo Portage prefers ebuild tests are rooted in ${TMPDIR}
-- os.environ.get("TMPDIR", tempfile.gettempdir())
-- if not sys.platform.startswith("darwin")
-- else "/tmp"
-- )
-+ # Avoid ${TMPDIR} and gettempdir() on MacOS as they yield a base path too long
-+ # for unix sockets: ``error: AF_UNIX path too long``
-+ # Gentoo Portage prefers ebuild tests are rooted in ${TMPDIR}
-+ os.environ.get("TMPDIR", tempfile.gettempdir())
-+ if not sys.platform.startswith("darwin")
-+ else "/tmp"
- )
- TMP = os.path.join(SYS_TMP_DIR, "salt-tests-tmpdir")
- TMP_ROOT_DIR = os.path.join(TMP, "rootdir")
-diff --git a/tests/support/processes.py b/tests/support/processes.py
-index 4f264862a4..7c93e48368 100644
---- a/tests/support/processes.py
-+++ b/tests/support/processes.py
-@@ -14,7 +14,7 @@ from __future__ import absolute_import
-
- import logging
-
--from saltfactories.utils.processes.helpers import ( # pylint: disable=unused-import
-+from saltfactories.utils.processes import ( # pylint: disable=unused-import
- collect_child_processes,
- terminate_process,
- terminate_process_list,
-diff --git a/tests/unit/utils/scheduler/base.py b/tests/unit/utils/scheduler/base.py
-index 5d7f161eb5..286e047e40 100644
---- a/tests/unit/utils/scheduler/base.py
-+++ b/tests/unit/utils/scheduler/base.py
-@@ -14,7 +14,7 @@ import salt.utils.platform
- import salt.utils.schedule
- from salt.modules.test import ping
- from salt.utils.process import SubprocessList
--from saltfactories.utils.processes.helpers import terminate_process
-+from saltfactories.utils.processes import terminate_process
- from tests.support.mixins import SaltReturnAssertsMixin
- from tests.support.mock import MagicMock, patch
- from tests.support.runtests import RUNTIME_VARS
-diff --git a/tests/unit/utils/test_event.py b/tests/unit/utils/test_event.py
-index 9a3b1c428d..dfcf1c5275 100644
---- a/tests/unit/utils/test_event.py
-+++ b/tests/unit/utils/test_event.py
-@@ -21,7 +21,7 @@ import zmq
- import zmq.eventloop.ioloop
- from salt.ext.six.moves import range
- from salt.ext.tornado.testing import AsyncTestCase
--from saltfactories.utils.processes.helpers import terminate_process
-+from saltfactories.utils.processes import terminate_process
- from tests.support.events import eventpublisher_process, eventsender_process
- from tests.support.helpers import slowTest
- from tests.support.runtests import RUNTIME_VARS
-diff --git a/tests/unit/utils/test_verify.py b/tests/unit/utils/test_verify.py
-index 5662cf621b..0339c353dc 100644
---- a/tests/unit/utils/test_verify.py
-+++ b/tests/unit/utils/test_verify.py
-@@ -343,7 +343,7 @@ class TestCleanPath(TestCase):
- def test_clean_path_valid(self):
- path_a = os.path.join(self.tmpdir, "foo")
- path_b = os.path.join(self.tmpdir, "foo", "bar")
-- assert clean_path(path_a, path_b) == path_b
-+ assert clean_path(path_a, path_b) == os.path.realpath(path_b)
-
- def test_clean_path_invalid(self):
- path_a = os.path.join(self.tmpdir, "foo")
-@@ -398,10 +398,10 @@ class TestCleanPathLink(TestCase):
- test_path = os.path.join(self.from_path, "test")
- expect_path = os.path.join(self.to_path, "test")
- ret = clean_path(self.from_path, test_path)
-- assert ret == expect_path, "{} is not {}".format(ret, expect_path)
-+ assert ret == os.path.realpath(expect_path), "{} is not {}".format(ret, expect_path)
-
- def test_clean_path_symlinked_tgt(self):
- test_path = os.path.join(self.to_path, "test")
- expect_path = os.path.join(self.to_path, "test")
- ret = clean_path(self.from_path, test_path)
-- assert ret == expect_path, "{} is not {}".format(ret, expect_path)
-+ assert ret == os.path.realpath(expect_path), "{} is not {}".format(ret, expect_path)
diff --git a/app-admin/salt/files/salt-3002-tests.patch b/app-admin/salt/files/salt-3002-tests.patch
new file mode 100644
index 000000000000..88e1ce590568
--- /dev/null
+++ b/app-admin/salt/files/salt-3002-tests.patch
@@ -0,0 +1,27 @@
+diff --git a/tests/unit/utils/test_verify.py b/tests/unit/utils/test_verify.py
+index 5662cf621b..16aa6d08da 100644
+--- a/tests/unit/utils/test_verify.py
++++ b/tests/unit/utils/test_verify.py
+@@ -329,6 +329,7 @@ class TestVerifyLog(TestCase):
+ self.assertTrue(os.path.exists(path))
+
+
++@skipIf(True, "skipping since temp dir is a symlink")
+ class TestCleanPath(TestCase):
+ """
+ salt.utils.clean_path works as expected
+@@ -394,12 +395,14 @@ class TestCleanPathLink(TestCase):
+ def tearDown(self):
+ shutil.rmtree(self.tmpdir)
+
++ @skipIf(True, "skipping since temp dir is a symlink")
+ def test_clean_path_symlinked_src(self):
+ test_path = os.path.join(self.from_path, "test")
+ expect_path = os.path.join(self.to_path, "test")
+ ret = clean_path(self.from_path, test_path)
+ assert ret == expect_path, "{} is not {}".format(ret, expect_path)
+
++ @skipIf(True, "skipping since temp dir is a symlink")
+ def test_clean_path_symlinked_tgt(self):
+ test_path = os.path.join(self.to_path, "test")
+ expect_path = os.path.join(self.to_path, "test")
diff --git a/app-admin/salt/files/salt-3003-gentoolkit-revdep.patch b/app-admin/salt/files/salt-3003-gentoolkit-revdep.patch
new file mode 100644
index 000000000000..f73b5a8790fd
--- /dev/null
+++ b/app-admin/salt/files/salt-3003-gentoolkit-revdep.patch
@@ -0,0 +1,13 @@
+diff --git a/salt/modules/gentoolkitmod.py b/salt/modules/gentoolkitmod.py
+index cc78c37114..f0949d19a8 100644
+--- a/salt/modules/gentoolkitmod.py
++++ b/salt/modules/gentoolkitmod.py
+@@ -49,7 +49,7 @@ def revdep_rebuild(lib=None):
+
+ salt '*' gentoolkit.revdep_rebuild
+ """
+- cmd = "revdep-rebuild -i --quiet --no-progress"
++ cmd = "revdep-rebuild -i --quiet"
+ if lib is not None:
+ cmd += " --library={0}".format(lib)
+ return __salt__["cmd.retcode"](cmd, python_shell=False) == 0
diff --git a/app-admin/salt/files/salt-3003.1-tests.patch b/app-admin/salt/files/salt-3003.1-tests.patch
new file mode 100644
index 000000000000..9749730ddb09
--- /dev/null
+++ b/app-admin/salt/files/salt-3003.1-tests.patch
@@ -0,0 +1,25 @@
+diff --git a/tests/integration/files/file/base/_modules/runtests_helpers.py b/tests/integration/files/file/base/_modules/runtests_helpers.py
+index 3ee0e2da5f..abf9b71431 100644
+--- a/tests/integration/files/file/base/_modules/runtests_helpers.py
++++ b/tests/integration/files/file/base/_modules/runtests_helpers.py
+@@ -27,7 +27,7 @@ except ImportError:
+ else "/tmp"
+ )
+ # This tempdir path is defined on tests.integration.__init__
+- TMP = os.path.join(SYS_TMP_DIR, "salt-tests-tmpdir")
++ TMP = os.path.join(SYS_TMP_DIR, "salt-t")
+
+ class RUNTIME_VARS:
+ TMP = TMP
+diff --git a/tests/unit/ext/test_ipaddress.py b/tests/unit/ext/test_ipaddress.py
+index 4fd87d1c3f..43306ba8f4 100644
+--- a/tests/unit/ext/test_ipaddress.py
++++ b/tests/unit/ext/test_ipaddress.py
+@@ -137,6 +137,7 @@ class CommonTestMixin:
+
+
+ class CommonTestMixin_v4(CommonTestMixin):
++ @pytest.mark.skipif(sys.hexversion >= 0x03090000, reason="leading zeros disallowed in 3.9+")
+ def test_leading_zeros(self):
+ self.assertInstancesEqual("000.000.000.000", "0.0.0.0")
+ self.assertInstancesEqual("192.168.000.001", "192.168.0.1")
diff --git a/app-admin/salt/files/salt-3005-tests.patch b/app-admin/salt/files/salt-3005-tests.patch
new file mode 100644
index 000000000000..f170ef7dcafd
--- /dev/null
+++ b/app-admin/salt/files/salt-3005-tests.patch
@@ -0,0 +1,94 @@
+diff --git a/tests/conftest.py b/tests/conftest.py
+index 24ecf57e04..babc7ced90 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -684,8 +684,6 @@ def salt_factories_config():
+ """
+ return {
+ "code_dir": str(CODE_DIR),
+- "inject_coverage": MAYBE_RUN_COVERAGE,
+- "inject_sitecustomize": MAYBE_RUN_COVERAGE,
+ "start_timeout": 120
+ if (os.environ.get("JENKINS_URL") or os.environ.get("CI"))
+ else 60,
+diff --git a/tests/pytests/unit/_logging/handlers/test_deferred_stream_handler.py b/tests/pytests/unit/_logging/handlers/test_deferred_stream_handler.py
+index 230da8abc8..f6f1a70ce4 100644
+--- a/tests/pytests/unit/_logging/handlers/test_deferred_stream_handler.py
++++ b/tests/pytests/unit/_logging/handlers/test_deferred_stream_handler.py
+@@ -62,6 +62,7 @@ def _deferred_write_on_flush_proc_target():
+ assert stds.stderr == "Foo\nBar\n"
+
+
++@pytest.mark.skip("doesn't work with sandbox")
+ def test_sync_with_handlers():
+ proc = multiprocessing.Process(target=_sync_with_handlers_proc_target)
+ proc.start()
+@@ -69,6 +70,7 @@ def test_sync_with_handlers():
+ assert proc.exitcode == 0
+
+
++@pytest.mark.skip("doesn't work with sandbox")
+ def test_deferred_write_on_flush():
+ proc = multiprocessing.Process(target=_deferred_write_on_flush_proc_target)
+ proc.start()
+diff --git a/tests/pytests/unit/modules/test_portage_config.py b/tests/pytests/unit/modules/test_portage_config.py
+index 5cc6b90596..f344526909 100644
+--- a/tests/pytests/unit/modules/test_portage_config.py
++++ b/tests/pytests/unit/modules/test_portage_config.py
+@@ -53,7 +53,7 @@ def test_enforce_nice_config(tmp_path):
+ ("use", ["apple", "-banana", "ananas", "orange"]),
+ ]
+
+- base_path = str(tmp_path / "/package.{0}")
++ base_path = str(f"{tmp_path}/package.{{0}}")
+
+ def make_line(atom, addition):
+ return atom + (" " + addition if addition != "" else "") + "\n"
+@@ -72,14 +72,3 @@ def test_enforce_nice_config(tmp_path):
+ portage_config, "_merge_flags", lambda l1, l2, _: list(set(l1 + l2))
+ ):
+ portage_config.enforce_nice_config()
+-
+- for typ, additions in supported:
+- for atom, file_name in atoms:
+- with salt.utils.files.fopen(
+- base_path.format(typ) + "/" + file_name, "r"
+- ) as fh:
+- for line in fh:
+- for atom in line:
+- assert atom not in line
+- for addition in additions:
+- assert addition not in line
+diff --git a/tests/support/cli_scripts.py b/tests/support/cli_scripts.py
+index 270af75d4b..50c08f4ed2 100644
+--- a/tests/support/cli_scripts.py
++++ b/tests/support/cli_scripts.py
+@@ -32,8 +32,6 @@ def get_script_path(bin_dir, script_name):
+ bin_dir=bin_dir,
+ script_name=script_name,
+ code_dir=RUNTIME_VARS.CODE_DIR,
+- inject_coverage="COVERAGE_PROCESS_START" in os.environ,
+- inject_sitecustomize="COVERAGE_PROCESS_START" in os.environ,
+ )
+ log.info("Returning script path %r", script_path)
+ return script_path
+diff --git a/tests/unit/utils/test_schema.py b/tests/unit/utils/test_schema.py
+index 8c648f5288..ce5715a562 100644
+--- a/tests/unit/utils/test_schema.py
++++ b/tests/unit/utils/test_schema.py
+@@ -873,6 +873,7 @@ class ConfigTestCase(TestCase):
+ )
+
+ @skipIf(HAS_JSONSCHEMA is False, "The 'jsonschema' library is missing")
++ @skipIf(True, "Does not work with sandbox")
+ def test_hostname_config_validation(self):
+ class TestConf(schema.Schema):
+ item = schema.HostnameItem(title="Item", description="Item description")
+@@ -2099,6 +2100,7 @@ class ConfigTestCase(TestCase):
+ self.assertEqual(item.serialize(), {"not": item.item.serialize()})
+
+ @skipIf(HAS_JSONSCHEMA is False, "The 'jsonschema' library is missing")
++ @skipIf(True, "Does not work with sandbox")
+ def test_not_config_validation(self):
+ class TestConf(schema.Schema):
+ item = schema.ArrayItem(
diff --git a/app-admin/salt/files/salt-3005.1-importlib-metadata-5-r1.patch b/app-admin/salt/files/salt-3005.1-importlib-metadata-5-r1.patch
new file mode 100644
index 000000000000..c4c8056c1a6a
--- /dev/null
+++ b/app-admin/salt/files/salt-3005.1-importlib-metadata-5-r1.patch
@@ -0,0 +1,29 @@
+diff --git a/salt/utils/entrypoints.py b/salt/utils/entrypoints.py
+index 3effa0b494..9452878ade 100644
+--- a/salt/utils/entrypoints.py
++++ b/salt/utils/entrypoints.py
+@@ -38,13 +38,20 @@ def iter_entry_points(group, name=None):
+ entry_points_listing = []
+ entry_points = importlib_metadata.entry_points()
+
+- for entry_point_group, entry_points_list in entry_points.items():
+- if entry_point_group != group:
+- continue
+- for entry_point in entry_points_list:
++ try:
++ for entry_point in entry_points.select(group=group):
+ if name is not None and entry_point.name != name:
+ continue
+ entry_points_listing.append(entry_point)
++ except AttributeError:
++ # importlib-metadata<5.0.0
++ for entry_point_group, entry_points_list in entry_points.items():
++ if entry_point_group != group:
++ continue
++ for entry_point in entry_points_list:
++ if name is not None and entry_point.name != name:
++ continue
++ entry_points_listing.append(entry_point)
+
+ return entry_points_listing
+
diff --git a/app-admin/salt/files/salt-3005.1-modules-file-python-3.11-host.patch b/app-admin/salt/files/salt-3005.1-modules-file-python-3.11-host.patch
new file mode 100644
index 000000000000..2e9be8db18c0
--- /dev/null
+++ b/app-admin/salt/files/salt-3005.1-modules-file-python-3.11-host.patch
@@ -0,0 +1,123 @@
+diff --git a/salt/modules/file.py b/salt/modules/file.py
+index f39d618203..93eeaf312e 100644
+--- a/salt/modules/file.py
++++ b/salt/modules/file.py
+@@ -16,7 +16,6 @@ import hashlib
+ import itertools
+ import logging
+ import mmap
+-import operator
+ import os
+ import re
+ import shutil
+@@ -28,7 +27,6 @@ import time
+ import urllib.parse
+ from collections import namedtuple
+ from collections.abc import Iterable, Mapping
+-from functools import reduce
+
+ import salt.utils.args
+ import salt.utils.atomicfile
+@@ -1622,38 +1620,38 @@ def comment_line(path, regex, char="#", cmnt=True, backup=".bak"):
+
+ def _get_flags(flags):
+ """
+- Return an integer appropriate for use as a flag for the re module from a
+- list of human-readable strings
++ Return the names of the Regex flags that correspond to flags
+
+ .. code-block:: python
+
+- >>> _get_flags(['MULTILINE', 'IGNORECASE'])
+- 10
++ >>> _get_flags(['IGNORECASE', 'MULTILINE'])
++ re.IGNORECASE|re.MULTILINE
+ >>> _get_flags('MULTILINE')
+- 8
+- >>> _get_flags(2)
+- 2
++ re.MULTILINE
++ >>> _get_flags(8)
++ re.MULTILINE
++ >>> _get_flags(re.IGNORECASE)
++ re.IGNORECASE
+ """
+- if isinstance(flags, str):
++ if isinstance(flags, re.RegexFlag):
++ return flags
++ elif isinstance(flags, int):
++ return re.RegexFlag(flags)
++ elif isinstance(flags, str):
+ flags = [flags]
+
+ if isinstance(flags, Iterable) and not isinstance(flags, Mapping):
+- _flags_acc = [0] # An initial 0 avoids resucing on empty list, an error
++ _flags = re.RegexFlag(0)
+ for flag in flags:
+- _flag = getattr(re, str(flag).upper())
+-
+- if not isinstance(_flag, int):
+- raise SaltInvocationError("Invalid re flag given: {}".format(flag))
+-
+- _flags_acc.append(_flag)
+-
+- return reduce(operator.__or__, _flags_acc)
+- elif isinstance(flags, int):
+- return flags
++ _flag = getattr(re.RegexFlag, str(flag).upper(), None)
++ if not _flag:
++ raise CommandExecutionError(f"Invalid re flag given: {flag}")
++ _flags |= _flag
++ return _flags
+ else:
+- raise SaltInvocationError(
+- 'Invalid re flags: "{}", must be given either as a single flag '
+- "string, a list of strings, or as an integer".format(flags)
++ raise CommandExecutionError(
++ f'Invalid re flags: "{flags}", must be given either as a single flag '
++ "string, a list of strings, as an integer, or as an re flag"
+ )
+
+
+@@ -2513,8 +2511,8 @@ def replace(
+ "Only one of append and prepend_if_not_found is permitted"
+ )
+
+- flags_num = _get_flags(flags)
+- cpattern = re.compile(salt.utils.stringutils.to_bytes(pattern), flags_num)
++ re_flags = _get_flags(flags)
++ cpattern = re.compile(salt.utils.stringutils.to_bytes(pattern), re_flags)
+ filesize = os.path.getsize(path)
+ if bufsize == "file":
+ bufsize = filesize
+@@ -2582,7 +2580,7 @@ def replace(
+ "^{}($|(?=\r\n))".format(re.escape(content))
+ ),
+ r_data,
+- flags=flags_num,
++ flags=re_flags,
+ ):
+ # Content was found, so set found.
+ found = True
+@@ -3132,7 +3130,11 @@ def search(path, pattern, flags=8, bufsize=1, ignore_if_missing=False, multiline
+ salt '*' file.search /etc/crontab 'mymaintenance.sh'
+ """
+ if multiline:
+- flags = _add_flags(flags, "MULTILINE")
++ re_flags = _add_flags(flags, "MULTILINE")
++ else:
++ re_flags = _get_flags(flags)
++
++ if re.RegexFlag.MULTILINE in re_flags:
+ bufsize = "file"
+
+ # This function wraps file.replace on purpose in order to enforce
+@@ -3142,7 +3144,7 @@ def search(path, pattern, flags=8, bufsize=1, ignore_if_missing=False, multiline
+ path,
+ pattern,
+ "",
+- flags=flags,
++ flags=re_flags,
+ bufsize=bufsize,
+ dry_run=True,
+ search_only=True,
diff --git a/app-admin/salt/files/salt-3005.1-no-entry-points.patch b/app-admin/salt/files/salt-3005.1-no-entry-points.patch
new file mode 100644
index 000000000000..5d1da8f751e4
--- /dev/null
+++ b/app-admin/salt/files/salt-3005.1-no-entry-points.patch
@@ -0,0 +1,13 @@
+diff --git a/setup.py b/setup.py
+index bd11ff95f7..3b83f7b6ff 100755
+--- a/setup.py
++++ b/setup.py
+@@ -1173,7 +1173,7 @@ class SaltDistribution(distutils.dist.Distribution):
+ return scripts
+
+ @property
+- def _property_entry_points(self):
++ def _property_entry_points_disabled(self):
+ entrypoints = {
+ "pyinstaller40": [
+ "hook-dirs = salt.utils.pyinstaller:get_hook_dirs",
diff --git a/app-admin/salt/files/salt-3005.1-tests.patch b/app-admin/salt/files/salt-3005.1-tests.patch
new file mode 100644
index 000000000000..101574bdd303
--- /dev/null
+++ b/app-admin/salt/files/salt-3005.1-tests.patch
@@ -0,0 +1,40 @@
+diff --git a/tests/unit/utils/test_schema.py b/tests/unit/utils/test_schema.py
+index 8c648f5288..5886813e28 100644
+--- a/tests/unit/utils/test_schema.py
++++ b/tests/unit/utils/test_schema.py
+@@ -528,7 +528,7 @@ class ConfigTestCase(TestCase):
+ jsonschema.validate(
+ {"personal_access_token": "foo"}, Requirements.serialize()
+ )
+- if JSONSCHEMA_VERSION >= _LooseVersion("3.0.0"):
++ if JSONSCHEMA_VERSION >= _LooseVersion("3.0.0") and JSONSCHEMA_VERSION < _LooseVersion("4.17.0"):
+ self.assertIn(
+ "'ssh_key_file' is a required property", excinfo.exception.message
+ )
+@@ -1851,7 +1851,7 @@ class ConfigTestCase(TestCase):
+ jsonschema.validate(
+ {"item": {"sides": "4", "color": "blue"}}, TestConf.serialize()
+ )
+- if JSONSCHEMA_VERSION >= _LooseVersion("3.0.0"):
++ if JSONSCHEMA_VERSION >= _LooseVersion("3.0.0") and JSONSCHEMA_VERSION < _LooseVersion("4.17.0"):
+ self.assertIn("'4'", excinfo.exception.message)
+ self.assertIn("is not of type", excinfo.exception.message)
+ self.assertIn("'boolean'", excinfo.exception.message)
+@@ -1974,7 +1974,7 @@ class ConfigTestCase(TestCase):
+
+ with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
+ jsonschema.validate({"item": ["maybe"]}, TestConf.serialize())
+- if JSONSCHEMA_VERSION >= _LooseVersion("3.0.0"):
++ if JSONSCHEMA_VERSION >= _LooseVersion("3.0.0") and JSONSCHEMA_VERSION < _LooseVersion("4.17.0"):
+ self.assertIn("'maybe'", excinfo.exception.message)
+ self.assertIn("is not one of", excinfo.exception.message)
+ self.assertIn("'yes'", excinfo.exception.message)
+@@ -2036,7 +2036,7 @@ class ConfigTestCase(TestCase):
+
+ with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
+ jsonschema.validate({"item": ["maybe"]}, TestConf.serialize())
+- if JSONSCHEMA_VERSION >= _LooseVersion("3.0.0"):
++ if JSONSCHEMA_VERSION >= _LooseVersion("3.0.0") and JSONSCHEMA_VERSION < _LooseVersion("4.17.0"):
+ self.assertIn("'maybe'", excinfo.exception.message)
+ self.assertIn("is not one of", excinfo.exception.message)
+ self.assertIn("'yes'", excinfo.exception.message)
diff --git a/app-admin/salt/files/salt-3006.2-tests.patch b/app-admin/salt/files/salt-3006.2-tests.patch
new file mode 100644
index 000000000000..abec5157df30
--- /dev/null
+++ b/app-admin/salt/files/salt-3006.2-tests.patch
@@ -0,0 +1,114 @@
+diff --git a/tests/pytests/unit/modules/dockermod/test_module.py b/tests/pytests/unit/modules/dockermod/test_module.py
+index 8fb7806497..584d416412 100644
+--- a/tests/pytests/unit/modules/dockermod/test_module.py
++++ b/tests/pytests/unit/modules/dockermod/test_module.py
+@@ -354,10 +354,6 @@ def test_update_mine():
+ mine_mock.assert_called_once()
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_list_networks():
+ """
+ test list networks.
+@@ -378,10 +374,6 @@ def test_list_networks():
+ client.networks.assert_called_once_with(names=["foo"], ids=["01234"])
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_create_network():
+ """
+ test create network.
+@@ -422,10 +414,6 @@ def test_create_network():
+ )
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_remove_network():
+ """
+ test remove network.
+@@ -444,10 +432,6 @@ def test_remove_network():
+ client.remove_network.assert_called_once_with("foo")
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_inspect_network():
+ """
+ test inspect network.
+@@ -466,10 +450,6 @@ def test_inspect_network():
+ client.inspect_network.assert_called_once_with("foo")
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_connect_container_to_network():
+ """
+ test connect_container_to_network
+@@ -491,10 +471,6 @@ def test_connect_container_to_network():
+ client.connect_container_to_network.assert_called_once_with("container", "foo")
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_disconnect_container_from_network():
+ """
+ test disconnect_container_from_network
+@@ -513,10 +489,6 @@ def test_disconnect_container_from_network():
+ client.disconnect_container_from_network.assert_called_once_with("container", "foo")
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_list_volumes():
+ """
+ test list volumes.
+@@ -539,10 +511,6 @@ def test_list_volumes():
+ )
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_create_volume():
+ """
+ test create volume.
+@@ -569,10 +537,6 @@ def test_create_volume():
+ )
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_remove_volume():
+ """
+ test remove volume.
+@@ -591,10 +555,6 @@ def test_remove_volume():
+ client.remove_volume.assert_called_once_with("foo")
+
+
+-@pytest.mark.skipif(
+- docker_mod.docker.version_info < (1, 5, 0),
+- reason="docker module must be installed to run this test or is too old. >=1.5.0",
+-)
+ def test_inspect_volume():
+ """
+ test inspect volume.
diff --git a/app-admin/salt/files/syndic-confd-1 b/app-admin/salt/files/syndic-confd-1
index d69d83fcd60d..e9c75b8bc787 100644
--- a/app-admin/salt/files/syndic-confd-1
+++ b/app-admin/salt/files/syndic-confd-1
@@ -1,5 +1,5 @@
-# /etc/conf.d/salt-minion: config file for /etc/init.d/salt-minion
+# /etc/conf.d/salt-syndic: config file for /etc/init.d/salt-syndic
-# see man pages for salt-minion or run `salt-minion --help`
+# see man pages for salt-minion or run `salt-syndic --help`
# for valid cmdline options
SALT_OPTS="--log-level=warning"
diff --git a/app-admin/salt/files/syndic-initd-4 b/app-admin/salt/files/syndic-initd-4
deleted file mode 100644
index 8908f2cfa850..000000000000
--- a/app-admin/salt/files/syndic-initd-4
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/sbin/openrc-run
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-command="/usr/bin/salt-syndic"
-command_args="${SALT_OPTS}"
-command_background="1"
-pidfile="/var/run/salt-syndic.pid"
-name="SALT syndic daemon"
-retry="20"
-
-depend() {
- use net logger
-}
diff --git a/app-admin/salt/files/syndic-initd-5 b/app-admin/salt/files/syndic-initd-5
new file mode 100644
index 000000000000..992cacb3f0f3
--- /dev/null
+++ b/app-admin/salt/files/syndic-initd-5
@@ -0,0 +1,19 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command="/usr/bin/salt-syndic"
+command_args="${SALT_OPTS}"
+pidfile="/var/run/supervisor-salt-syndic.pid"
+daemon_pidfile="/var/run/salt-syndic.pid"
+command_args_background="--daemon --pid-file=\"${daemon_pidfile}\""
+name="SALT syndic daemon"
+retry="20"
+
+supervisor=supervise-daemon
+output_logger="logger -p daemon.info -t salt-syndic.stdout --"
+error_logger="logger -p daemon.err -t salt-syndic.error --"
+
+depend() {
+ use net logger
+}
diff --git a/app-admin/salt/metadata.xml b/app-admin/salt/metadata.xml
index 91b468848999..4e6f05022cda 100644
--- a/app-admin/salt/metadata.xml
+++ b/app-admin/salt/metadata.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>chutzpah@gentoo.org</email>
@@ -24,16 +24,15 @@ backbone of cloud and data center management.
<flag name="cheetah">Enable support for <pkg>dev-python/cheetah3</pkg></flag>
<flag name="cherrypy">Enable support for using cherrypy.</flag>
<flag name="libcloud">Enable salt-cloud support via libcloud.</flag>
- <flag name="libvirt">Support managing virtual machines with app-emulation/libvirt.</flag>
+ <flag name="libvirt">Support managing virtual machines with <pkg>app-emulation/libvirt</pkg>.</flag>
<flag name="genshi">Enable support for <pkg>dev-python/genshi</pkg></flag>
<flag name="gnupg">Enable support for gnupg via python-gnupg.</flag>
- <flag name="keyring">Enable support for keyrings via python-keyring.</flag>
<flag name="mako">Add support for using the mako template engine for parsing salt states.</flag>
<flag name="mongodb">Support returning data to a mongodb server.</flag>
<flag name="neutron">Support the OpenStack neutron network service.</flag>
<flag name="nova">Enable support for the OpenStack Nova API</flag>
<flag name="openssl">Add support for using TLS via OpenSSL.</flag>
- <flag name="portage">Add support for package state enforcement using sys-apps/portage</flag>
+ <flag name="portage">Add support for package state enforcement using <pkg>sys-apps/portage</pkg></flag>
<flag name="raet">Add support for the new RAET transport.</flag>
<flag name="redis">Support returning data to a redis database.</flag>
<flag name="zeromq">Add support for the zeromq transport.</flag>
diff --git a/app-admin/salt/salt-2019.2.5-r1.ebuild b/app-admin/salt/salt-2019.2.5-r1.ebuild
deleted file mode 100644
index e39bedf18983..000000000000
--- a/app-admin/salt/salt-2019.2.5-r1.ebuild
+++ /dev/null
@@ -1,150 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-PYTHON_COMPAT=( python3_6 )
-DISTUTILS_USE_SETUPTOOLS=bdepend
-inherit systemd distutils-r1
-
-DESCRIPTION="Salt is a remote execution and configuration manager"
-HOMEPAGE="https://www.saltstack.com/resources/community/
- https://github.com/saltstack"
-
-if [[ ${PV} == 9999* ]]; then
- inherit git-r3
- EGIT_REPO_URI="git://github.com/${PN}stack/${PN}.git"
- EGIT_BRANCH="develop"
- SRC_URI=""
-else
- SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
- KEYWORDS="~amd64 ~x86"
-fi
-
-LICENSE="Apache-2.0"
-SLOT="0"
-IUSE="cherrypy ldap libcloud libvirt gnupg keyring mako mongodb neutron nova
- openssl portage profile redis selinux test vim-syntax"
-
-RDEPEND="
- sys-apps/pciutils
- dev-python/jinja[${PYTHON_USEDEP}]
- dev-python/libnacl[${PYTHON_USEDEP}]
- >=dev-python/msgpack-0.3[${PYTHON_USEDEP}]
- <dev-python/msgpack-1.0[${PYTHON_USEDEP}]
- dev-python/pyyaml[${PYTHON_USEDEP}]
- dev-python/markupsafe[${PYTHON_USEDEP}]
- dev-python/pycryptodome[${PYTHON_USEDEP}]
- >=dev-python/pyzmq-2.2.0[${PYTHON_USEDEP}]
- >=dev-python/requests-1.0.0[${PYTHON_USEDEP}]
- dev-python/setuptools[${PYTHON_USEDEP}]
- >=www-servers/tornado-4.2.1[${PYTHON_USEDEP}]
- <www-servers/tornado-5.0[${PYTHON_USEDEP}]
- libcloud? ( >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}] )
- mako? ( dev-python/mako[${PYTHON_USEDEP}] )
- ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
- libvirt? ( dev-python/libvirt-python[${PYTHON_USEDEP}] )
- openssl? (
- dev-libs/openssl:0=[-bindist]
- dev-python/pyopenssl[${PYTHON_USEDEP}]
- )
- cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] )
- mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
- portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
- keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
- redis? ( dev-python/redis-py[${PYTHON_USEDEP}] )
- selinux? ( sec-policy/selinux-salt )
- nova? ( >=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}] )
- neutron? ( >=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}] )
- gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
- profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
- vim-syntax? ( app-vim/salt-vim )"
-BDEPEND="
- dev-python/setuptools[${PYTHON_USEDEP}]
- test? (
- >=dev-python/boto-2.32.1[${PYTHON_USEDEP}]
- >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
- >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}]
- >=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
- >=dev-python/moto-0.3.6[${PYTHON_USEDEP}]
- dev-python/pip[${PYTHON_USEDEP}]
- dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
- >=dev-python/pytest-salt-2018.12.8[${PYTHON_USEDEP}]
- <dev-python/pytest-salt-2020.0.0[${PYTHON_USEDEP}]
- dev-python/psutil[${PYTHON_USEDEP}]
- dev-python/pytest[${PYTHON_USEDEP}]
- >=dev-python/SaltTesting-2016.5.11[${PYTHON_USEDEP}]
- dev-python/virtualenv[${PYTHON_USEDEP}]
- !x86? ( >=dev-python/boto3-1.2.1[${PYTHON_USEDEP}] )
- ${RDEPEND}
- )"
-
-DOCS=( README.rst AUTHORS )
-
-RESTRICT="!test? ( test ) x86? ( test )"
-
-PATCHES=(
- "${FILESDIR}/salt-2017.7.0-dont-realpath-tmpdir.patch"
- "${FILESDIR}/salt-2019.2.0-tests.patch"
- "${FILESDIR}/salt-2019.2.0-skip-tests-that-oom-machine.patch"
- "${FILESDIR}/salt-2019.2.2-newer-deps.patch"
- "${FILESDIR}/salt-2019.2.2-workaround-broken-mock-on-py2.patch"
- "${FILESDIR}/salt-2019.2.0-remove-raet-tests.patch"
-)
-
-python_prepare() {
- # remove tests with external dependencies that may not be available
- rm tests/unit/{test_zypp_plugins.py,utils/test_extend.py} || die
- rm tests/unit/modules/test_{file,boto_{vpc,secgroup,elb}}.py || die
- rm tests/unit/states/test_boto_vpc.py || die
-
- # breaks with permission errors
- rm tests/unit/utils/test_cache.py || die
-
- # remove raet due to deps being dropped
- rm tests/unit/modules/test_raet_publish.py \
- salt/transport/raet.py \
- salt/daemons/test/test_raetkey.py || die
-
- # allow the use of the renamed msgpack
- sed -i '/^msgpack/d' requirements/base.txt || die
-}
-
-python_install_all() {
- local svc
- USE_SETUPTOOLS=1 distutils-r1_python_install_all
-
- for svc in minion master syndic api; do
- newinitd "${FILESDIR}"/${svc}-initd-4 salt-${svc}
- newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
- systemd_dounit "${FILESDIR}"/salt-${svc}.service
- done
-
- insinto /etc/${PN}
- doins -r conf/*
-}
-
-python_test() {
- local tempdir
- # testsuite likes lots of files
- ulimit -n 3072 || die
-
- # ${T} is too long a path for the tests to work
- tempdir="$(mktemp -du --tmpdir=/tmp salt-XXX)"
- mkdir "${T}/$(basename "${tempdir}")"
- mkdir "${BUILD_DIR}"/../{templates,conf/cloud.{providers,profiles,maps}.d} || die
-
- (
- cleanup() { rm -f "${tempdir}" || die; }
-
- trap cleanup EXIT
-
- addwrite "${tempdir}"
- ln -s "$(realpath --relative-to=/tmp "${T}/$(basename "${tempdir}")")" "${tempdir}" || die
-
- USE_SETUPTOOLS=1 SHELL="/bin/bash" \
- TMPDIR="${tempdir}" \
- ${EPYTHON} tests/runtests.py \
- --unit-tests --no-report --verbose \
- || die "testing failed with ${EPYTHON}"
- )
-}
diff --git a/app-admin/salt/salt-3000.2-r4.ebuild b/app-admin/salt/salt-3000.2-r4.ebuild
deleted file mode 100644
index 648c82a92c41..000000000000
--- a/app-admin/salt/salt-3000.2-r4.ebuild
+++ /dev/null
@@ -1,193 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-PYTHON_COMPAT=( python3_{7,8} )
-DISTUTILS_USE_SETUPTOOLS=bdepend
-inherit systemd distutils-r1
-
-DESCRIPTION="Salt is a remote execution and configuration manager"
-HOMEPAGE="https://www.saltstack.com/resources/community/
- https://github.com/saltstack"
-
-if [[ ${PV} == 9999* ]]; then
- inherit git-r3
- EGIT_REPO_URI="git://github.com/${PN}stack/${PN}.git"
- EGIT_BRANCH="develop"
- SRC_URI=""
-else
- SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz
- https://dev.gentoo.org/~chutzpah/dist/salt/salt-3000.2-py38-misc.patch.gz"
- KEYWORDS="amd64 x86"
-fi
-
-LICENSE="Apache-2.0"
-SLOT="0"
-IUSE="cheetah cherrypy ldap libcloud libvirt genshi gnupg keyring mako
- mongodb neutron nova openssl portage profile redis selinux test raet
- +zeromq vim-syntax"
-
-RDEPEND="
- sys-apps/pciutils
- dev-python/distro[${PYTHON_USEDEP}]
- dev-python/jinja[${PYTHON_USEDEP}]
- dev-python/libnacl[${PYTHON_USEDEP}]
- >=dev-python/msgpack-0.5[${PYTHON_USEDEP}]
- <dev-python/msgpack-1.0[${PYTHON_USEDEP}]
- dev-python/pycryptodome[${PYTHON_USEDEP}]
- dev-python/pyyaml[${PYTHON_USEDEP}]
- dev-python/markupsafe[${PYTHON_USEDEP}]
- >=dev-python/requests-1.0.0[${PYTHON_USEDEP}]
- dev-python/setuptools[${PYTHON_USEDEP}]
- libcloud? ( >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}] )
- mako? ( dev-python/mako[${PYTHON_USEDEP}] )
- ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
- libvirt? (
- $(python_gen_cond_dep 'dev-python/libvirt-python[${PYTHON_USEDEP}]' python3_7)
- )
- openssl? (
- dev-libs/openssl:0=[-bindist]
- dev-python/pyopenssl[${PYTHON_USEDEP}]
- )
- raet? (
- >=dev-python/libnacl-1.0.0[${PYTHON_USEDEP}]
- >=dev-python/ioflo-1.1.7[${PYTHON_USEDEP}]
- >=dev-python/raet-0.6.0[${PYTHON_USEDEP}]
- )
- cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] )
- cheetah? ( dev-python/cheetah3[${PYTHON_USEDEP}] )
- mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
- portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
- keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
- redis? ( dev-python/redis-py[${PYTHON_USEDEP}] )
- selinux? ( sec-policy/selinux-salt )
- nova? (
- $(python_gen_cond_dep '>=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}]' python3_7)
- )
- neutron? (
- $(python_gen_cond_dep '>=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}]' python3_7)
- )
- gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
- profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
- vim-syntax? ( app-vim/salt-vim )
- zeromq? ( >=dev-python/pyzmq-2.2.0[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- test? (
- ${RDEPEND}
- >=dev-python/boto-2.32.1[${PYTHON_USEDEP}]
- >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
- >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}]
- >=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
- >=dev-python/moto-0.3.6[${PYTHON_USEDEP}]
- dev-python/pip[${PYTHON_USEDEP}]
- dev-python/psutil[${PYTHON_USEDEP}]
- dev-python/pytest[${PYTHON_USEDEP}]
- dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
- dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
- >=dev-python/pytest-salt-2018.12.8[${PYTHON_USEDEP}]
- dev-python/pytest-tempdir[${PYTHON_USEDEP}]
- >=dev-python/SaltTesting-2016.5.11[${PYTHON_USEDEP}]
- dev-python/virtualenv[${PYTHON_USEDEP}]
- !x86? ( >=dev-python/boto3-1.2.1[${PYTHON_USEDEP}] )
- )"
-
-DOCS=( README.rst AUTHORS )
-
-REQUIRED_USE="|| ( raet zeromq )
- test? ( cheetah genshi )"
-RESTRICT="!test? ( test ) x86? ( test )"
-
-PATCHES=(
- "${FILESDIR}/salt-2017.7.0-dont-realpath-tmpdir.patch"
- "${FILESDIR}/salt-2019.2.0-skip-tests-that-oom-machine.patch"
- "${FILESDIR}/salt-3000.1-tests.patch"
- "${FILESDIR}/salt-3000.2-tests.patch"
-
- # https://github.com/saltstack/salt/pull/55410
- "${FILESDIR}/salt-3000.2-py38.patch"
-
- # https://github.com/saltstack/salt/pull/55900
- "${FILESDIR}/salt-3000.2-py38-abc.patch"
-
- # misc py38 fixups
- "${WORKDIR}/salt-3000.2-py38-misc.patch"
- "${FILESDIR}/salt-3000.2-py38-logwarn.patch"
-)
-
-python_prepare() {
- # remove tests with external dependencies that may not be available
- rm tests/unit/{test_zypp_plugins.py,utils/test_extend.py} || die
- rm tests/unit/modules/test_{file,boto_{vpc,secgroup,elb}}.py || die
- rm tests/unit/states/test_boto_vpc.py || die
-
- # tests that require network access
- rm tests/unit/{states,modules}/test_zcbuildout.py || die
-
- # make sure pkg_resources doesn't bomb because pycrypto isn't installed
- find . -name '*.txt' -print0 | xargs -0 sed -e '/pycrypto>/ d' -i || die
-
- einfo "Fixing collections.abc warnings for ${EPYTHON}"
- local abc
- abc="$("${EPYTHON}" -c 'import collections.abc; print("|".join((c for c in dir(collections.abc) if not c.startswith("_"))))')" || die
- find -name '*.py' -type f -print0 | xargs -0 sed -r -e "s:collections\\.(${abc}):collections.abc.\\1:g" -i || die
-
- # allow the use of the renamed msgpack
- sed -i '/^msgpack/d' requirements/base.txt || die
-}
-
-python_install_all() {
- local svc
- USE_SETUPTOOLS=1 distutils-r1_python_install_all
-
- for svc in minion master syndic api; do
- newinitd "${FILESDIR}"/${svc}-initd-4 salt-${svc}
- newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
- systemd_dounit "${FILESDIR}"/salt-${svc}.service
- done
-
- insinto /etc/${PN}
- doins -r conf/*
-}
-
-python_test() {
- local tempdir
- # testsuite likes lots of files
- ulimit -n 3072 || die
-
- # ${T} is too long a path for the tests to work
- tempdir="$(mktemp -du --tmpdir=/tmp salt-XXX)"
- mkdir "${T}/$(basename "${tempdir}")"
-
- (
- cleanup() { rm -f "${tempdir}" || die; }
-
- trap cleanup EXIT
-
- addwrite "${tempdir}"
- ln -s "$(realpath --relative-to=/tmp "${T}/$(basename "${tempdir}")")" "${tempdir}" || die
-
- USE_SETUPTOOLS=1 SHELL="/bin/bash" \
- TMPDIR="${tempdir}" \
- ${EPYTHON} tests/runtests.py \
- --unit-tests --no-report --verbose \
- || die "testing failed with ${EPYTHON}"
- )
-}
-
-pkg_postinst() {
- if use python_targets_python3_8; then
- if use nova; then
- ewarn "Salt's nova functionality will not work with python3.8 since"
- ewarn "dev-python/python-novaclient does not support it yet"
- fi
- if use neutron; then
- ewarn "Salt's neutron functionality will not work with python3.8 since"
- ewarn "dev-python/python-neutronclient does not support it yet"
- fi
- if use libvirt; then
- ewarn "Salt's libvirt functionality will not work with python3.8 since"
- ewarn "dev-python/libvirt-python does not support it yet"
- fi
- fi
-}
diff --git a/app-admin/salt/salt-3000.3.ebuild b/app-admin/salt/salt-3000.3.ebuild
deleted file mode 100644
index 380351911ba9..000000000000
--- a/app-admin/salt/salt-3000.3.ebuild
+++ /dev/null
@@ -1,193 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-PYTHON_COMPAT=( python3_{7,8} )
-DISTUTILS_USE_SETUPTOOLS=bdepend
-inherit systemd distutils-r1
-
-DESCRIPTION="Salt is a remote execution and configuration manager"
-HOMEPAGE="https://www.saltstack.com/resources/community/
- https://github.com/saltstack"
-
-if [[ ${PV} == 9999* ]]; then
- inherit git-r3
- EGIT_REPO_URI="git://github.com/${PN}stack/${PN}.git"
- EGIT_BRANCH="develop"
- SRC_URI=""
-else
- SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz
- https://dev.gentoo.org/~chutzpah/dist/salt/salt-3000.2-py38-misc.patch.gz"
- KEYWORDS="~amd64 ~x86"
-fi
-
-LICENSE="Apache-2.0"
-SLOT="0"
-IUSE="cheetah cherrypy ldap libcloud libvirt genshi gnupg keyring mako
- mongodb neutron nova openssl portage profile redis selinux test raet
- +zeromq vim-syntax"
-
-RDEPEND="
- sys-apps/pciutils
- dev-python/distro[${PYTHON_USEDEP}]
- dev-python/jinja[${PYTHON_USEDEP}]
- dev-python/libnacl[${PYTHON_USEDEP}]
- >=dev-python/msgpack-0.5[${PYTHON_USEDEP}]
- <dev-python/msgpack-1.0[${PYTHON_USEDEP}]
- dev-python/pycryptodome[${PYTHON_USEDEP}]
- dev-python/pyyaml[${PYTHON_USEDEP}]
- dev-python/markupsafe[${PYTHON_USEDEP}]
- >=dev-python/requests-1.0.0[${PYTHON_USEDEP}]
- dev-python/setuptools[${PYTHON_USEDEP}]
- libcloud? ( >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}] )
- mako? ( dev-python/mako[${PYTHON_USEDEP}] )
- ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
- libvirt? (
- $(python_gen_cond_dep 'dev-python/libvirt-python[${PYTHON_USEDEP}]' python3_7)
- )
- openssl? (
- dev-libs/openssl:0=[-bindist]
- dev-python/pyopenssl[${PYTHON_USEDEP}]
- )
- raet? (
- >=dev-python/libnacl-1.0.0[${PYTHON_USEDEP}]
- >=dev-python/ioflo-1.1.7[${PYTHON_USEDEP}]
- >=dev-python/raet-0.6.0[${PYTHON_USEDEP}]
- )
- cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] )
- cheetah? ( dev-python/cheetah3[${PYTHON_USEDEP}] )
- mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
- portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
- keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
- redis? ( dev-python/redis-py[${PYTHON_USEDEP}] )
- selinux? ( sec-policy/selinux-salt )
- nova? (
- $(python_gen_cond_dep '>=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}]' python3_7)
- )
- neutron? (
- $(python_gen_cond_dep '>=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}]' python3_7)
- )
- gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
- profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
- vim-syntax? ( app-vim/salt-vim )
- zeromq? ( >=dev-python/pyzmq-2.2.0[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- test? (
- ${RDEPEND}
- >=dev-python/boto-2.32.1[${PYTHON_USEDEP}]
- >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
- >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}]
- >=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
- >=dev-python/moto-0.3.6[${PYTHON_USEDEP}]
- dev-python/pip[${PYTHON_USEDEP}]
- dev-python/psutil[${PYTHON_USEDEP}]
- dev-python/pytest[${PYTHON_USEDEP}]
- dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
- dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
- >=dev-python/pytest-salt-2018.12.8[${PYTHON_USEDEP}]
- dev-python/pytest-tempdir[${PYTHON_USEDEP}]
- >=dev-python/SaltTesting-2016.5.11[${PYTHON_USEDEP}]
- dev-python/virtualenv[${PYTHON_USEDEP}]
- !x86? ( >=dev-python/boto3-1.2.1[${PYTHON_USEDEP}] )
- )"
-
-DOCS=( README.rst AUTHORS )
-
-REQUIRED_USE="|| ( raet zeromq )
- test? ( cheetah genshi )"
-RESTRICT="!test? ( test ) x86? ( test )"
-
-PATCHES=(
- "${FILESDIR}/salt-2017.7.0-dont-realpath-tmpdir.patch"
- "${FILESDIR}/salt-2019.2.0-skip-tests-that-oom-machine.patch"
- "${FILESDIR}/salt-3000.1-tests.patch"
- "${FILESDIR}/salt-3000.2-tests.patch"
-
- # https://github.com/saltstack/salt/pull/55410
- "${FILESDIR}/salt-3000.2-py38.patch"
-
- # https://github.com/saltstack/salt/pull/55900
- "${FILESDIR}/salt-3000.2-py38-abc.patch"
-
- # misc py38 fixups
- "${WORKDIR}/salt-3000.2-py38-misc.patch"
- "${FILESDIR}/salt-3000.2-py38-logwarn.patch"
-)
-
-python_prepare() {
- # remove tests with external dependencies that may not be available
- rm tests/unit/{test_zypp_plugins.py,utils/test_extend.py} || die
- rm tests/unit/modules/test_{file,boto_{vpc,secgroup,elb}}.py || die
- rm tests/unit/states/test_boto_vpc.py || die
-
- # tests that require network access
- rm tests/unit/{states,modules}/test_zcbuildout.py || die
-
- # make sure pkg_resources doesn't bomb because pycrypto isn't installed
- find . -name '*.txt' -print0 | xargs -0 sed -e '/pycrypto>/ d' -i || die
-
- einfo "Fixing collections.abc warnings for ${EPYTHON}"
- local abc
- abc="$("${EPYTHON}" -c 'import collections.abc; print("|".join((c for c in dir(collections.abc) if not c.startswith("_"))))')" || die
- find -name '*.py' -type f -print0 | xargs -0 sed -r -e "s:collections\\.(${abc}):collections.abc.\\1:g" -i || die
-
- # allow the use of the renamed msgpack
- sed -i '/^msgpack/d' requirements/base.txt || die
-}
-
-python_install_all() {
- local svc
- USE_SETUPTOOLS=1 distutils-r1_python_install_all
-
- for svc in minion master syndic api; do
- newinitd "${FILESDIR}"/${svc}-initd-4 salt-${svc}
- newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
- systemd_dounit "${FILESDIR}"/salt-${svc}.service
- done
-
- insinto /etc/${PN}
- doins -r conf/*
-}
-
-python_test() {
- local tempdir
- # testsuite likes lots of files
- ulimit -n 3072 || die
-
- # ${T} is too long a path for the tests to work
- tempdir="$(mktemp -du --tmpdir=/tmp salt-XXX)"
- mkdir "${T}/$(basename "${tempdir}")"
-
- (
- cleanup() { rm -f "${tempdir}" || die; }
-
- trap cleanup EXIT
-
- addwrite "${tempdir}"
- ln -s "$(realpath --relative-to=/tmp "${T}/$(basename "${tempdir}")")" "${tempdir}" || die
-
- USE_SETUPTOOLS=1 SHELL="/bin/bash" \
- TMPDIR="${tempdir}" \
- ${EPYTHON} tests/runtests.py \
- --unit-tests --no-report --verbose \
- || die "testing failed with ${EPYTHON}"
- )
-}
-
-pkg_postinst() {
- if use python_targets_python3_8; then
- if use nova; then
- ewarn "Salt's nova functionality will not work with python3.8 since"
- ewarn "dev-python/python-novaclient does not support it yet"
- fi
- if use neutron; then
- ewarn "Salt's neutron functionality will not work with python3.8 since"
- ewarn "dev-python/python-neutronclient does not support it yet"
- fi
- if use libvirt; then
- ewarn "Salt's libvirt functionality will not work with python3.8 since"
- ewarn "dev-python/libvirt-python does not support it yet"
- fi
- fi
-}
diff --git a/app-admin/salt/salt-3001.1-r2.ebuild b/app-admin/salt/salt-3001.1-r2.ebuild
deleted file mode 100644
index e5a0fb3ec15b..000000000000
--- a/app-admin/salt/salt-3001.1-r2.ebuild
+++ /dev/null
@@ -1,184 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-PYTHON_COMPAT=( python3_{7..8} )
-DISTUTILS_USE_SETUPTOOLS=bdepend
-inherit systemd distutils-r1
-
-DESCRIPTION="Salt is a remote execution and configuration manager"
-HOMEPAGE="https://www.saltstack.com/resources/community/
- https://github.com/saltstack"
-
-if [[ ${PV} == 9999* ]]; then
- inherit git-r3
- EGIT_REPO_URI="git://github.com/${PN}stack/${PN}.git"
- EGIT_BRANCH="develop"
- SRC_URI=""
-else
- SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
- KEYWORDS="~amd64 ~x86"
-fi
-
-LICENSE="Apache-2.0"
-SLOT="0"
-IUSE="cheetah cherrypy ldap libcloud libvirt genshi gnupg keyring mako
- mongodb neutron nova openssl portage profile redis selinux test raet
- +zeromq vim-syntax"
-
-RDEPEND="
- sys-apps/pciutils
- dev-python/distro[${PYTHON_USEDEP}]
- dev-python/jinja[${PYTHON_USEDEP}]
- dev-python/libnacl[${PYTHON_USEDEP}]
- >=dev-python/msgpack-1.0.0[${PYTHON_USEDEP}]
- >=dev-python/pycryptodome-3.9.7[${PYTHON_USEDEP}]
- dev-python/pycryptodomex[${PYTHON_USEDEP}]
- dev-python/pyyaml[${PYTHON_USEDEP}]
- dev-python/markupsafe[${PYTHON_USEDEP}]
- >=dev-python/requests-1.0.0[${PYTHON_USEDEP}]
- dev-python/setuptools[${PYTHON_USEDEP}]
- dev-python/toml[${PYTHON_USEDEP}]
- dev-python/watchdog[${PYTHON_USEDEP}]
- libcloud? ( >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}] )
- mako? ( dev-python/mako[${PYTHON_USEDEP}] )
- ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
- libvirt? (
- $(python_gen_cond_dep 'dev-python/libvirt-python[${PYTHON_USEDEP}]' python3_7)
- )
- openssl? (
- dev-libs/openssl:0=[-bindist]
- dev-python/pyopenssl[${PYTHON_USEDEP}]
- )
- raet? (
- >=dev-python/libnacl-1.0.0[${PYTHON_USEDEP}]
- >=dev-python/ioflo-1.1.7[${PYTHON_USEDEP}]
- >=dev-python/raet-0.6.0[${PYTHON_USEDEP}]
- )
- cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] )
- cheetah? ( dev-python/cheetah3[${PYTHON_USEDEP}] )
- mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
- portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
- keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
- redis? ( dev-python/redis-py[${PYTHON_USEDEP}] )
- selinux? ( sec-policy/selinux-salt )
- nova? (
- $(python_gen_cond_dep '>=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}]' python3_7)
- )
- neutron? (
- $(python_gen_cond_dep '>=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}]' python3_7)
- )
- gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
- profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
- vim-syntax? ( app-vim/salt-vim )
- zeromq? ( >=dev-python/pyzmq-2.2.0[${PYTHON_USEDEP}] )
-"
-BDEPEND="
- test? (
- ${RDEPEND}
- >=dev-python/boto-2.32.1[${PYTHON_USEDEP}]
- >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
- >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}]
- >=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
- >=dev-python/moto-0.3.6[${PYTHON_USEDEP}]
- dev-python/pip[${PYTHON_USEDEP}]
- dev-python/psutil[${PYTHON_USEDEP}]
- dev-python/pytest[${PYTHON_USEDEP}]
- dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
- >=dev-python/pytest-salt-2020.1.27[${PYTHON_USEDEP}]
- dev-python/pytest-salt-factories[${PYTHON_USEDEP}]
- dev-python/pytest-tempdir[${PYTHON_USEDEP}]
- >=dev-python/SaltTesting-2016.5.11[${PYTHON_USEDEP}]
- >=dev-python/virtualenv-20.0.20[${PYTHON_USEDEP}]
- !x86? ( >=dev-python/boto3-1.3.15[${PYTHON_USEDEP}] )
- )"
-
-DOCS=( README.rst AUTHORS )
-
-REQUIRED_USE="|| ( raet zeromq )
- test? ( cheetah genshi )"
-RESTRICT="!test? ( test ) x86? ( test )"
-
-PATCHES=(
- "${FILESDIR}/salt-2019.2.0-skip-tests-that-oom-machine.patch"
- "${FILESDIR}/salt-3001.1-tests.patch"
-)
-
-python_prepare_all() {
- # remove tests with external dependencies that may not be available
- rm tests/unit/{test_zypp_plugins.py,utils/test_extend.py} || die
- rm tests/unit/modules/test_{file,boto_{vpc,secgroup,elb}}.py || die
- rm tests/unit/states/test_boto_vpc.py || die
- rm tests/support/gitfs.py tests/unit/runners/test_git_pillar.py || die
-
- # tests that require network access
- rm tests/unit/{states,modules}/test_zcbuildout.py || die
-
- # make sure pkg_resources doesn't bomb because pycrypto isn't installed
- find . -name '*.txt' -print0 | xargs -0 sed -e '/pycrypto>/ d' -i || die
-
- distutils-r1_python_prepare_all
-}
-
-python_prepare() {
- einfo "Fixing collections.abc warnings for ${EPYTHON}"
- local abc
- abc="$("${EPYTHON}" -c 'import collections.abc; print("|".join((c for c in dir(collections.abc) if not c.startswith("_"))))')" || die
- find -name '*.py' -type f -print0 | xargs -0 sed -r -e "s:collections\\.(${abc}):collections.abc.\\1:g" -i || die
-}
-
-python_install_all() {
- local svc
- USE_SETUPTOOLS=1 distutils-r1_python_install_all
-
- for svc in minion master syndic api; do
- newinitd "${FILESDIR}"/${svc}-initd-4 salt-${svc}
- newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
- systemd_dounit "${FILESDIR}"/salt-${svc}.service
- done
-
- insinto /etc/${PN}
- doins -r conf/*
-}
-
-python_test() {
- local tempdir
- # testsuite likes lots of files
- ulimit -n 3072 || die
-
- # ${T} is too long a path for the tests to work
- tempdir="$(mktemp -du --tmpdir=/tmp salt-XXX)"
- mkdir "${T}/$(basename "${tempdir}")"
-
- (
- cleanup() { rm -f "${tempdir}" || die; }
-
- trap cleanup EXIT
-
- addwrite "${tempdir}"
- ln -s "$(realpath --relative-to=/tmp "${T}/$(basename "${tempdir}")")" "${tempdir}" || die
-
- USE_SETUPTOOLS=1 SHELL="/bin/bash" \
- TMPDIR="${tempdir}" \
- ${EPYTHON} tests/runtests.py \
- --unit-tests --no-report --verbose \
- || die "testing failed with ${EPYTHON}"
- )
-}
-
-pkg_postinst() {
- if use python_targets_python3_8; then
- if use nova; then
- ewarn "Salt's nova functionality will not work with python3.8 since"
- ewarn "dev-python/python-novaclient does not support it yet"
- fi
- if use neutron; then
- ewarn "Salt's neutron functionality will not work with python3.8 since"
- ewarn "dev-python/python-neutronclient does not support it yet"
- fi
- if use libvirt; then
- ewarn "Salt's libvirt functionality will not work with python3.8 since"
- ewarn "dev-python/libvirt-python does not support it yet"
- fi
- fi
-}
diff --git a/app-admin/salt/salt-3005.5-r1.ebuild b/app-admin/salt/salt-3005.5-r1.ebuild
new file mode 100644
index 000000000000..835496219717
--- /dev/null
+++ b/app-admin/salt/salt-3005.5-r1.ebuild
@@ -0,0 +1,312 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_10 )
+
+DISTUTILS_USE_PEP517=setuptools
+inherit systemd distutils-r1
+
+DESCRIPTION="Salt is a remote execution and configuration manager"
+HOMEPAGE="https://www.saltstack.com/resources/community/
+ https://github.com/saltstack"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/${PN}stack/${PN}.git"
+ EGIT_BRANCH="develop"
+else
+ inherit pypi
+ KEYWORDS="amd64 ~arm arm64 ~riscv x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE="
+ cheetah cherrypy ldap libcloud libvirt genshi gnupg keyring mako
+ mongodb neutron nova openssl portage profile redis selinux test raet
+ +zeromq vim-syntax
+"
+
+RDEPEND="
+ sys-apps/pciutils
+ >=dev-python/distro-1.5[${PYTHON_USEDEP}]
+ >=dev-python/jinja-3.1.2[${PYTHON_USEDEP}]
+ dev-python/jmespath[${PYTHON_USEDEP}]
+ dev-python/libnacl[${PYTHON_USEDEP}]
+ >=dev-python/msgpack-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/psutil-5.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pycryptodome-3.9.8[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-6.0.1[${PYTHON_USEDEP}]
+ >=dev-python/markupsafe-2.1.2[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.31.0[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ dev-python/tomli[${PYTHON_USEDEP}]
+ dev-python/watchdog[${PYTHON_USEDEP}]
+ libcloud? (
+ dev-python/aiohttp[${PYTHON_USEDEP}]
+ dev-python/aiosignal[${PYTHON_USEDEP}]
+ >=dev-python/apache-libcloud-2.5.0[${PYTHON_USEDEP}]
+ dev-python/async-timeout[${PYTHON_USEDEP}]
+ )
+ mako? ( dev-python/mako[${PYTHON_USEDEP}] )
+ ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
+ libvirt? (
+ dev-python/libvirt-python[${PYTHON_USEDEP}]
+ )
+ openssl? (
+ dev-libs/openssl:0=[-bindist(-)]
+ >=dev-python/pyopenssl-23.2.0[${PYTHON_USEDEP}]
+ )
+ raet? (
+ >=dev-python/libnacl-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/ioflo-1.1.7[${PYTHON_USEDEP}]
+ >=dev-python/raet-0.6.0[${PYTHON_USEDEP}]
+ )
+ cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] )
+ cheetah? ( >=dev-python/cheetah3-3.2.2[${PYTHON_USEDEP}] )
+ genshi? ( dev-python/genshi[${PYTHON_USEDEP}] )
+ mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
+ portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
+ keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
+ redis? ( dev-python/redis[${PYTHON_USEDEP}] )
+ selinux? ( sec-policy/selinux-salt )
+ nova? (
+ >=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}]
+ )
+ neutron? (
+ >=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}]
+ )
+ gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
+ profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
+ vim-syntax? ( app-vim/salt-vim )
+ zeromq? ( >=dev-python/pyzmq-19.0.0[${PYTHON_USEDEP}] )
+"
+BDEPEND="
+ test? (
+ ${RDEPEND}
+ dev-python/apache-libcloud[${PYTHON_USEDEP}]
+ >=dev-python/certifi-2023.07.22[${PYTHON_USEDEP}]
+ dev-python/cherrypy[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
+ dev-python/mako[${PYTHON_USEDEP}]
+ >=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
+ >=dev-python/moto-2.0.0[${PYTHON_USEDEP}]
+ dev-python/passlib[${PYTHON_USEDEP}]
+ dev-python/pip[${PYTHON_USEDEP}]
+ >=dev-python/pyopenssl-23.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-7.2.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-salt-factories-1.0.0_rc17[${PYTHON_USEDEP}]
+ dev-python/pytest-tempdir[${PYTHON_USEDEP}]
+ dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-shell-utilities[${PYTHON_USEDEP}]
+ dev-python/pytest-skip-markers[${PYTHON_USEDEP}]
+ dev-python/pytest-system-statistics[${PYTHON_USEDEP}]
+ dev-python/flaky[${PYTHON_USEDEP}]
+ net-dns/bind-tools
+ >=dev-python/virtualenv-20.3.0[${PYTHON_USEDEP}]
+ dev-util/yamllint[${PYTHON_USEDEP}]
+ !x86? ( >=dev-python/boto3-1.17.67[${PYTHON_USEDEP}] )
+ )
+"
+
+DOCS=( README.rst AUTHORS )
+
+REQUIRED_USE="|| ( raet zeromq )
+ test? ( cheetah genshi )"
+RESTRICT="!test? ( test ) x86? ( test )"
+
+PATCHES=(
+ "${FILESDIR}/salt-3003-gentoolkit-revdep.patch"
+ "${FILESDIR}/salt-3002-tests.patch"
+ "${FILESDIR}/salt-3003.1-tests.patch"
+ "${FILESDIR}/salt-3005-tests.patch"
+ "${FILESDIR}/salt-3005.1-no-entry-points.patch"
+ "${FILESDIR}/salt-3005.1-importlib-metadata-5-r1.patch"
+ "${FILESDIR}/salt-3005.1-tests.patch"
+ "${FILESDIR}/salt-3005.1-modules-file-python-3.11-host.patch"
+ "${FILESDIR}/salt-3006.2-tests.patch"
+)
+
+python_prepare_all() {
+ local -a remove_test_files=(
+ # remove tests with external dependencies that may not be available, and
+ # tests that don't work in sandbox
+ tests/pytests/functional/fileserver/test_roots.py
+ tests/pytests/functional/modules/file/test_readlink.py
+ tests/pytests/functional/modules/file/test_replace.py
+ tests/pytests/functional/modules/file/test_symlink.py
+ tests/pytests/functional/modules/state/requisites/test_mixed.py
+ tests/pytests/functional/modules/state/test_jinja_renderer.py
+ tests/pytests/functional/modules/state/test_state.py
+ tests/pytests/functional/pillar/test_top.py
+ tests/pytests/functional/runners/test_winrepo.py
+ tests/pytests/functional/transport/server/test_req_channel.py
+ tests/pytests/functional/utils/functools/test_namespaced_function.py
+ tests/pytests/functional/utils/test_async_event_publisher.py
+ tests/pytests/integration/modules/state/test_state.py
+ tests/pytests/integration/pillar/cache/test_pillar_cache.py
+ tests/pytests/integration/pillar/test_pillar_include.py
+ tests/pytests/integration/proxy/test_deltaproxy.py
+ tests/pytests/integration/returners/test_noop_return.py
+ tests/pytests/integration/runners/test_manage.py
+ tests/pytests/integration/utils/test_templates.py
+ tests/pytests/unit/loader/test_lazy.py
+ tests/pytests/unit/modules/state/test_top_file_merge.py
+ tests/pytests/unit/roster/test_dir.py
+ tests/pytests/unit/state/test_multi_env_highstate.py
+ tests/pytests/unit/state/test_state_highstate.py
+ tests/pytests/unit/states/file/test_keyvalue.py
+ tests/pytests/unit/utils/jinja/test_get_template.py
+ tests/pytests/unit/utils/jinja/test_salt_cache_loader.py
+ tests/pytests/unit/utils/test_cache.py
+ tests/pytests/unit/utils/test_versions.py
+ tests/support/gitfs.py
+ tests/unit/modules/test_boto_{vpc,secgroup,elb}.py
+ tests/unit/runners/test_git_pillar.py
+ tests/unit/states/test_boto_vpc.py
+ tests/unit/{test_{zypp_plugins,module_names},utils/test_extend}.py
+
+ # tests that require network access
+ tests/integration/cloud
+ tests/kitchen/test_kitchen.py
+ tests/kitchen/tests/wordpress/tests
+ tests/pytests/functional/cli/test_salt_cloud.py
+ tests/pytests/functional/modules/state/requisites/test_listen.py
+ tests/pytests/functional/modules/state/requisites/test_onchanges.py
+ tests/pytests/functional/modules/state/requisites/test_onfail.py
+ tests/pytests/functional/modules/state/requisites/test_prereq.py
+ tests/pytests/functional/modules/state/requisites/test_require.py
+ tests/pytests/functional/modules/state/requisites/test_unless.py
+ tests/pytests/functional/modules/state/requisites/test_use.py
+ tests/pytests/functional/modules/state/requisites/test_watch.py
+ tests/pytests/functional/modules/test_pip.py
+ tests/pytests/functional/pillar/test_gpg.py
+ tests/pytests/functional/states/file/test_comment.py
+ tests/pytests/functional/states/file/test_rename.py
+ tests/pytests/integration/cli/test_batch.py
+ tests/pytests/integration/cli/test_salt_deltaproxy.py
+ tests/pytests/integration/cli/test_salt_proxy.py
+ tests/pytests/integration/master/test_clear_funcs.py
+ tests/pytests/integration/modules/test_state.py
+ tests/pytests/integration/proxy/test_simple.py
+ tests/pytests/integration/runners/state/orchestrate/test_events.py
+ tests/pytests/integration/wheel/test_pillar_roots.py
+ tests/pytests/unit/client/ssh/test_ssh.py
+ tests/pytests/unit/cloud/test_map.py
+ tests/pytests/unit/fileserver/test_roots.py
+ tests/pytests/unit/modules/state/test_state.py
+ tests/pytests/unit/proxy/test_netmiko_px.py
+ tests/pytests/unit/test_client.py
+ tests/pytests/unit/test_ext_importers.py
+ tests/pytests/unit/test_master.py
+ tests/pytests/{integration,functional}/netapi tests/integration/netapi
+ tests/unit/cloud/clouds/test_joyent.py
+ tests/unit/config/schemas/test_ssh.py
+ tests/unit/modules/test_boto3_elasticsearch.py
+ tests/unit/modules/test_boto3_route53.py
+ tests/unit/modules/test_network.py
+ tests/unit/netapi/rest_tornado/test_saltnado.py
+ tests/unit/{states,modules}/test_zcbuildout.py
+
+ # tests require root access
+ tests/integration/pillar/test_git_pillar.py
+ tests/integration/states/test_supervisord.py
+ )
+
+ rm -r "${remove_test_files[@]}" || die
+
+ # axe the boto dep (bug #888235)
+ find "${S}/tests" -name 'test_boto_*.py' -delete || die
+
+ # removes contextvars, see bug: https://bugs.gentoo.org/799431
+ sed -i '/^contextvars/d' requirements/base.txt || die
+
+ # called_once should be assert_called_once_with
+ find "${S}/tests" -name '*.py' -print0 | xargs -0 -- sed -i -e 's:[.]called_once:.assert_called_once:g' -- || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_install_all() {
+ local svc
+ USE_SETUPTOOLS=1 distutils-r1_python_install_all
+
+ for svc in minion master syndic api; do
+ newinitd "${FILESDIR}"/${svc}-initd-5 salt-${svc}
+ newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
+ systemd_dounit "${FILESDIR}"/salt-${svc}.service
+ done
+
+ insinto /etc/${PN}
+ doins -r conf/*
+}
+
+python_test() {
+ local -a EPYTEST_DESELECT=(
+ # hangs indefinitely
+ tests/pytests/unit/test_minion.py::test_master_type_disable
+ # don't like sandbox
+ tests/pytests/functional/modules/test_saltutil.py::test__get_top_file_envs
+ tests/pytests/functional/modules/state/requisites/test_onlyif.py::test_onlyif_req_retcode
+ tests/pytests/integration/modules/test_state.py::test_logging_and_state_output_order
+ tests/pytests/integration/states/test_ini_manage.py::test_options_present
+
+ tests/pytests/functional/cli/test_salt.py::test_versions_report
+ tests/pytests/unit/modules/test_aptpkg.py::test_call_apt_dpkg_lock
+ tests/pytests/unit/test_master.py::test_fileserver_duration
+ tests/pytests/unit/utils/test_vt.py::test_log_sanitize
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_anyof_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_array_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_dict_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_hostname_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_not_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_oneof_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_optional_requirements_config_validation
+ tests/unit/utils/test_vt.py::VTTestCase::test_split_multibyte_characters_shiftjis
+ tests/unit/utils/test_vt.py::VTTestCase::test_split_multibyte_characters_unicode
+
+ # need root
+ tests/pytests/unit/modules/test_cmdmod.py::test_runas_env_sudo_group
+ )
+
+ # https://bugs.gentoo.org/924377
+ has_version 'sys-apps/systemd' || EPYTEST_DESELECT+=(
+ tests/pytests/unit/modules/test_aptpkg.py::test_autoremove
+ tests/pytests/unit/modules/test_aptpkg.py::test_upgrade
+ tests/pytests/unit/modules/test_aptpkg.py::test_upgrade_downloadonly
+ tests/pytests/unit/modules/test_aptpkg.py::test_upgrade_allow_downgrades
+ tests/pytests/unit/modules/test_aptpkg.py::test_call_apt_default
+ tests/pytests/unit/modules/test_aptpkg.py::test_call_apt_with_kwargs
+ tests/pytests/unit/modules/test_linux_sysctl.py::test_persist_no_conf_failure
+ tests/pytests/unit/modules/test_yumpkg.py::test_latest_version_with_options
+ tests/pytests/unit/modules/test_yumpkg.py::test_list_repo_pkgs_with_options
+ tests/pytests/unit/modules/test_yumpkg.py::test_list_upgrades_dnf
+ tests/pytests/unit/modules/test_yumpkg.py::test_list_upgrades_yum
+ tests/pytests/unit/modules/test_yumpkg.py::test_refresh_db_with_options
+ tests/pytests/unit/modules/test_yumpkg.py::test_call_yum_default
+ tests/pytests/unit/modules/test_yumpkg.py::test_call_yum_with_kwargs
+ tests/unit/modules/test_kernelpkg_linux_yum.py::YumKernelPkgTestCase::test_remove_error
+ tests/unit/modules/test_kernelpkg_linux_yum.py::YumKernelPkgTestCase::test_remove_success
+ tests/unit/modules/test_zypperpkg.py::ZypperTestCase::test_remove_purge
+ )
+
+ # testsuite likes lots of files
+ ulimit -n 4096 || die
+
+ # ${T} is too long a path for the tests to work
+ local TMPDIR
+ TMPDIR="$(mktemp --directory --tmpdir=/tmp ${PN}-XXXX)" || die
+ (
+ export TMPDIR
+ cleanup() { rm -rf "${TMPDIR}" || die; }
+
+ trap cleanup EXIT
+
+ addwrite "${TMPDIR}"
+
+ USE_SETUPTOOLS=1 NO_INTERNET=1 SHELL="/bin/bash" \
+ epytest
+ )
+}
diff --git a/app-admin/salt/salt-3006.5-r1.ebuild b/app-admin/salt/salt-3006.5-r1.ebuild
new file mode 100644
index 000000000000..42a1f42b6498
--- /dev/null
+++ b/app-admin/salt/salt-3006.5-r1.ebuild
@@ -0,0 +1,342 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_10 )
+
+DISTUTILS_USE_PEP517=setuptools
+inherit systemd distutils-r1
+
+DESCRIPTION="Salt is a remote execution and configuration manager"
+HOMEPAGE="https://www.saltstack.com/resources/community/
+ https://github.com/saltstack"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/${PN}stack/${PN}.git"
+ EGIT_BRANCH="develop"
+else
+ inherit pypi
+ KEYWORDS="~amd64 ~riscv ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE="
+ cheetah cherrypy ldap libcloud libvirt genshi gnupg keyring mako
+ mongodb neutron nova openssl portage profile redis selinux test raet
+ +zeromq vim-syntax
+"
+
+RDEPEND="
+ sys-apps/pciutils
+ >=dev-python/cryptography-41.0.3[${PYTHON_USEDEP}]
+ >=dev-python/distro-1.5[${PYTHON_USEDEP}]
+ >=dev-python/jinja-3.1.2[${PYTHON_USEDEP}]
+ dev-python/jmespath[${PYTHON_USEDEP}]
+ dev-python/libnacl[${PYTHON_USEDEP}]
+ dev-python/looseversion[${PYTHON_USEDEP}]
+ >=dev-python/msgpack-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/packaging-21.3[${PYTHON_USEDEP}]
+ >=dev-python/psutil-5.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pycryptodome-3.9.8[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-6.0.1[${PYTHON_USEDEP}]
+ >=dev-python/markupsafe-2.1.2[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.31.0[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ dev-python/tomli[${PYTHON_USEDEP}]
+ dev-python/watchdog[${PYTHON_USEDEP}]
+ libcloud? (
+ dev-python/aiohttp[${PYTHON_USEDEP}]
+ dev-python/aiosignal[${PYTHON_USEDEP}]
+ >=dev-python/apache-libcloud-2.5.0[${PYTHON_USEDEP}]
+ dev-python/async-timeout[${PYTHON_USEDEP}]
+ )
+ mako? ( dev-python/mako[${PYTHON_USEDEP}] )
+ ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
+ libvirt? (
+ dev-python/libvirt-python[${PYTHON_USEDEP}]
+ )
+ openssl? (
+ dev-libs/openssl:0=[-bindist(-)]
+ >=dev-python/pyopenssl-23.2.0[${PYTHON_USEDEP}]
+ )
+ raet? (
+ >=dev-python/libnacl-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/ioflo-1.1.7[${PYTHON_USEDEP}]
+ >=dev-python/raet-0.6.0[${PYTHON_USEDEP}]
+ )
+ cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] )
+ cheetah? ( >=dev-python/cheetah3-3.2.2[${PYTHON_USEDEP}] )
+ genshi? ( dev-python/genshi[${PYTHON_USEDEP}] )
+ mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
+ portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
+ keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
+ redis? ( dev-python/redis[${PYTHON_USEDEP}] )
+ selinux? ( sec-policy/selinux-salt )
+ nova? (
+ >=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}]
+ )
+ neutron? (
+ >=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}]
+ )
+ gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
+ profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
+ vim-syntax? ( app-vim/salt-vim )
+ zeromq? ( >=dev-python/pyzmq-19.0.0[${PYTHON_USEDEP}] )
+"
+BDEPEND="
+ dev-python/build[${PYTHON_USEDEP}]
+ test? (
+ ${RDEPEND}
+ dev-python/apache-libcloud[${PYTHON_USEDEP}]
+ dev-python/boto3[${PYTHON_USEDEP}]
+ >=dev-python/certifi-2023.07.22[${PYTHON_USEDEP}]
+ dev-python/cherrypy[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
+ dev-python/mako[${PYTHON_USEDEP}]
+ >=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
+ >=dev-python/moto-2.0.0[${PYTHON_USEDEP}]
+ dev-python/passlib[${PYTHON_USEDEP}]
+ dev-python/bcrypt[${PYTHON_USEDEP}]
+ dev-python/pip[${PYTHON_USEDEP}]
+ >=dev-python/pyopenssl-23.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-7.2.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-salt-factories-1.0.0_rc28[${PYTHON_USEDEP}]
+ dev-python/pytest-tempdir[${PYTHON_USEDEP}]
+ dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-shell-utilities[${PYTHON_USEDEP}]
+ dev-python/pytest-skip-markers[${PYTHON_USEDEP}]
+ dev-python/pytest-system-statistics[${PYTHON_USEDEP}]
+ dev-python/pytest-custom-exit-code[${PYTHON_USEDEP}]
+ dev-python/flaky[${PYTHON_USEDEP}]
+ net-dns/bind-tools
+ >=dev-python/virtualenv-20.3.0[${PYTHON_USEDEP}]
+ dev-util/yamllint[${PYTHON_USEDEP}]
+ !x86? ( >=dev-python/boto3-1.21.46[${PYTHON_USEDEP}] )
+ )
+"
+
+DOCS=( README.rst AUTHORS )
+
+REQUIRED_USE="|| ( raet zeromq )
+ test? ( cheetah genshi )"
+RESTRICT="!test? ( test ) x86? ( test )"
+
+PATCHES=(
+ "${FILESDIR}/salt-3003-gentoolkit-revdep.patch"
+ "${FILESDIR}/salt-3005.1-no-entry-points.patch"
+)
+
+python_prepare_all() {
+ local -a remove_test_files=(
+ # remove tests with external dependencies that may not be available, and
+ # tests that don't work in sandbox
+ tests/pytests/functional/modules/file/test_readlink.py
+ tests/pytests/functional/modules/file/test_symlink.py
+ tests/pytests/functional/modules/state/test_jinja_filters.py
+ tests/pytests/functional/modules/state/test_jinja_renderer.py
+ tests/pytests/functional/modules/state/test_mako_renderer.py
+ tests/pytests/functional/modules/state/test_pyobjects_renderer.py
+ tests/pytests/functional/pillar/test_gpg.py
+ tests/pytests/functional/runners/test_winrepo.py
+ tests/pytests/functional/states/file/test_keyvalue.py
+ tests/pytests/functional/states/file/test_patch.py
+ tests/pytests/functional/transport/server/test_req_channel.py
+ tests/pytests/functional/utils/test_async_event_publisher.py
+ tests/pytests/integration/master/test_clear_funcs.py
+ tests/pytests/integration/minion/test_reauth.py
+ tests/pytests/integration/returners/test_noop_return.py
+ tests/pytests/integration/runners/test_manage.py
+ tests/pytests/integration/states/test_ini_manage.py
+ tests/pytests/integration/states/test_state_test.py
+ tests/pytests/integration/utils/test_templates.py
+ tests/pytests/unit/loader/test_lazy.py
+ tests/pytests/unit/modules/test_aptpkg.py
+ tests/pytests/unit/roster/test_dir.py
+ tests/pytests/unit/states/file/test_keyvalue.py
+ tests/pytests/unit/utils/jinja/test_get_template.py
+ tests/pytests/unit/utils/jinja/test_salt_cache_loader.py
+ tests/unit/modules/test_boto_{vpc,secgroup,elb}.py
+ tests/unit/netapi/rest_tornado/test_saltnado.py
+ tests/unit/{test_{zypp_plugins,module_names},utils/test_extend}.py
+
+ # tests that require network access
+ tests/integration/cloud
+ tests/integration/netapi
+ tests/kitchen/test_kitchen.py
+ tests/kitchen/tests/wordpress/tests
+ tests/pytests/functional/cli/test_salt_cloud.py
+ tests/pytests/functional/cli/test_salt_run_.py
+ tests/pytests/functional/modules/test_http.py
+ tests/pytests/functional/modules/test_pip.py
+ tests/pytests/integration/cli/test_salt_proxy.py
+ tests/pytests/integration/modules/state/test_state.py
+ tests/pytests/integration/modules/state/test_state_state_events.py
+ tests/pytests/integration/modules/test_jinja.py
+ tests/pytests/integration/modules/test_state.py
+ tests/pytests/integration/modules/test_test.py
+ tests/pytests/integration/pillar/cache/test_pillar_cache.py
+ tests/pytests/integration/pillar/test_pillar_include.py
+ tests/pytests/integration/proxy/test_simple.py
+ tests/pytests/integration/runners/state/orchestrate/test_events.py
+ tests/pytests/integration/wheel/test_pillar_roots.py
+ tests/pytests/unit/client/ssh/test_ssh.py
+ tests/pytests/unit/test_client.py
+ tests/pytests/{integration,functional}/netapi
+ tests/unit/modules/test_boto3_elasticsearch.py
+ tests/unit/modules/test_boto3_route53.py
+ tests/unit/modules/test_network.py
+ tests/unit/{states,modules}/test_zcbuildout.py
+
+ # tests require root access
+ tests/integration/pillar/test_git_pillar.py
+ tests/integration/states/test_supervisord.py
+ tests/pytests/functional/states/file/test_accumulated.py
+ tests/pytests/scenarios/performance/test_performance.py
+ tests/pytests/unit/cloud/test_map.py
+ tests/pytests/unit/modules/state/test_state.py
+ tests/pytests/unit/modules/state/test_top_file_merge.py
+ tests/pytests/unit/proxy/test_netmiko_px.py
+ tests/pytests/unit/proxy/test_ssh_sample.py
+ tests/pytests/unit/roster/test_sshknownhosts.py
+ )
+
+ rm -r "${remove_test_files[@]}" || die
+
+ # axe the boto dep (bug #888235)
+ find "${S}/tests" -name 'test_boto_*.py' -delete || die
+
+ # removes contextvars, see bug: https://bugs.gentoo.org/799431
+ sed -i '/^contextvars/d' requirements/base.txt || die
+
+ # make sure pkg_resources doesn't bomb because pycrypto isn't installed
+ find "${S}" -name '*.txt' -print0 | xargs -0 sed -e '/pycrypto>/ d ; /pycryptodomex/ d' -i || die
+ # pycryptodome rather than pycryptodomex
+ find "${S}" -name '*.py' -print0 | xargs -0 -- sed -i -e 's:Cryptodome:Crypto:g' -- || die
+
+ # called_once should be assert_called_once_with
+ find "${S}/tests" -name '*.py' -print0 | xargs -0 -- sed -i -e 's:[.]called_once:.assert_called_once:g' -- || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_install_all() {
+ local svc
+ USE_SETUPTOOLS=1 distutils-r1_python_install_all
+
+ for svc in minion master syndic api; do
+ newinitd "${FILESDIR}"/${svc}-initd-5 salt-${svc}
+ newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
+ systemd_dounit "${FILESDIR}"/salt-${svc}.service
+ done
+
+ insinto /etc/${PN}
+ doins -r conf/*
+}
+
+python_test() {
+ local -a EPYTEST_DESELECT=(
+ # doesn't like the distutils warning
+ tests/pytests/integration/cli/test_batch.py::test_batch_retcode
+ tests/pytests/integration/cli/test_batch.py::test_multiple_modules_in_batch
+
+ # hangs indefinitely
+ tests/pytests/unit/test_minion.py::test_master_type_disable
+
+ # needs root
+ tests/pytests/unit/modules/test_cmdmod.py::test_runas_env_sudo_group
+ tests/pytests/unit/modules/test_portage_config.py::test_enforce_nice_config
+ tests/pytests/integration/modules/test_cmdmod.py::test_long_stdout
+
+ # don't like sandbox
+ tests/pytests/functional/cli/test_salt.py::test_help_log
+ tests/pytests/functional/cli/test_salt.py::test_versions_report
+ tests/pytests/functional/fileserver/test_roots.py::test_symlink_list
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_content
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_empty_file
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_append_on_match
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_match_newline
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_match_no_newline
+ tests/pytests/functional/modules/test_defaults.py::test_defaults_get
+ tests/pytests/functional/pillar/test_top.py::test_pillar_top_compound_match
+ tests/pytests/functional/states/file/test_append.py::test_file_append_check_cmd
+ tests/pytests/functional/states/file/test_blockreplace.py::test_issue_49043
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_in
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_in_with_id
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_with_name
+ tests/pytests/functional/states/file/test_managed.py::test_file_managed_requisites
+ tests/pytests/functional/states/file/test_managed.py::test_issue_8947_utf8_sls
+ tests/pytests/functional/states/file/test_managed.py::test_managed_escaped_file_path
+ tests/pytests/functional/states/file/test_managed.py::test_managed_file_issue_51208
+ tests/pytests/functional/states/file/test_managed.py::test_managed_file_with_grains_data
+ tests/pytests/functional/states/file/test_managed.py::test_managed_latin1_diff
+ tests/pytests/functional/states/file/test_managed.py::test_managed_source_hash_indifferent_case
+ tests/pytests/functional/states/file/test_managed.py::test_managed_unicode_jinja_with_tojson_filter
+ tests/pytests/functional/states/file/test_managed.py::test_verify_ssl_https_source[False]
+ tests/pytests/functional/states/file/test_managed.py::test_verify_ssl_https_source[True]
+ tests/pytests/functional/states/file/test_recurse.py::test_issue_2726_mode_kwarg
+ tests/pytests/functional/states/file/test_replace.py::test_file_replace_check_cmd
+ tests/pytests/functional/states/file/test_replace.py::test_file_replace_prerequired_issues_55775
+ tests/pytests/functional/utils/functools/test_namespaced_function.py::test_namespacing
+ tests/pytests/integration/ssh/test_pillar_compilation.py::test_gpg_pillar
+ tests/pytests/integration/ssh/test_pillar_compilation.py::test_saltutil_runner
+ tests/pytests/unit/_logging/handlers/test_deferred_stream_handler.py::test_deferred_write_on_flush
+ tests/pytests/unit/_logging/handlers/test_deferred_stream_handler.py::test_sync_with_handlers
+ tests/pytests/unit/client/ssh/test_single.py::test_run_with_pre_flight_args
+ tests/pytests/unit/config/schemas/test_ssh.py::test_config_validate
+ tests/pytests/unit/modules/test_aptpkg.py::test_call_apt_dpkg_lock
+ tests/pytests/unit/modules/test_msteams.py::test_post_card
+ tests/pytests/unit/modules/test_portage_config.py::test_enforce_nice_config
+ tests/pytests/unit/modules/test_saltutil.py::test_clear_job_cache
+ tests/pytests/unit/modules/test_saltutil.py::test_list_extmods
+ tests/pytests/unit/modules/test_yumpkg.py::test_get_yum_config
+ tests/pytests/unit/pillar/test_pillar.py::test_pillar_get_cache_disk
+ tests/pytests/unit/renderers/test_yamlex.py::test_basic
+ tests/pytests/unit/renderers/test_yamlex.py::test_complex
+ tests/pytests/unit/states/test_file.py::test_file_recurse_directory_test
+ tests/pytests/unit/test_ext_importers.py::test_tornado_import_override
+ tests/pytests/unit/test_master.py::test_fileserver_duration
+ tests/pytests/unit/test_template.py::test_compile_template_str_mkstemp_cleanup
+ tests/pytests/unit/utils/test_cache.py::test_context_wrapper
+ tests/pytests/unit/utils/test_cache.py::test_refill_cache
+ tests/pytests/unit/utils/test_cache.py::test_set_cache
+ tests/pytests/unit/utils/test_http.py::test_requests_session_verify_ssl_false
+ tests/pytests/unit/utils/test_vt.py::test_log_sanitize
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_anyof_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_array_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_array_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_dict_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_hostname_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_not_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_oneof_config_validation
+ tests/unit/utils/test_schema.py::ConfigTestCase::test_optional_requirements_config_validation
+ tests/unit/utils/test_vt.py::test_split_multibyte_characters_shiftjis
+ tests/unit/utils/test_vt.py::test_split_multibyte_characters_unicode
+
+ # tests that need network access
+ tests/pytests/unit/utils/test_http.py::test_query_proxy
+ tests/pytests/unit/utils/test_http.py::test_backends_decode_body_false
+ tests/pytests/unit/utils/test_http.py::test_backends_decode_body_true
+ tests/pytests/unit/utils/test_network.py::test_isportopen
+ )
+
+ # testsuite likes lots of files
+ ulimit -n 4096 || die
+
+ # ${T} is too long a path for the tests to work
+ local TMPDIR
+ TMPDIR="$(mktemp --directory --tmpdir=/tmp ${PN}-XXXX)" || die
+ (
+ export TMPDIR
+ cleanup() { rm -rf "${TMPDIR}" || die; }
+
+ trap cleanup EXIT
+
+ addwrite "${TMPDIR}"
+
+ USE_SETUPTOOLS=1 NO_INTERNET=1 SHELL="/bin/bash" \
+ epytest
+ )
+}
diff --git a/app-admin/salt/salt-3006.7-r1.ebuild b/app-admin/salt/salt-3006.7-r1.ebuild
new file mode 100644
index 000000000000..6536ba08a015
--- /dev/null
+++ b/app-admin/salt/salt-3006.7-r1.ebuild
@@ -0,0 +1,358 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_1{0..1} )
+
+DISTUTILS_USE_PEP517=setuptools
+inherit systemd distutils-r1
+
+DESCRIPTION="Salt is a remote execution and configuration manager"
+HOMEPAGE="https://www.saltstack.com/resources/community/
+ https://github.com/saltstack"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/${PN}stack/${PN}.git"
+ EGIT_BRANCH="develop"
+else
+ inherit pypi
+ KEYWORDS="amd64 ~riscv ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE="
+ cheetah cherrypy ldap libcloud libvirt genshi gnupg keyring mako
+ mongodb neutron nova openssl portage profile redis selinux test raet
+ +zeromq vim-syntax
+"
+
+RDEPEND="
+ sys-apps/pciutils
+ >=dev-python/cryptography-41.0.3[${PYTHON_USEDEP}]
+ >=dev-python/distro-1.5[${PYTHON_USEDEP}]
+ >=dev-python/jinja-3.1.3[${PYTHON_USEDEP}]
+ dev-python/jmespath[${PYTHON_USEDEP}]
+ dev-python/libnacl[${PYTHON_USEDEP}]
+ dev-python/looseversion[${PYTHON_USEDEP}]
+ >=dev-python/msgpack-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/packaging-21.3[${PYTHON_USEDEP}]
+ >=dev-python/psutil-5.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pycryptodome-3.19.1[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-6.0.1[${PYTHON_USEDEP}]
+ >=dev-python/markupsafe-2.1.2[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.31.0[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ dev-python/tomli[${PYTHON_USEDEP}]
+ dev-python/watchdog[${PYTHON_USEDEP}]
+ libcloud? (
+ dev-python/aiohttp[${PYTHON_USEDEP}]
+ dev-python/aiosignal[${PYTHON_USEDEP}]
+ >=dev-python/apache-libcloud-2.5.0[${PYTHON_USEDEP}]
+ dev-python/async-timeout[${PYTHON_USEDEP}]
+ )
+ mako? ( dev-python/mako[${PYTHON_USEDEP}] )
+ ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
+ libvirt? (
+ dev-python/libvirt-python[${PYTHON_USEDEP}]
+ )
+ openssl? (
+ dev-libs/openssl:0=[-bindist(-)]
+ >=dev-python/pyopenssl-23.2.0[${PYTHON_USEDEP}]
+ )
+ raet? (
+ >=dev-python/libnacl-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/ioflo-1.1.7[${PYTHON_USEDEP}]
+ >=dev-python/raet-0.6.0[${PYTHON_USEDEP}]
+ )
+ cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] )
+ cheetah? ( >=dev-python/cheetah3-3.2.2[${PYTHON_USEDEP}] )
+ genshi? ( dev-python/genshi[${PYTHON_USEDEP}] )
+ mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
+ portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
+ keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
+ redis? ( dev-python/redis[${PYTHON_USEDEP}] )
+ selinux? ( sec-policy/selinux-salt )
+ nova? (
+ >=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}]
+ )
+ neutron? (
+ >=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}]
+ )
+ gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
+ profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
+ vim-syntax? ( app-vim/salt-vim )
+ zeromq? ( >=dev-python/pyzmq-19.0.0[${PYTHON_USEDEP}] )
+"
+BDEPEND="
+ dev-python/build[${PYTHON_USEDEP}]
+ test? (
+ ${RDEPEND}
+ app-arch/zip
+ dev-python/apache-libcloud[${PYTHON_USEDEP}]
+ dev-python/boto3[${PYTHON_USEDEP}]
+ >=dev-python/certifi-2023.07.22[${PYTHON_USEDEP}]
+ dev-python/cherrypy[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
+ dev-python/mako[${PYTHON_USEDEP}]
+ >=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
+ >=dev-python/moto-2.0.0[${PYTHON_USEDEP}]
+ <dev-python/moto-5[${PYTHON_USEDEP}]
+ dev-python/passlib[${PYTHON_USEDEP}]
+ dev-python/bcrypt[${PYTHON_USEDEP}]
+ dev-python/pip[${PYTHON_USEDEP}]
+ >=dev-python/pyopenssl-23.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-7.2.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-salt-factories-1.0.0_rc28[${PYTHON_USEDEP}]
+ dev-python/pytest-tempdir[${PYTHON_USEDEP}]
+ dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-shell-utilities[${PYTHON_USEDEP}]
+ dev-python/pytest-skip-markers[${PYTHON_USEDEP}]
+ dev-python/pytest-system-statistics[${PYTHON_USEDEP}]
+ dev-python/pytest-custom-exit-code[${PYTHON_USEDEP}]
+ dev-python/flaky[${PYTHON_USEDEP}]
+ net-dns/bind-tools
+ >=dev-python/virtualenv-20.3.0[${PYTHON_USEDEP}]
+ dev-util/yamllint[${PYTHON_USEDEP}]
+ !x86? ( >=dev-python/boto3-1.21.46[${PYTHON_USEDEP}] )
+ )
+"
+
+DOCS=( README.rst AUTHORS )
+
+REQUIRED_USE="|| ( raet zeromq )
+ test? ( cheetah genshi )"
+RESTRICT="!test? ( test ) x86? ( test )"
+
+PATCHES=(
+ "${FILESDIR}/salt-3003-gentoolkit-revdep.patch"
+ "${FILESDIR}/salt-3005.1-no-entry-points.patch"
+)
+
+python_prepare_all() {
+ local -a remove_test_files=(
+ # remove tests with external dependencies that may not be available, and
+ # tests that don't work in sandbox
+ tests/pytests/functional/modules/file/test_readlink.py
+ tests/pytests/functional/modules/file/test_symlink.py
+ tests/pytests/functional/modules/state/test_jinja_filters.py
+ tests/pytests/functional/modules/state/test_jinja_renderer.py
+ tests/pytests/functional/modules/state/test_mako_renderer.py
+ tests/pytests/functional/modules/state/test_pyobjects_renderer.py
+ tests/pytests/functional/pillar/test_gpg.py
+ tests/pytests/functional/runners/test_winrepo.py
+ tests/pytests/functional/states/file/test_keyvalue.py
+ tests/pytests/functional/states/file/test_patch.py
+ tests/pytests/functional/transport/server/test_req_channel.py
+ tests/pytests/functional/utils/test_async_event_publisher.py
+ tests/pytests/integration/master/test_clear_funcs.py
+ tests/pytests/integration/minion/test_reauth.py
+ tests/pytests/integration/modules/test_cmdmod.py
+ tests/pytests/integration/modules/test_jinja.py
+ tests/pytests/integration/returners/test_noop_return.py
+ tests/pytests/integration/runners/test_manage.py
+ tests/pytests/integration/ssh/test_pillar_compilation.py
+ tests/pytests/integration/states/test_ini_manage.py
+ tests/pytests/integration/states/test_state_test.py
+ tests/pytests/integration/utils/test_templates.py
+ tests/pytests/pkg/integration/test_check_imports.py
+ tests/pytests/pkg/integration/test_clean_zmq_teardown.py
+ tests/pytests/pkg/integration/test_enabled_disabled.py
+ tests/pytests/pkg/integration/test_help.py
+ tests/pytests/pkg/integration/test_logrotate_config.py
+ tests/pytests/pkg/integration/test_pkg.py
+ tests/pytests/pkg/integration/test_python.py
+ tests/pytests/unit/loader/test_lazy.py
+ tests/pytests/unit/renderers/test_yamlex.py
+ tests/pytests/unit/roster/test_dir.py
+ tests/pytests/unit/states/file/test_keyvalue.py
+ tests/pytests/unit/utils/jinja/test_get_template.py
+ tests/pytests/unit/utils/jinja/test_salt_cache_loader.py
+ tests/pytests/unit/utils/test_cache.py
+ tests/pytests/unit/utils/test_versions.py
+ tests/unit/modules/test_boto_{vpc,secgroup,elb}.py
+ tests/unit/netapi/rest_tornado/test_saltnado.py
+ tests/unit/states/test_boto_vpc.py
+ tests/unit/states/test_module.py
+ tests/unit/utils/test_schema.py
+ tests/unit/{test_{zypp_plugins,module_names},utils/test_extend}.py
+
+ # tests that require network access
+ tests/integration/cloud
+ tests/kitchen/test_kitchen.py
+ tests/kitchen/tests/wordpress/tests
+ tests/pytests/functional/cli/test_salt_cloud.py
+ tests/pytests/functional/cli/test_salt_run_.py
+ tests/pytests/functional/modules/test_http.py
+ tests/pytests/functional/modules/test_pip.py
+ tests/pytests/integration/cli/test_salt_proxy.py
+ tests/pytests/integration/modules/state/test_state.py
+ tests/pytests/integration/modules/state/test_state_state_events.py
+ tests/pytests/integration/pillar/cache/test_pillar_cache.py
+ tests/pytests/integration/pillar/test_pillar_include.py
+ tests/pytests/integration/proxy/test_simple.py
+ tests/pytests/integration/runners/state/orchestrate/test_events.py
+ tests/pytests/integration/wheel/test_pillar_roots.py
+ tests/pytests/pkg/downgrade/test_salt_downgrade.py
+ tests/pytests/pkg/integration/test_pip.py
+ tests/pytests/pkg/integration/test_pip_upgrade.py
+ tests/pytests/pkg/integration/test_salt_api.py
+ tests/pytests/pkg/integration/test_salt_call.py
+ tests/pytests/pkg/integration/test_salt_exec.py
+ tests/pytests/pkg/integration/test_salt_grains.py
+ tests/pytests/pkg/integration/test_salt_key.py
+ tests/pytests/pkg/integration/test_salt_minion.py
+ tests/pytests/pkg/integration/test_salt_output.py
+ tests/pytests/pkg/integration/test_salt_pillar.py
+ tests/pytests/pkg/integration/test_salt_state_file.py
+ tests/pytests/pkg/integration/test_salt_ufw.py
+ tests/pytests/pkg/integration/test_salt_user.py
+ tests/pytests/pkg/integration/test_systemd_config.py
+ tests/pytests/pkg/integration/test_version.py
+ tests/pytests/pkg/upgrade/test_salt_upgrade.py
+ tests/pytests/unit/client/ssh/test_ssh.py
+ tests/pytests/unit/loader/test_loading_modules.py
+ tests/pytests/unit/test_client.py
+ tests/pytests/unit/utils/test_aws.py
+ tests/pytests/unit/utils/test_http.py
+ tests/pytests/{integration,functional}/netapi tests/integration/netapi
+ tests/unit/modules/test_boto3_elasticsearch.py
+ tests/unit/modules/test_boto3_route53.py
+ tests/unit/modules/test_network.py
+ tests/unit/{states,modules}/test_zcbuildout.py
+
+ # tests require root access
+ tests/integration/pillar/test_git_pillar.py
+ tests/integration/states/test_supervisord.py
+ tests/pytests/functional/cli/test_salt.py
+ tests/pytests/functional/states/file/test_accumulated.py
+ tests/pytests/scenarios/performance/test_performance.py
+ tests/pytests/unit/cloud/test_map.py
+ tests/pytests/unit/modules/state/test_state.py
+ tests/pytests/unit/modules/state/test_top_file_merge.py
+ tests/pytests/unit/proxy/test_netmiko_px.py
+ tests/pytests/unit/proxy/test_ssh_sample.py
+ tests/pytests/unit/roster/test_sshknownhosts.py
+ )
+
+ rm -r "${remove_test_files[@]}" || die
+
+ # axe the boto dep (bug #888235)
+ find "${S}/tests" -name 'test_boto_*.py' -delete || die
+
+ # removes contextvars, see bug: https://bugs.gentoo.org/799431
+ sed -i '/^contextvars/d' requirements/base.txt || die
+
+ # called_once should be assert_called_once_with
+ find "${S}/tests" -name '*.py' -print0 | xargs -0 -- sed -i -e 's:[.]called_once:.assert_called_once:g' -- || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_install_all() {
+ local svc
+ USE_SETUPTOOLS=1 distutils-r1_python_install_all
+
+ for svc in minion master syndic api; do
+ newinitd "${FILESDIR}"/${svc}-initd-5 salt-${svc}
+ newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
+ systemd_dounit "${FILESDIR}"/salt-${svc}.service
+ done
+
+ insinto /etc/${PN}
+ doins -r conf/*
+}
+
+python_test() {
+ local -a EPYTEST_DESELECT=(
+ # doesn't like the distutils warning
+ tests/pytests/integration/cli/test_batch.py::test_batch_retcode
+ tests/pytests/integration/cli/test_batch.py::test_multiple_modules_in_batch
+
+ # hangs indefinitely
+ tests/pytests/unit/test_minion.py::test_master_type_disable
+
+ # needs root
+ tests/pytests/unit/modules/test_cmdmod.py::test_runas_env_sudo_group
+ tests/pytests/unit/modules/test_portage_config.py::test_enforce_nice_config
+
+ # don't like sandbox
+ tests/pytests/functional/fileserver/test_roots.py::test_symlink_list
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_content
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_empty_file
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_append_on_match
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_match_newline
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_match_no_newline
+ tests/pytests/functional/modules/test_defaults.py::test_defaults_get
+ tests/pytests/functional/pillar/test_top.py::test_pillar_top_compound_match
+ tests/pytests/functional/states/file/test_append.py::test_file_append_check_cmd
+ tests/pytests/functional/states/file/test_blockreplace.py::test_issue_49043
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_in
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_in_with_id
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_with_name
+ tests/pytests/functional/states/file/test_managed.py::test_file_managed_requisites
+ tests/pytests/functional/states/file/test_managed.py::test_issue_8947_utf8_sls
+ tests/pytests/functional/states/file/test_managed.py::test_managed_escaped_file_path
+ tests/pytests/functional/states/file/test_managed.py::test_managed_file_issue_51208
+ tests/pytests/functional/states/file/test_managed.py::test_managed_file_with_grains_data
+ tests/pytests/functional/states/file/test_managed.py::test_managed_latin1_diff
+ tests/pytests/functional/states/file/test_managed.py::test_managed_source_hash_indifferent_case
+ tests/pytests/functional/states/file/test_managed.py::test_managed_unicode_jinja_with_tojson_filter
+ tests/pytests/functional/states/file/test_recurse.py::test_issue_2726_mode_kwarg
+ tests/pytests/functional/states/file/test_replace.py::test_file_replace_check_cmd
+ tests/pytests/functional/states/file/test_replace.py::test_file_replace_prerequired_issues_55775
+ tests/pytests/functional/utils/functools/test_namespaced_function.py::test_namespacing
+ tests/pytests/integration/modules/test_state.py::test_logging_and_state_output_order
+ tests/pytests/integration/modules/test_test.py::test_deprecation_warning_emits_deprecation_warnings
+ tests/pytests/unit/config/schemas/test_ssh.py::test_config_validate
+ tests/pytests/unit/grains/test_core.py::test_get_machine_id
+ tests/pytests/unit/loader/test_loader.py::test_named_loader_context_name_not_packed
+ tests/pytests/unit/modules/test_saltutil.py::test_clear_job_cache
+ tests/pytests/unit/modules/test_saltutil.py::test_list_extmods
+ tests/pytests/unit/pillar/test_pillar.py::test_pillar_get_cache_disk
+ tests/pytests/unit/state/test_state_compiler.py::test_verify_high_too_many_functions_declared_error_message
+ tests/pytests/unit/test_ext_importers.py::test_tornado_import_override
+ tests/pytests/unit/utils/test_rsax931.py::test_find_libcrypto_darwin_catalina
+ tests/pytests/unit/utils/test_versions.py::test_warn_until_good_version_argument
+ tests/unit/transport/test_ipc.py::IPCMessagePubSubCase::test_async_reading_streamclosederror
+
+ # tests that need network access
+ tests/pytests/functional/states/file/test_managed.py::test_verify_ssl_https_source
+ tests/pytests/unit/test_ext_importers.py::test_tornado_import_override
+ tests/pytests/unit/modules/test_aptpkg.py::test_sourceslist_multiple_comps
+ tests/pytests/unit/modules/test_aptpkg.py::test_sourceslist_architectures
+ tests/pytests/unit/modules/test_yumpkg.py::test_get_yum_config
+ tests/pytests/unit/modules/test_yumpkg.py::test_get_yum_config_value_none
+ tests/pytests/unit/utils/test_http.py::test_query_proxy
+ tests/pytests/unit/utils/test_http.py::test_backends_decode_body_false
+ tests/pytests/unit/utils/test_http.py::test_backends_decode_body_true
+ tests/pytests/unit/utils/test_network.py::test_isportopen
+ )
+ [[ ${EPYTHON#*.} -ge 11 ]] && EPYTEST_DESELECT+=(
+ tests/unit/test_master.py::TransportMethodsTest::test_aes_funcs_black
+ tests/unit/test_master.py::TransportMethodsTest::test_clear_funcs_black
+ )
+ [[ ${EPYTHON#*.} -ge 12 ]] && EPYTEST_DESELECT+=(
+ tests/integration/modules/test_hosts.py::HostsModuleTest::test_set_host
+ )
+
+ # testsuite likes lots of files
+ ulimit -n 4096 || die
+
+ # ${T} is too long a path for the tests to work
+ local TMPDIR
+ TMPDIR="$(mktemp --directory --tmpdir=/tmp ${PN}-XXXX)" || die
+ (
+ export TMPDIR
+ cleanup() { rm -rf "${TMPDIR}" || die; }
+
+ trap cleanup EXIT
+
+ addwrite "${TMPDIR}"
+
+ USE_SETUPTOOLS=1 NO_INTERNET=1 SHELL="/bin/bash" \
+ epytest
+ )
+}
diff --git a/app-admin/salt/salt-3007.0-r1.ebuild b/app-admin/salt/salt-3007.0-r1.ebuild
new file mode 100644
index 000000000000..13e5222fc45f
--- /dev/null
+++ b/app-admin/salt/salt-3007.0-r1.ebuild
@@ -0,0 +1,610 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_1{0..2} )
+
+DISTUTILS_USE_PEP517=setuptools
+inherit systemd distutils-r1
+
+DESCRIPTION="Salt is a remote execution and configuration manager"
+HOMEPAGE="https://www.saltstack.com/resources/community/
+ https://github.com/saltstack"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/${PN}stack/${PN}.git"
+ EGIT_BRANCH="develop"
+else
+ inherit pypi
+ KEYWORDS="amd64 ~riscv ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE="
+ cheetah cherrypy ldap libcloud libvirt genshi gnupg keyring mako
+ mongodb neutron nova portage profile redis selinux test raet
+ +zeromq vim-syntax
+"
+
+RDEPEND="
+ sys-apps/pciutils
+ dev-libs/openssl:0=[-bindist(-)]
+ dev-python/aiohttp[${PYTHON_USEDEP}]
+ >=dev-python/cherrypy-18.6.1[${PYTHON_USEDEP}]
+ >=dev-python/cryptography-42.0.0[${PYTHON_USEDEP}]
+ >=dev-python/distro-1.5[${PYTHON_USEDEP}]
+ dev-python/importlib-metadata[${PYTHON_USEDEP}]
+ >=dev-python/jinja-3.1.3[${PYTHON_USEDEP}]
+ dev-python/jmespath[${PYTHON_USEDEP}]
+ dev-python/libnacl[${PYTHON_USEDEP}]
+ dev-python/looseversion[${PYTHON_USEDEP}]
+ >=dev-python/msgpack-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/packaging-21.3[${PYTHON_USEDEP}]
+ >=dev-python/psutil-5.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pycryptodome-3.19.1[${PYTHON_USEDEP}]
+ >=dev-python/pyopenssl-24.0.0[${PYTHON_USEDEP}]
+ >=dev-python/python-dateutil-2.8.1[${PYTHON_USEDEP}]
+ dev-python/python-gnupg[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-6.0.1[${PYTHON_USEDEP}]
+ >=dev-python/markupsafe-2.1.2[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.31.0[${PYTHON_USEDEP}]
+ dev-python/setproctitle[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ dev-python/tomli[${PYTHON_USEDEP}]
+ dev-python/tornado[${PYTHON_USEDEP}]
+ dev-python/watchdog[${PYTHON_USEDEP}]
+ libcloud? (
+ >=dev-python/aiohttp-3.9.0[${PYTHON_USEDEP}]
+ dev-python/aiosignal[${PYTHON_USEDEP}]
+ >=dev-python/apache-libcloud-2.5.0[${PYTHON_USEDEP}]
+ dev-python/async-timeout[${PYTHON_USEDEP}]
+ )
+ mako? ( dev-python/mako[${PYTHON_USEDEP}] )
+ ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
+ libvirt? (
+ dev-python/libvirt-python[${PYTHON_USEDEP}]
+ )
+ raet? (
+ >=dev-python/libnacl-1.0.0[${PYTHON_USEDEP}]
+ >=dev-python/ioflo-1.1.7[${PYTHON_USEDEP}]
+ >=dev-python/raet-0.6.0[${PYTHON_USEDEP}]
+ )
+ cheetah? ( >=dev-python/cheetah3-3.2.2[${PYTHON_USEDEP}] )
+ genshi? ( dev-python/genshi[${PYTHON_USEDEP}] )
+ mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
+ portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
+ keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
+ redis? ( dev-python/redis[${PYTHON_USEDEP}] )
+ selinux? ( sec-policy/selinux-salt )
+ nova? (
+ $(python_gen_cond_dep '>=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}]' python3.1{0..1})
+ )
+ neutron? (
+ $(python_gen_cond_dep '>=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}]' python3.1{0..1})
+ )
+ gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
+ profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
+ vim-syntax? ( app-vim/salt-vim )
+ zeromq? ( >=dev-python/pyzmq-19.0.0[${PYTHON_USEDEP}] )
+"
+BDEPEND="
+ sys-apps/findutils
+ dev-python/build[${PYTHON_USEDEP}]
+ test? (
+ ${RDEPEND}
+ app-arch/zip
+ dev-python/apache-libcloud[${PYTHON_USEDEP}]
+ dev-python/boto3[${PYTHON_USEDEP}]
+ >=dev-python/certifi-2023.07.22[${PYTHON_USEDEP}]
+ dev-python/cherrypy[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
+ dev-python/mako[${PYTHON_USEDEP}]
+ >=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
+ >=dev-python/moto-2.0.0[${PYTHON_USEDEP}]
+ <dev-python/moto-5[${PYTHON_USEDEP}]
+ dev-python/passlib[${PYTHON_USEDEP}]
+ dev-python/bcrypt[${PYTHON_USEDEP}]
+ dev-python/pip[${PYTHON_USEDEP}]
+ dev-python/pygit2[${PYTHON_USEDEP}]
+ dev-python/pyinotify[${PYTHON_USEDEP}]
+ >=dev-python/pyopenssl-23.0.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-7.2.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-salt-factories-1.0.0_rc29[${PYTHON_USEDEP}]
+ dev-python/pytest-tempdir[${PYTHON_USEDEP}]
+ dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
+ dev-python/pytest-subtests[${PYTHON_USEDEP}]
+ dev-python/pytest-shell-utilities[${PYTHON_USEDEP}]
+ dev-python/pytest-skip-markers[${PYTHON_USEDEP}]
+ dev-python/pytest-system-statistics[${PYTHON_USEDEP}]
+ dev-python/pytest-custom-exit-code[${PYTHON_USEDEP}]
+ dev-python/flaky[${PYTHON_USEDEP}]
+ net-dns/bind-tools
+ >=dev-python/virtualenv-20.3.0[${PYTHON_USEDEP}]
+ dev-util/yamllint[${PYTHON_USEDEP}]
+ !x86? ( >=dev-python/boto3-1.21.46[${PYTHON_USEDEP}] )
+ )
+"
+
+DOCS=( README.rst AUTHORS )
+
+REQUIRED_USE="
+ || ( raet zeromq )
+ test? ( cheetah genshi )
+ nova? ( || ( python_targets_python3_10 python_targets_python3_11 ) )
+ neutron? ( || ( python_targets_python3_10 python_targets_python3_11 ) )
+"
+RESTRICT="
+ !test? ( test )
+ x86? ( test )
+"
+
+PATCHES=(
+ "${FILESDIR}/salt-3003-gentoolkit-revdep.patch"
+)
+
+python_prepare_all() {
+ local -a remove_test_files=(
+ # remove tests with external dependencies that may not be available, and
+ # tests that don't work in sandbox
+ tests/integration/externalapi/test_venafiapi.py
+ tests/integration/modules/test_rabbitmq.py
+ tests/integration/modules/test_supervisord.py
+ tests/integration/states/test_match.py
+ tests/pytests/functional/fileserver/hgfs/test_hgfs.py
+ tests/pytests/functional/loader/test_loader.py
+ tests/pytests/functional/modules/file/test_readlink.py
+ tests/pytests/functional/modules/file/test_symlink.py
+ tests/pytests/functional/modules/state/test_jinja_filters.py
+ tests/pytests/functional/modules/state/test_jinja_renderer.py
+ tests/pytests/functional/modules/state/test_mako_renderer.py
+ tests/pytests/functional/modules/state/test_pyobjects_renderer.py
+ tests/pytests/functional/modules/test_aptpkg.py
+ tests/pytests/functional/modules/test_dockermod.py
+ tests/pytests/functional/modules/test_etcd_mod.py
+ tests/pytests/functional/modules/test_grains.py
+ tests/pytests/functional/modules/test_mac_service.py
+ tests/pytests/functional/modules/test_saltcheck.py
+ tests/pytests/functional/modules/test_saltutil.py
+ tests/pytests/functional/modules/test_test.py
+ tests/pytests/functional/pillar/hg_pillar/test_hg_pillar.py
+ tests/pytests/functional/pillar/test_git_pillar.py
+ tests/pytests/functional/pillar/test_gpg.py
+ tests/pytests/functional/returners/test_etcd_return.py
+ tests/pytests/functional/runners/test_winrepo.py
+ tests/pytests/functional/sdb/test_etcd_db.py
+ tests/pytests/functional/state/test_masterless_tops.py
+ tests/pytests/functional/states/file/test_keyvalue.py
+ tests/pytests/functional/states/file/test_patch.py
+ tests/pytests/functional/states/file/test_rename.py
+ tests/pytests/functional/states/rabbitmq
+ tests/pytests/functional/states/test_docker_container.py
+ tests/pytests/functional/states/test_docker_network.py
+ tests/pytests/functional/states/test_etcd_mod.py
+ tests/pytests/functional/states/test_module.py
+ tests/pytests/functional/states/test_mysql.py
+ tests/pytests/functional/states/test_svn.py
+ tests/pytests/functional/states/test_virtualenv_mod.py
+ tests/pytests/functional/test_version.py
+ tests/pytests/functional/utils/test_vault.py
+ tests/pytests/integration/cli/test_syndic_eauth.py
+ tests/pytests/integration/daemons/test_memory_leak.py
+ tests/pytests/integration/grains/test_grains.py
+ tests/pytests/integration/master/test_clear_funcs.py
+ tests/pytests/integration/minion/test_reauth.py
+ tests/pytests/integration/modules/grains/test_append.py
+ tests/pytests/integration/modules/grains/test_module.py
+ tests/pytests/integration/modules/saltutil/test_grains.py
+ tests/pytests/integration/modules/saltutil/test_modules.py
+ tests/pytests/integration/modules/saltutil/test_wheel.py
+ tests/pytests/integration/modules/state/test_state_pillar_errors.py
+ tests/pytests/integration/modules/state/test_state_test.py
+ tests/pytests/integration/modules/test_cmdmod.py
+ tests/pytests/integration/modules/test_event.py
+ tests/pytests/integration/modules/test_file.py
+ tests/pytests/integration/modules/test_jinja.py
+ tests/pytests/integration/modules/test_pillar.py
+ tests/pytests/integration/modules/test_pip.py
+ tests/pytests/integration/modules/test_vault.py
+ tests/pytests/integration/modules/test_virt.py
+ tests/pytests/integration/modules/test_x509_v2.py
+ tests/pytests/integration/proxy/test_deltaproxy.py
+ tests/pytests/integration/proxy/test_shell.py
+ tests/pytests/integration/reactor/test_reactor.py
+ tests/pytests/integration/returners/test_noop_return.py
+ tests/pytests/integration/runners/state/orchestrate/test_orchestrate.py
+ tests/pytests/integration/runners/test_cache.py
+ tests/pytests/integration/runners/test_jobs.py
+ tests/pytests/integration/runners/test_manage.py
+ tests/pytests/integration/runners/test_saltutil.py
+ tests/pytests/integration/runners/test_vault.py
+ tests/pytests/integration/sdb/test_vault.py
+ tests/pytests/integration/ssh/state/test_pillar_override.py
+ tests/pytests/integration/ssh/state/test_retcode_highstate_verification_requisite_fail.py
+ tests/pytests/integration/ssh/state/test_retcode_pillar_render_exception.py
+ tests/pytests/integration/ssh/state/test_retcode_render_exception.py
+ tests/pytests/integration/ssh/state/test_retcode_render_module_exception.py
+ tests/pytests/integration/ssh/state/test_retcode_run_fail.py
+ tests/pytests/integration/ssh/state/test_retcode_state_run_remote_exception.py
+ tests/pytests/integration/ssh/state/test_state.py
+ tests/pytests/integration/ssh/state/test_with_import_dir.py
+ tests/pytests/integration/ssh/test_cmdmod.py
+ tests/pytests/integration/ssh/test_config.py
+ tests/pytests/integration/ssh/test_cp.py
+ tests/pytests/integration/ssh/test_deploy.py
+ tests/pytests/integration/ssh/test_grains.py
+ tests/pytests/integration/ssh/test_jinja_mods.py
+ tests/pytests/integration/ssh/test_master.py
+ tests/pytests/integration/ssh/test_mine.py
+ tests/pytests/integration/ssh/test_pillar.py
+ tests/pytests/integration/ssh/test_pillar_compilation.py
+ tests/pytests/integration/ssh/test_pre_flight.py
+ tests/pytests/integration/ssh/test_publish.py
+ tests/pytests/integration/ssh/test_py_versions.py
+ tests/pytests/integration/ssh/test_raw.py
+ tests/pytests/integration/ssh/test_saltcheck.py
+ tests/pytests/integration/ssh/test_slsutil.py
+ tests/pytests/integration/states/test_beacon.py
+ tests/pytests/integration/states/test_file.py
+ tests/pytests/integration/states/test_include.py
+ tests/pytests/integration/states/test_ini_manage.py
+ tests/pytests/integration/states/test_state_test.py
+ tests/pytests/integration/states/test_x509_v2.py
+ tests/pytests/integration/utils/test_templates.py
+ tests/pytests/integration/wheel/test_key.py
+ tests/pytests/pkg/integration/test_check_imports.py
+ tests/pytests/pkg/integration/test_clean_zmq_teardown.py
+ tests/pytests/pkg/integration/test_enabled_disabled.py
+ tests/pytests/pkg/integration/test_help.py
+ tests/pytests/pkg/integration/test_logrotate_config.py
+ tests/pytests/pkg/integration/test_pkg.py
+ tests/pytests/pkg/integration/test_python.py
+ tests/pytests/scenarios/compat/test_with_versions.py
+ tests/pytests/unit/loader/test_lazy.py
+ tests/pytests/unit/modules/test_mongodb.py
+ tests/pytests/unit/modules/test_mysql.py
+ tests/pytests/unit/modules/test_schedule.py
+ tests/pytests/unit/pillar/test_consul_pillar.py
+ tests/pytests/unit/pillar/test_mysql.py
+ tests/pytests/unit/renderers/test_yamlex.py
+ tests/pytests/unit/roster/test_ansible.py
+ tests/pytests/unit/roster/test_dir.py
+ tests/pytests/unit/runners/test_reactor.py
+ tests/pytests/unit/states/file/test_keyvalue.py
+ tests/pytests/unit/utils/jinja/test_get_template.py
+ tests/pytests/unit/utils/jinja/test_salt_cache_loader.py
+ tests/pytests/unit/utils/test_cache.py
+ tests/pytests/unit/utils/test_etcd_util.py
+ tests/pytests/unit/utils/test_package.py
+ tests/pytests/unit/utils/test_versions.py
+ tests/unit/ext/test_ipaddress.py
+ tests/unit/modules/test_boto_elb.py
+ tests/unit/modules/test_boto_secgroup.py
+ tests/unit/modules/test_boto_vpc.py
+ tests/unit/modules/test_elasticsearch.py
+ tests/unit/modules/test_k8s.py
+ tests/unit/modules/test_kubernetesmod.py
+ tests/unit/modules/test_vsphere.py
+ tests/unit/netapi/rest_tornado/test_saltnado.py
+ tests/unit/states/test_boto_vpc.py
+ tests/unit/states/test_module.py
+ tests/unit/test_module_names.py
+ tests/unit/test_zypp_plugins.py
+ tests/unit/utils/test_extend.py
+ tests/unit/utils/test_pbm.py
+ tests/unit/utils/test_schema.py
+ tests/unit/utils/test_vmware.py
+ tests/unit/utils/test_vsan.py
+
+ # tests that require network access
+ tests/integration/cloud
+ tests/integration/netapi
+ tests/kitchen/test_kitchen.py
+ tests/kitchen/tests/wordpress/tests
+ tests/pytests/functional/cli/test_salt_cloud.py
+ tests/pytests/functional/cli/test_salt_run_.py
+ tests/pytests/functional/modules/test_ansiblegate.py
+ tests/pytests/functional/modules/test_http.py
+ tests/pytests/functional/modules/test_pip.py
+ tests/pytests/functional/netapi
+ tests/pytests/functional/utils/test_etcd_util.py
+ tests/pytests/functional/utils/test_http.py
+ tests/pytests/integration/cli/test_salt_proxy.py
+ tests/pytests/integration/daemons/test_masterapi.py
+ tests/pytests/integration/modules/state/test_state.py
+ tests/pytests/integration/modules/state/test_state_state_events.py
+ tests/pytests/integration/netapi
+ tests/pytests/integration/pillar/cache/test_pillar_cache.py
+ tests/pytests/integration/pillar/test_fileclient.py
+ tests/pytests/integration/pillar/test_pillar_include.py
+ tests/pytests/integration/proxy/test_simple.py
+ tests/pytests/integration/runners/state/orchestrate/test_events.py
+ tests/pytests/integration/wheel/test_pillar_roots.py
+ tests/pytests/pkg/downgrade/test_salt_downgrade.py
+ tests/pytests/pkg/integration/test_pip.py
+ tests/pytests/pkg/integration/test_pip_upgrade.py
+ tests/pytests/pkg/integration/test_salt_api.py
+ tests/pytests/pkg/integration/test_salt_call.py
+ tests/pytests/pkg/integration/test_salt_exec.py
+ tests/pytests/pkg/integration/test_salt_grains.py
+ tests/pytests/pkg/integration/test_salt_key.py
+ tests/pytests/pkg/integration/test_salt_minion.py
+ tests/pytests/pkg/integration/test_salt_output.py
+ tests/pytests/pkg/integration/test_salt_pillar.py
+ tests/pytests/pkg/integration/test_salt_state_file.py
+ tests/pytests/pkg/integration/test_salt_ufw.py
+ tests/pytests/pkg/integration/test_salt_user.py
+ tests/pytests/pkg/integration/test_systemd_config.py
+ tests/pytests/pkg/integration/test_version.py
+ tests/pytests/pkg/upgrade/test_salt_upgrade.py
+ tests/pytests/scenarios/cluster/test_cluster.py
+ tests/pytests/unit/client/ssh/test_ssh.py
+ tests/pytests/unit/cloud/clouds/vmware
+ tests/pytests/unit/loader/test_loading_modules.py
+ tests/pytests/unit/runners/test_net.py
+ tests/pytests/unit/states/file/test_mod_beacon.py
+ tests/pytests/unit/test_client.py
+ tests/pytests/unit/utils/test_aws.py
+ tests/pytests/unit/utils/test_http.py
+ tests/unit/modules/test_boto3_elasticsearch.py
+ tests/unit/modules/test_boto3_route53.py
+ tests/unit/modules/test_network.py
+ tests/unit/modules/test_zcbuildout.py
+ tests/unit/states/test_zcbuildout.py
+
+ # tests require root access
+ tests/integration/pillar/test_git_pillar.py
+ tests/integration/states/test_lxd_container.py
+ tests/integration/states/test_lxd_image.py
+ tests/integration/states/test_lxd_profile.py
+ tests/integration/states/test_supervisord.py
+ tests/pytests/functional/cache/test_mysql.py
+ tests/pytests/functional/cli/test_salt.py
+ tests/pytests/functional/modules/test_mysql.py
+ tests/pytests/functional/modules/test_vault.py
+ tests/pytests/functional/states/file/test_accumulated.py
+ tests/pytests/functional/utils/test_gitfs.py
+ tests/pytests/functional/utils/test_pillar.py
+ tests/pytests/scenarios/performance/test_performance.py
+ tests/pytests/unit/cloud/test_map.py
+ tests/pytests/unit/engines/test_slack_bolt_engine.py
+ tests/pytests/unit/modules/state/test_state.py
+ tests/pytests/unit/modules/state/test_top_file_merge.py
+ tests/pytests/unit/proxy/test_netmiko_px.py
+ tests/pytests/unit/proxy/test_ssh_sample.py
+ tests/pytests/unit/roster/test_sshknownhosts.py
+
+ # tests that require boto
+ tests/pytests/unit/engines/test_sqs_events.py
+
+ # first test always fails
+ tests/pytests/unit/utils/parsers/test_log_parsers.py
+ )
+
+ rm -r "${remove_test_files[@]}" || die
+
+ # axe the boto dep (bug #888235)
+ find "${S}/tests" -name 'test_boto_*.py' -delete || die
+
+ # removes contextvars, see bug: https://bugs.gentoo.org/799431
+ sed -i '/^contextvars/d' requirements/base.txt || die
+
+ # called_once should be assert_called_once_with
+ find "${S}/tests" -name '*.py' -print0 \
+ | xargs -0 -- sed -i -e 's:[.]called_once:.assert_called_once:g' -- || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_install_all() {
+ local -x USE_SETUPTOOLS=1
+ distutils-r1_python_install_all
+
+ local svc
+ for svc in minion master syndic api; do
+ newinitd "${FILESDIR}"/${svc}-initd-5 salt-${svc}
+ newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
+ systemd_dounit "${FILESDIR}"/salt-${svc}.service
+ done
+
+ insinto /etc/${PN}
+ doins -r conf/*
+}
+
+python_test() {
+ local -a EPYTEST_DESELECT=(
+ # doesn't like the distutils warning
+ tests/pytests/integration/cli/test_batch.py::test_batch_retcode
+ tests/pytests/integration/cli/test_batch.py::test_multiple_modules_in_batch
+
+ # hangs indefinitely
+ tests/pytests/unit/test_minion.py::test_master_type_disable
+
+ # needs root
+ tests/pytests/unit/modules/test_cmdmod.py::test_runas_env_sudo_group
+ tests/pytests/unit/modules/test_portage_config.py::test_enforce_nice_config
+ tests/unit/modules/test_saltcheck.py::SaltcheckTestCase::test_run_test_muliassert
+ tests/unit/modules/test_saltcheck.py::SaltcheckTestCase::test_run_test_muliassert_failure
+
+ # don't like sandbox
+ tests/integration/modules/test_cp.py::CPModuleTest::test_get_file_str_https
+ tests/integration/modules/test_cp.py::CPModuleTest::test_get_url_ftp
+ tests/integration/modules/test_cp.py::CPModuleTest::test_get_url_https
+ tests/integration/modules/test_cp.py::CPModuleTest::test_get_url_https_dest_empty
+ tests/integration/modules/test_cp.py::CPModuleTest::test_get_url_https_no_dest
+ tests/integration/states/test_git.py::LocalRepoGitTest::test_latest_force_reset_true_fast_forward
+ tests/pytests/functional/fileserver/test_roots.py::test_symlink_list
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_content
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_empty_file
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_append_on_match
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_match_newline
+ tests/pytests/functional/modules/file/test_replace.py::test_append_if_not_found_no_match_no_newline
+ tests/pytests/functional/modules/test_defaults.py::test_defaults_get
+ tests/pytests/functional/modules/test_system.py::test_get_system_date_time
+ tests/pytests/functional/modules/test_system.py::test_get_system_date_time_utc
+ tests/pytests/functional/pillar/test_top.py::test_pillar_top_compound_match
+ tests/pytests/functional/states/file/test_append.py::test_file_append_check_cmd
+ tests/pytests/functional/states/file/test_append.py::test_issue_1896_file_append_source
+ tests/pytests/functional/states/file/test_blockreplace.py::test_issue_49043
+ tests/pytests/functional/states/file/test_comment.py::test_issue_62121
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_in
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_in_with_id
+ tests/pytests/functional/states/file/test_directory.py::test_directory_clean_require_with_name
+ tests/pytests/functional/states/file/test_managed.py::test_file_managed_requisites
+ tests/pytests/functional/states/file/test_managed.py::test_issue_8947_utf8_sls
+ tests/pytests/functional/states/file/test_managed.py::test_managed_escaped_file_path
+ tests/pytests/functional/states/file/test_managed.py::test_managed_file_issue_51208
+ tests/pytests/functional/states/file/test_managed.py::test_managed_file_with_grains_data
+ tests/pytests/functional/states/file/test_managed.py::test_managed_latin1_diff
+ tests/pytests/functional/states/file/test_managed.py::test_managed_source_hash_indifferent_case
+ tests/pytests/functional/states/file/test_managed.py::test_managed_unicode_jinja_with_tojson_filter
+ tests/pytests/functional/states/file/test_recurse.py::test_issue_2726_mode_kwarg
+ tests/pytests/functional/states/file/test_replace.py::test_file_replace_check_cmd
+ tests/pytests/functional/states/file/test_replace.py::test_file_replace_prerequired_issues_55775
+ tests/pytests/functional/states/test_pip_state.py::test_22359_pip_installed_unless_does_not_trigger_warnings
+ tests/pytests/functional/states/test_pip_state.py::test_issue_2028_pip_installed_state
+ tests/pytests/functional/states/test_pip_state.py::test_issue_54755
+ tests/pytests/functional/states/test_pip_state.py::test_pip_installed_errors
+ tests/pytests/functional/states/test_pip_state.py::test_pip_installed_removed
+ tests/pytests/functional/states/test_pip_state.py::test_pip_installed_removed_venv
+ tests/pytests/functional/states/test_pip_state.py::test_pip_installed_specific_env
+ tests/pytests/functional/states/test_x509_v2.py::"test_private_key_managed_passphrase_changed_not_overwrite[existing_pk0]"
+ tests/pytests/functional/utils/functools/test_namespaced_function.py::test_namespacing
+ tests/pytests/functional/utils/test_pillar.py::test_gitpython_env
+ tests/pytests/functional/utils/test_pillar.py::test_gitpython_fetch_request
+ tests/pytests/functional/utils/test_pillar.py::test_gitpython_multiple_repos
+ tests/pytests/functional/utils/test_pillar.py::test_pygit2_env
+ tests/pytests/functional/utils/test_pillar.py::test_pygit2_multiple_repos
+ tests/pytests/functional/utils/test_winrepo.py::test_gitpython_winrepo_simple
+ tests/pytests/functional/utils/test_winrepo.py::test_pygit2_winrepo_simple
+ tests/pytests/integration/minion/test_return_retries.py::test_pillar_timeout
+ tests/pytests/integration/minion/test_return_retries.py::test_publish_retry
+ tests/pytests/integration/modules/saltutil/test_pillar.py::"test_pillar_refresh[False]"
+ tests/pytests/integration/modules/saltutil/test_pillar.py::"test_pillar_refresh[True]"
+ tests/pytests/integration/modules/test_state.py::test_logging_and_state_output_order
+ tests/pytests/integration/modules/test_test.py::test_deprecation_warning_emits_deprecation_warnings
+ tests/pytests/integration/renderers/test_jinja.py::test_issue_54765_call
+ tests/pytests/integration/renderers/test_jinja.py::test_issue_54765_salt
+ tests/pytests/integration/ssh/state/test_pillar_override_template.py::"test_it[args0-kwargs0]"
+ tests/pytests/integration/ssh/state/test_pillar_override_template.py::"test_it[args1-kwargs1]"
+ tests/pytests/integration/ssh/state/test_pillar_override_template.py::"test_it[args2-kwargs2]"
+ tests/pytests/integration/ssh/state/test_retcode_highstate_verification_structure_fail.py::"test_it[args0-20]"
+ tests/pytests/integration/ssh/state/test_retcode_highstate_verification_structure_fail.py::"test_it[args1-20]"
+ tests/pytests/integration/ssh/state/test_retcode_highstate_verification_structure_fail.py::"test_it[args2-20]"
+ tests/pytests/integration/ssh/state/test_retcode_highstate_verification_structure_fail.py::"test_it[args3-20]"
+ tests/pytests/integration/ssh/state/test_retcode_highstate_verification_structure_fail.py::"test_it[args4-0]"
+ tests/pytests/integration/ssh/state/test_retcode_highstate_verification_structure_fail.py::"test_it[args5-20]"
+ tests/pytests/integration/ssh/test_jinja_filters.py::test_dateutils_strftime
+ tests/pytests/integration/ssh/test_terraform.py::test_terraform_roster
+ tests/pytests/unit/config/schemas/test_ssh.py::test_config_validate
+ tests/pytests/unit/grains/test_core.py::test_get_machine_id
+ tests/pytests/unit/grains/test_package.py::test_grain_package_type
+ tests/pytests/unit/loader/test_loader.py::test_named_loader_context_name_not_packed
+ tests/pytests/unit/modules/test_beacons.py::test_add
+ tests/pytests/unit/modules/test_beacons.py::test_add_beacon_module
+ tests/pytests/unit/modules/test_beacons.py::test_delete
+ tests/pytests/unit/modules/test_beacons.py::test_delete_beacon_module
+ tests/pytests/unit/modules/test_beacons.py::test_disable
+ tests/pytests/unit/modules/test_beacons.py::test_enable
+ tests/pytests/unit/modules/test_beacons.py::test_enable_beacon_module
+ tests/pytests/unit/modules/test_beacons.py::test_save
+ tests/pytests/unit/modules/test_gpg.py::test_create_key_with_passphrase_with_gpg_passphrase_in_pillar
+ tests/pytests/unit/modules/test_gpg.py::test_create_key_without_passphrase
+ tests/pytests/unit/modules/test_saltutil.py::test_clear_job_cache
+ tests/pytests/unit/modules/test_saltutil.py::test_list_extmods
+ tests/pytests/unit/pillar/test_pillar.py::test_pillar_get_cache_disk
+ tests/pytests/unit/state/test_state_compiler.py::test_verify_high_too_many_functions_declared_error_message
+ tests/pytests/unit/states/test_pkg.py::test_mod_beacon
+ tests/pytests/unit/states/test_service.py::test_mod_beacon
+ tests/pytests/unit/test_ext_importers.py::test_tornado_import_override
+ tests/pytests/unit/utils/test_rsax931.py::test_find_libcrypto_darwin_catalina
+ tests/pytests/unit/utils/test_versions.py::test_warn_until_good_version_argument
+ tests/unit/transport/test_ipc.py::IPCMessagePubSubCase::test_async_reading_streamclosederror
+ tests/unit/utils/test_thin.py::SSHThinTestCase::test_thin_dir
+ tests/unit/utils/test_vt.py::VTTestCase::test_split_multibyte_characters_shiftjis
+ tests/unit/utils/test_vt.py::VTTestCase::test_split_multibyte_characters_unicode
+ tests/unit/utils/test_vt.py::VTTestCase::test_vt_size
+
+ # tests that need network access
+ tests/pytests/functional/states/file/test_managed.py::test_verify_ssl_https_source
+ tests/pytests/unit/modules/test_aptpkg.py::test_sourceslist_architectures
+ tests/pytests/unit/modules/test_aptpkg.py::test_sourceslist_multiple_comps
+ tests/pytests/unit/modules/test_yumpkg.py::test_get_yum_config
+ tests/pytests/unit/modules/test_yumpkg.py::test_get_yum_config_value_none
+ tests/pytests/unit/test_ext_importers.py::test_tornado_import_override
+ tests/pytests/unit/utils/test_http.py::test_backends_decode_body_false
+ tests/pytests/unit/utils/test_http.py::test_backends_decode_body_true
+ tests/pytests/unit/utils/test_http.py::test_query_proxy
+ tests/pytests/unit/utils/test_network.py::test_isportopen
+
+ # tests that need root access
+ tests/unit/modules/test_saltcheck.py::SaltcheckTestCase::test_call_salt_command
+ tests/unit/modules/test_saltcheck.py::SaltcheckTestCase::test_call_salt_command2
+ tests/unit/modules/test_saltcheck.py::SaltcheckTestCase::test_run_test_1
+ )
+ [[ ${EPYTHON#*.} -ge 11 ]] && EPYTEST_DESELECT+=(
+ tests/unit/test_master.py::TransportMethodsTest::test_aes_funcs_black
+ tests/unit/test_master.py::TransportMethodsTest::test_clear_funcs_black
+ )
+ [[ ${EPYTHON#*.} -ge 12 ]] && EPYTEST_DESELECT+=(
+ tests/integration/modules/test_mine.py::MineTest::test_get_allow_tgt
+ tests/integration/modules/test_mine.py::MineTest::test_mine_delete
+ tests/integration/modules/test_mine.py::MineTest::test_send_allow_tgt
+ tests/integration/modules/test_mine.py::MineTest::test_send_allow_tgt_compound
+ tests/integration/modules/test_saltcheck.py::SaltcheckModuleTest::test_saltcheck_checkall
+ tests/integration/modules/test_saltcheck.py::SaltcheckModuleTest::test_saltcheck_checkall_saltenv
+ tests/integration/modules/test_saltcheck.py::SaltcheckModuleTest::test_saltcheck_run
+ tests/integration/modules/test_saltcheck.py::SaltcheckModuleTest::test_saltcheck_saltenv
+ tests/integration/modules/test_saltcheck.py::SaltcheckModuleTest::test_saltcheck_state
+ tests/integration/output/test_output.py::OutputReturnTest::test_output_highstate
+ tests/integration/output/test_output.py::OutputReturnTest::test_output_json
+ tests/integration/output/test_output.py::OutputReturnTest::test_output_nested
+ tests/integration/output/test_output.py::OutputReturnTest::test_output_pprint
+ tests/integration/output/test_output.py::OutputReturnTest::test_output_raw
+ tests/integration/output/test_output.py::OutputReturnTest::test_output_txt
+ tests/integration/output/test_output.py::OutputReturnTest::test_output_yaml
+ tests/integration/output/test_output.py::OutputReturnTest::test_output_yaml_namespaced_dict_wrapper
+ tests/integration/output/test_output.py::OutputReturnTest::test_static_simple
+ tests/integration/runners/test_manage.py::ManageTest::test_down
+ tests/integration/runners/test_manage.py::ManageTest::test_up
+ tests/integration/shell/test_master_tops.py::MasterTopsTest::test_custom_tops_gets_utilized
+ tests/integration/states/test_archive.py::ArchiveTest::test_local_archive_extracted_with_skip_files_list_verify_and_keep_source_is_false
+ tests/pytests/functional/states/test_pip_state.py::test_issue_2087_missing_pip
+ tests/pytests/unit/modules/test_nilrt_ip.py::"test_when_default_value_is_not_a_string_and_option_is_missing_the_default_value_should_be_returned[-99.9]"
+ tests/pytests/unit/modules/test_nilrt_ip.py::"test_when_default_value_is_not_a_string_and_option_is_missing_the_default_value_should_be_returned[42]"
+ tests/pytests/unit/modules/test_nilrt_ip.py::"test_when_default_value_is_not_a_string_and_option_is_missing_the_default_value_should_be_returned[default_value2]"
+ tests/pytests/unit/modules/test_nilrt_ip.py::"test_when_default_value_is_not_a_string_and_option_is_missing_the_default_value_should_be_returned[default_value3]"
+ tests/pytests/unit/modules/test_nilrt_ip.py::"test_when_default_value_is_not_a_string_and_option_is_missing_the_default_value_should_be_returned[default_value4]"
+ tests/pytests/unit/modules/test_nilrt_ip.py::test_when_config_has_no_quotes_around_string_it_should_be_returned_as_is
+ tests/pytests/unit/modules/test_nilrt_ip.py::test_when_config_has_quotes_around_string_they_should_be_removed
+ tests/pytests/unit/utils/vault/test_auth.py::"test_approle_auth_get_token_login[secret_id-approle]"
+ tests/unit/modules/test_zypperpkg.py::ZypperTestCase::test_repo_value_info
+ tests/unit/utils/test_color.py::ColorUtilsTestCase::test_get_colors
+ )
+
+ # testsuite likes lots of files
+ ulimit -n 4096 || die
+
+ # ${T} is too long a path for the tests to work
+ local TMPDIR
+ TMPDIR="$(mktemp --directory --tmpdir=/tmp ${PN}-XXXX)" || die
+ (
+ test_exports=(
+ TMPDIR
+ SHELL="/bin/bash"
+ USE_SETUPTOOLS=1
+ NO_INTERNET=1
+ PYTHONDONTWRITEBYTECODE=1
+ )
+ export "${test_exports[@]}"
+
+ cleanup() { rm -rf "${TMPDIR}" || die; }
+
+ trap cleanup EXIT
+
+ addwrite "${TMPDIR}"
+
+ epytest --run-slow
+ )
+}