FreeBSD Bugzilla – Attachment 216049 Details for
Bug 247627
sysutils/py-salt: sysctl.present broken
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Revert upstream PR that broke sysctl.persist on FreeBSD
0003-sysutils-py-salt-revert-upstream-PR-55719.patch (text/plain), 12.40 KB, created by
Alan Somers
on 2020-06-29 21:32:00 UTC
(
hide
)
Description:
Revert upstream PR that broke sysctl.persist on FreeBSD
Filename:
MIME Type:
Creator:
Alan Somers
Created:
2020-06-29 21:32:00 UTC
Size:
12.40 KB
patch
obsolete
>From e89cde0d40d7db51d35f1c8dd6f6f2163181a314 Mon Sep 17 00:00:00 2001 >From: Alan Somers <asomers@FreeBSD.org> >Date: Mon, 29 Jun 2020 21:24:43 +0000 >Subject: [PATCH 3/3] sysutils/py-salt: revert upstream PR 55719 > >Salt PR 55719 changed the signature of Linux's sysctl.persist function, >without changing it for any other OS. Widespread breakage is the result. > evert that PR until upstream fixes it. > >https://github.com/saltstack/salt/issues/57826 >https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=247627 >--- > sysutils/py-salt/Makefile | 2 +- > .../files/patch-salt_modules_linux__sysctl.py | 115 ++++++++++++++++++ > .../py-salt/files/patch-salt_states_pkg.py | 6 +- > .../py-salt/files/patch-salt_states_sysctl.py | 42 +++++++ > ...-tests_unit_modules_test__linux__sysctl.py | 37 ++++++ > .../patch-tests_unit_states_test__sysctl.py | 21 ++++ > 6 files changed, 219 insertions(+), 4 deletions(-) > create mode 100644 sysutils/py-salt/files/patch-salt_modules_linux__sysctl.py > create mode 100644 sysutils/py-salt/files/patch-salt_states_sysctl.py > create mode 100644 sysutils/py-salt/files/patch-tests_unit_modules_test__linux__sysctl.py > create mode 100644 sysutils/py-salt/files/patch-tests_unit_states_test__sysctl.py > >diff --git a/sysutils/py-salt/Makefile b/sysutils/py-salt/Makefile >index fba9ac77fbbd..723de34dcec4 100644 >--- a/sysutils/py-salt/Makefile >+++ b/sysutils/py-salt/Makefile >@@ -3,7 +3,7 @@ > > PORTNAME= salt > PORTVERSION= 3001 >-PORTREVISION= 1 >+PORTREVISION= 2 > CATEGORIES= sysutils python > MASTER_SITES= CHEESESHOP > PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} >diff --git a/sysutils/py-salt/files/patch-salt_modules_linux__sysctl.py b/sysutils/py-salt/files/patch-salt_modules_linux__sysctl.py >new file mode 100644 >index 000000000000..80addb743360 >--- /dev/null >+++ b/sysutils/py-salt/files/patch-salt_modules_linux__sysctl.py >@@ -0,0 +1,115 @@ >+--- salt/modules/linux_sysctl.py.orig 2020-06-17 18:05:55 UTC >++++ salt/modules/linux_sysctl.py >+@@ -66,8 +66,8 @@ def show(config_file=False): >+ """ >+ Return a list of sysctl parameters for this minion >+ >+- :param config_file: Pull data from the system configuration file >+- instead of the live kernel. >++ config: Pull the data from the system configuration file >++ instead of the live data. >+ >+ CLI Example: >+ >+@@ -108,13 +108,10 @@ def show(config_file=False): >+ return ret >+ >+ >+-def get(name, ignore=False): >++def get(name): >+ """ >+ Return a single sysctl parameter for this minion >+ >+- :param name: Name of sysctl setting >+- :param ignore: Optional boolean to pass --ignore to sysctl (Default: False) >+- >+ CLI Example: >+ >+ .. code-block:: bash >+@@ -122,20 +119,14 @@ def get(name, ignore=False): >+ salt '*' sysctl.get net.ipv4.ip_forward >+ """ >+ cmd = "sysctl -n {0}".format(name) >+- if ignore: >+- cmd += " --ignore" >+ out = __salt__["cmd.run"](cmd, python_shell=False) >+ return out >+ >+ >+-def assign(name, value, ignore=False): >++def assign(name, value): >+ """ >+ Assign a single sysctl parameter for this minion >+ >+- :param name: Name of sysctl setting >+- :param value: Desired value of sysctl setting >+- :param ignore: Optional boolean to pass --ignore to sysctl (Default: False) >+- >+ CLI Example: >+ >+ .. code-block:: bash >+@@ -156,13 +147,11 @@ def assign(name, value, ignore=False): >+ tran_tab = name.translate(trans_args) >+ >+ sysctl_file = "/proc/sys/{0}".format(tran_tab) >+- if not ignore and not os.path.exists(sysctl_file): >++ if not os.path.exists(sysctl_file): >+ raise CommandExecutionError("sysctl {0} does not exist".format(name)) >+ >+ ret = {} >+ cmd = 'sysctl -w {0}="{1}"'.format(name, value) >+- if ignore: >+- cmd += " --ignore" >+ data = __salt__["cmd.run_all"](cmd, python_shell=False) >+ out = data["stdout"] >+ err = data["stderr"] >+@@ -175,9 +164,6 @@ def assign(name, value, ignore=False): >+ if not regex.match(out) or "Invalid argument" in six.text_type(err): >+ if data["retcode"] != 0 and err: >+ error = err >+- elif ignore: >+- ret[name] = "ignored" >+- return ret >+ else: >+ error = out >+ raise CommandExecutionError("sysctl -w failed: {0}".format(error)) >+@@ -186,17 +172,12 @@ def assign(name, value, ignore=False): >+ return ret >+ >+ >+-def persist(name, value, config=None, ignore=False): >++def persist(name, value, config=None): >+ """ >+ Assign and persist a simple sysctl parameter for this minion. If ``config`` >+ is not specified, a sensible default will be chosen using >+ :mod:`sysctl.default_config <salt.modules.linux_sysctl.default_config>`. >+ >+- :param name: Name of sysctl setting >+- :param value: Desired value of sysctl setting >+- :param config: Optional path to sysctl.conf >+- :param ignore: Optional boolean to pass --ignore to sysctl (Default: False) >+- >+ CLI Example: >+ >+ .. code-block:: bash >+@@ -259,11 +240,8 @@ def persist(name, value, config=None, ignore=False): >+ # This is the line to edit >+ if six.text_type(comps[1]) == six.text_type(value): >+ # It is correct in the config, check if it is correct in /proc >+- current_setting = get(name, ignore) >+- if not current_setting: >+- return "Ignored" >+- if six.text_type(current_setting) != six.text_type(value): >+- assign(name, value, ignore) >++ if six.text_type(get(name)) != six.text_type(value): >++ assign(name, value) >+ return "Updated" >+ else: >+ return "Already set" >+@@ -282,5 +260,5 @@ def persist(name, value, config=None, ignore=False): >+ msg = "Could not write to file: {0}" >+ raise CommandExecutionError(msg.format(config)) >+ >+- assign(name, value, ignore) >++ assign(name, value) >+ return "Updated" >diff --git a/sysutils/py-salt/files/patch-salt_states_pkg.py b/sysutils/py-salt/files/patch-salt_states_pkg.py >index bbbd156903b4..8bc435b1ddc2 100644 >--- a/sysutils/py-salt/files/patch-salt_states_pkg.py >+++ b/sysutils/py-salt/files/patch-salt_states_pkg.py >@@ -1,6 +1,6 @@ >---- salt/states/pkg.py.orig 2020-01-14 22:57:27 UTC >+--- salt/states/pkg.py.orig 2020-06-17 18:05:55 UTC > +++ salt/states/pkg.py >-@@ -207,6 +207,10 @@ def _fulfills_version_string(installed_versions, versi >+@@ -227,6 +227,10 @@ def _fulfills_version_string( > the repository without enforcing a re-installation of the package. > (Only applicable if only one strict version condition is specified E.G. version: 2.0.6~ubuntu3) > """ >@@ -11,7 +11,7 @@ > version_conditions = _parse_version_string(version_conditions_string) > for installed_version in installed_versions: > fullfills_all = True >-@@ -704,7 +708,7 @@ def _find_install_targets(name=None, >+@@ -754,7 +758,7 @@ def _find_install_targets( > for key in resolved_latest: > if not resolved_latest[key]: > if key in cur_pkgs: >diff --git a/sysutils/py-salt/files/patch-salt_states_sysctl.py b/sysutils/py-salt/files/patch-salt_states_sysctl.py >new file mode 100644 >index 000000000000..40dc003380b9 >--- /dev/null >+++ b/sysutils/py-salt/files/patch-salt_states_sysctl.py >@@ -0,0 +1,42 @@ >+--- salt/states/sysctl.py.orig 2020-06-17 18:05:55 UTC >++++ salt/states/sysctl.py >+@@ -32,7 +32,7 @@ def __virtual__(): >+ return (False, "sysctl module could not be loaded") >+ >+ >+-def present(name, value, config=None, ignore=False): >++def present(name, value, config=None): >+ """ >+ Ensure that the named sysctl value is set in memory and persisted to the >+ named configuration file. The default sysctl configuration file is >+@@ -47,13 +47,6 @@ def present(name, value, config=None, ignore=False): >+ config >+ The location of the sysctl configuration file. If not specified, the >+ proper location will be detected based on platform. >+- >+- ignore >+- ..versionadded:: neon >+- >+- Adds --ignore to sysctl commands. This suppresses errors in environments >+- where sysctl settings may have been disabled in kernel boot configuration. >+- Defaults to False >+ """ >+ ret = {"name": name, "result": True, "changes": {}, "comment": ""} >+ >+@@ -114,7 +107,7 @@ def present(name, value, config=None, ignore=False): >+ return ret >+ >+ try: >+- update = __salt__["sysctl.persist"](name, value, config, ignore) >++ update = __salt__["sysctl.persist"](name, value, config) >+ except CommandExecutionError as exc: >+ ret["result"] = False >+ ret["comment"] = "Failed to set {0} to {1}: {2}".format(name, value, exc) >+@@ -125,7 +118,5 @@ def present(name, value, config=None, ignore=False): >+ ret["comment"] = "Updated sysctl value {0} = {1}".format(name, value) >+ elif update == "Already set": >+ ret["comment"] = "Sysctl value {0} = {1} is already set".format(name, value) >+- elif update == "Ignored": >+- ret["comment"] = "Sysctl value {0} = {1} was ignored".format(name, value) >+ >+ return ret >diff --git a/sysutils/py-salt/files/patch-tests_unit_modules_test__linux__sysctl.py b/sysutils/py-salt/files/patch-tests_unit_modules_test__linux__sysctl.py >new file mode 100644 >index 000000000000..b2dc88005804 >--- /dev/null >+++ b/sysutils/py-salt/files/patch-tests_unit_modules_test__linux__sysctl.py >@@ -0,0 +1,37 @@ >+--- tests/unit/modules/test_linux_sysctl.py.orig 2020-06-17 18:05:55 UTC >++++ tests/unit/modules/test_linux_sysctl.py >+@@ -33,14 +33,6 @@ class LinuxSysctlTestCase(TestCase, LoaderModuleMockMi >+ with patch.dict(linux_sysctl.__salt__, {"cmd.run": mock_cmd}): >+ self.assertEqual(linux_sysctl.get("net.ipv4.ip_forward"), 1) >+ >+- def test_get_ignore(self): >+- """ >+- Tests the return of get function with ignore >+- """ >+- mock_cmd = MagicMock(return_value="") >+- with patch.dict(linux_sysctl.__salt__, {"cmd.run": mock_cmd}): >+- self.assertEqual(linux_sysctl.get("net.ipv4.ip_forward", ignore=True), "") >+- >+ def test_assign_proc_sys_failed(self): >+ """ >+ Tests if /proc/sys/<kernel-subsystem> exists or not >+@@ -93,19 +85,6 @@ class LinuxSysctlTestCase(TestCase, LoaderModuleMockMi >+ mock_cmd = MagicMock(return_value=cmd) >+ with patch.dict(linux_sysctl.__salt__, {"cmd.run_all": mock_cmd}): >+ self.assertEqual(linux_sysctl.assign("net.ipv4.ip_forward", 1), ret) >+- >+- def test_assign_ignore(self): >+- """ >+- Tests the ignore assign function >+- """ >+- with patch("os.path.exists", MagicMock(return_value=True)): >+- cmd = {"pid": 1337, "retcode": 0, "stderr": "", "stdout": ""} >+- ret = {"net.ipv4.ip_forward": "ignored"} >+- mock_cmd = MagicMock(return_value=cmd) >+- with patch.dict(linux_sysctl.__salt__, {"cmd.run_all": mock_cmd}): >+- self.assertEqual( >+- linux_sysctl.assign("net.ipv4.ip_forward", 1, ignore=True), ret >+- ) >+ >+ def test_persist_no_conf_failure(self): >+ """ >diff --git a/sysutils/py-salt/files/patch-tests_unit_states_test__sysctl.py b/sysutils/py-salt/files/patch-tests_unit_states_test__sysctl.py >new file mode 100644 >index 000000000000..e288cd077746 >--- /dev/null >+++ b/sysutils/py-salt/files/patch-tests_unit_states_test__sysctl.py >@@ -0,0 +1,21 @@ >+--- tests/unit/states/test_sysctl.py.orig 2020-06-17 18:05:55 UTC >++++ tests/unit/states/test_sysctl.py >+@@ -68,8 +68,6 @@ class SysctlTestCase(TestCase, LoaderModuleMockMixin): >+ >+ comt7 = "Sysctl value {0} = {1} is already set".format(name, value) >+ >+- comt8 = "Sysctl value {0} = {1} was ignored".format(name, value) >+- >+ def mock_current(config_file=None): >+ """ >+ Mock return value for __salt__. >+@@ -136,9 +134,4 @@ class SysctlTestCase(TestCase, LoaderModuleMockMixin): >+ mock = MagicMock(return_value="Already set") >+ with patch.dict(sysctl.__salt__, {"sysctl.persist": mock}): >+ ret.update({"comment": comt7, "result": True}) >+- self.assertDictEqual(sysctl.present(name, value), ret) >+- >+- mock = MagicMock(return_value="Ignored") >+- with patch.dict(sysctl.__salt__, {"sysctl.persist": mock}): >+- ret.update({"comment": comt8, "result": True}) >+ self.assertDictEqual(sysctl.present(name, value), ret) >-- >2.27.0 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
koobs
:
maintainer-approval+
Actions:
View
|
Diff
Attachments on
bug 247627
: 216049