From bb1fe9cf22f868f8a7a32234deea0724ad67ce22 Mon Sep 17 00:00:00 2001 From: Alexander Graul Date: Fri, 29 Apr 2022 18:36:32 +0200 Subject: [PATCH] Add names and pkgs parameters to zypper.upgrade Fixes https://github.com/saltstack/salt/issues/62030 --- changelog/62030.fixed | 1 + salt/modules/zypperpkg.py | 34 ++++++++++++++++++++ tests/pytests/unit/modules/test_zypperpkg.py | 23 +++++++++---- 3 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 changelog/62030.fixed diff --git a/changelog/62030.fixed b/changelog/62030.fixed new file mode 100644 index 00000000000..bd604636069 --- /dev/null +++ b/changelog/62030.fixed @@ -0,0 +1 @@ +Fix inconsitency regarding name and pkgs parameters between zypperpkg.upgrade() and yumpkg.upgrade() diff --git a/salt/modules/zypperpkg.py b/salt/modules/zypperpkg.py index 4b2b3f7bfc5..c5215100856 100644 --- a/salt/modules/zypperpkg.py +++ b/salt/modules/zypperpkg.py @@ -1744,6 +1744,8 @@ def install( def upgrade( + name=None, + pkgs=None, refresh=True, dryrun=False, dist_upgrade=False, @@ -1771,6 +1773,27 @@ def upgrade( Run a full system upgrade, a zypper upgrade + name + The name of the package to be installed. Note that this parameter is + ignored if ``pkgs`` is passed or if ``dryrun`` is set to True. + + CLI Example: + + .. code-block:: bash + + salt '*' pkg.install name= + + pkgs + A list of packages to install from a software repository. Must be + passed as a python list. Note that this parameter is ignored if + ``dryrun`` is set to True. + + CLI Examples: + + .. code-block:: bash + + salt '*' pkg.install pkgs='["foo", "bar"]' + refresh force a refresh if set to True (default). If set to False it depends on zypper if a refresh is @@ -1855,6 +1878,17 @@ def upgrade( __zypper__(systemd_scope=_systemd_scope(), root=root).noraise.call( *cmd_update + ["--debug-solver"] ) + else: + if name or pkgs: + try: + (pkg_params, _) = __salt__["pkg_resource.parse_targets"]( + name=name, pkgs=pkgs, sources=None, **kwargs + ) + if pkg_params: + cmd_update.extend(pkg_params.keys()) + + except MinionError as exc: + raise CommandExecutionError(exc) old = list_pkgs(root=root) diff --git a/tests/pytests/unit/modules/test_zypperpkg.py b/tests/pytests/unit/modules/test_zypperpkg.py index 17abf8ae12a..bd74fa5df74 100644 --- a/tests/pytests/unit/modules/test_zypperpkg.py +++ b/tests/pytests/unit/modules/test_zypperpkg.py @@ -21,8 +21,9 @@ def configure_loader_modules(): "rpm": None, "_systemd_scope": MagicMock(return_value=False), "osrelease_info": [15, 3], + "__salt__": {"pkg_resource.parse_targets": pkg_resource.parse_targets}, }, - pkg_resource: {}, + pkg_resource: {"__grains__": {"os": "SUSE"}}, } @@ -224,14 +225,17 @@ def test_pkg_list_holds(): @pytest.mark.parametrize( - "package,pre_version,post_version,fromrepo_param", + "package,pre_version,post_version,fromrepo_param,name_param,pkgs_param", [ - ("vim", "1.1", "1.2", []), - ("kernel-default", "1.1", "1.1,1.2", ["dummy", "dummy2"]), + ("vim", "1.1", "1.2", [], "", []), + ("kernel-default", "1.1", "1.1,1.2", ["dummy", "dummy2"], "", []), + ("vim", "1.1", "1.2", [], "vim", []), ], ) @patch.object(zypper, "refresh_db", MagicMock(return_value=True)) -def test_upgrade(package, pre_version, post_version, fromrepo_param): +def test_upgrade( + package, pre_version, post_version, fromrepo_param, name_param, pkgs_param +): with patch( "salt.modules.zypperpkg.__zypper__.noraise.call" ) as zypper_mock, patch.object( @@ -243,7 +247,14 @@ def test_upgrade(package, pre_version, post_version, fromrepo_param): for repo in fromrepo_param: expected_call.extend(["--repo", repo]) - result = zypper.upgrade(fromrepo=fromrepo_param) + if pkgs_param: + expected_call.extend(pkgs_param) + elif name_param: + expected_call.append(name_param) + + result = zypper.upgrade( + name=name_param, pkgs=pkgs_param, fromrepo=fromrepo_param + ) zypper_mock.assert_any_call(*expected_call) assert result == {package: {"old": pre_version, "new": post_version}}