65598582f5
OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=179
960 lines
40 KiB
Diff
960 lines
40 KiB
Diff
From 2e300c770c227cf394929b7d5d025d5c52f1ae2c Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
|
|
<psuarezhernandez@suse.com>
|
|
Date: Mon, 14 May 2018 11:33:13 +0100
|
|
Subject: [PATCH] Add "all_versions" parameter to include all installed
|
|
version on rpm.info
|
|
|
|
Enable "all_versions" parameter for zypper.info_installed
|
|
|
|
Enable "all_versions" parameter for yumpkg.info_installed
|
|
|
|
Prevent adding failed packages when pkg name contains the arch (on SUSE)
|
|
|
|
Add 'all_versions' documentation for info_installed on yum/zypper modules
|
|
|
|
Add unit tests for info_installed with all_versions
|
|
|
|
Refactor: use dict.setdefault instead if-else statement
|
|
|
|
Allow removing only specific package versions with zypper and yum
|
|
---
|
|
salt/states/pkg.py | 285 +++++++++++++++++++++++----------------------
|
|
1 file changed, 146 insertions(+), 139 deletions(-)
|
|
|
|
diff --git a/salt/states/pkg.py b/salt/states/pkg.py
|
|
index 51b5a06e8f..a1b2a122bb 100644
|
|
--- a/salt/states/pkg.py
|
|
+++ b/salt/states/pkg.py
|
|
@@ -1,4 +1,3 @@
|
|
-# -*- coding: utf-8 -*-
|
|
"""
|
|
Installation of packages using OS package managers such as yum or apt-get
|
|
=========================================================================
|
|
@@ -71,21 +70,16 @@ state module
|
|
used. This will be addressed in a future release of Salt.
|
|
"""
|
|
|
|
-# Import python libs
|
|
-from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
import fnmatch
|
|
import logging
|
|
import os
|
|
import re
|
|
|
|
-# Import Salt libs
|
|
import salt.utils.pkg
|
|
import salt.utils.platform
|
|
import salt.utils.versions
|
|
from salt.exceptions import CommandExecutionError, MinionError, SaltInvocationError
|
|
-
|
|
-# Import 3rd-party libs
|
|
from salt.ext import six
|
|
from salt.modules.pkg_resource import _repack_pkgs
|
|
from salt.output import nested
|
|
@@ -323,7 +317,7 @@ def _find_download_targets(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": True,
|
|
- "comment": "Version {0} of package '{1}' is already "
|
|
+ "comment": "Version {} of package '{}' is already "
|
|
"downloaded".format(version, name),
|
|
}
|
|
|
|
@@ -334,7 +328,7 @@ def _find_download_targets(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": True,
|
|
- "comment": "Package {0} is already " "downloaded".format(name),
|
|
+ "comment": "Package {} is already " "downloaded".format(name),
|
|
}
|
|
|
|
version_spec = False
|
|
@@ -349,13 +343,13 @@ def _find_download_targets(
|
|
comments.append(
|
|
"The following package(s) were not found, and no "
|
|
"possible matches were found in the package db: "
|
|
- "{0}".format(", ".join(sorted(problems["no_suggest"])))
|
|
+ "{}".format(", ".join(sorted(problems["no_suggest"])))
|
|
)
|
|
if problems.get("suggest"):
|
|
- for pkgname, suggestions in six.iteritems(problems["suggest"]):
|
|
+ for pkgname, suggestions in problems["suggest"].items():
|
|
comments.append(
|
|
- "Package '{0}' not found (possible matches: "
|
|
- "{1})".format(pkgname, ", ".join(suggestions))
|
|
+ "Package '{}' not found (possible matches: "
|
|
+ "{})".format(pkgname, ", ".join(suggestions))
|
|
)
|
|
if comments:
|
|
if len(comments) > 1:
|
|
@@ -371,7 +365,7 @@ def _find_download_targets(
|
|
# Check current downloaded versions against specified versions
|
|
targets = {}
|
|
problems = []
|
|
- for pkgname, pkgver in six.iteritems(to_download):
|
|
+ for pkgname, pkgver in to_download.items():
|
|
cver = cur_pkgs.get(pkgname, {})
|
|
# Package not yet downloaded, so add to targets
|
|
if not cver:
|
|
@@ -401,7 +395,7 @@ def _find_download_targets(
|
|
|
|
if not targets:
|
|
# All specified packages are already downloaded
|
|
- msg = "All specified packages{0} are already downloaded".format(
|
|
+ msg = "All specified packages{} are already downloaded".format(
|
|
" (matching specified versions)" if version_spec else ""
|
|
)
|
|
return {"name": name, "changes": {}, "result": True, "comment": msg}
|
|
@@ -425,7 +419,7 @@ def _find_advisory_targets(name=None, advisory_ids=None, **kwargs):
|
|
"name": name,
|
|
"changes": {},
|
|
"result": True,
|
|
- "comment": "Advisory patch {0} is already " "installed".format(name),
|
|
+ "comment": "Advisory patch {} is already " "installed".format(name),
|
|
}
|
|
|
|
# Find out which advisory patches will be targeted in the call to pkg.install
|
|
@@ -477,12 +471,22 @@ def _find_remove_targets(
|
|
# Check current versions against specified versions
|
|
targets = []
|
|
problems = []
|
|
- for pkgname, pkgver in six.iteritems(to_remove):
|
|
+ for pkgname, pkgver in to_remove.items():
|
|
# FreeBSD pkg supports `openjdk` and `java/openjdk7` package names
|
|
origin = bool(re.search("/", pkgname))
|
|
|
|
if __grains__["os"] == "FreeBSD" and origin:
|
|
- cver = [k for k, v in six.iteritems(cur_pkgs) if v["origin"] == pkgname]
|
|
+ cver = [k for k, v in cur_pkgs.items() if v["origin"] == pkgname]
|
|
+ elif __grains__["os_family"] == "Suse":
|
|
+ # On SUSE systems. Zypper returns packages without "arch" in name
|
|
+ try:
|
|
+ namepart, archpart = pkgname.rsplit(".", 1)
|
|
+ except ValueError:
|
|
+ cver = cur_pkgs.get(pkgname, [])
|
|
+ else:
|
|
+ if archpart in salt.utils.pkg.rpm.ARCHES + ("noarch",):
|
|
+ pkgname = namepart
|
|
+ cver = cur_pkgs.get(pkgname, [])
|
|
else:
|
|
cver = cur_pkgs.get(pkgname, [])
|
|
|
|
@@ -518,7 +522,7 @@ def _find_remove_targets(
|
|
|
|
if not targets:
|
|
# All specified packages are already absent
|
|
- msg = "All specified packages{0} are already absent".format(
|
|
+ msg = "All specified packages{} are already absent".format(
|
|
" (matching specified versions)" if version_spec else ""
|
|
)
|
|
return {"name": name, "changes": {}, "result": True, "comment": msg}
|
|
@@ -619,7 +623,7 @@ def _find_install_targets(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": False,
|
|
- "comment": "Invalidly formatted '{0}' parameter. See "
|
|
+ "comment": "Invalidly formatted '{}' parameter. See "
|
|
"minion log.".format("pkgs" if pkgs else "sources"),
|
|
}
|
|
|
|
@@ -634,7 +638,7 @@ def _find_install_targets(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": False,
|
|
- "comment": "Package {0} not found in the "
|
|
+ "comment": "Package {} not found in the "
|
|
"repository.".format(name),
|
|
}
|
|
if version is None:
|
|
@@ -656,7 +660,7 @@ def _find_install_targets(
|
|
origin = bool(re.search("/", name))
|
|
|
|
if __grains__["os"] == "FreeBSD" and origin:
|
|
- cver = [k for k, v in six.iteritems(cur_pkgs) if v["origin"] == name]
|
|
+ cver = [k for k, v in cur_pkgs.items() if v["origin"] == name]
|
|
else:
|
|
cver = cur_pkgs.get(name, [])
|
|
|
|
@@ -667,7 +671,7 @@ def _find_install_targets(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": True,
|
|
- "comment": "Version {0} of package '{1}' is already "
|
|
+ "comment": "Version {} of package '{}' is already "
|
|
"installed".format(version, name),
|
|
}
|
|
|
|
@@ -678,7 +682,7 @@ def _find_install_targets(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": True,
|
|
- "comment": "Package {0} is already " "installed".format(name),
|
|
+ "comment": "Package {} is already " "installed".format(name),
|
|
}
|
|
|
|
version_spec = False
|
|
@@ -687,21 +691,19 @@ def _find_install_targets(
|
|
# enforced. Takes extra time. Disable for improved performance
|
|
if not skip_suggestions:
|
|
# Perform platform-specific pre-flight checks
|
|
- not_installed = dict(
|
|
- [
|
|
- (name, version)
|
|
- for name, version in desired.items()
|
|
- if not (
|
|
- name in cur_pkgs
|
|
- and (
|
|
- version is None
|
|
- or _fulfills_version_string(
|
|
- cur_pkgs[name], version, ignore_epoch=ignore_epoch
|
|
- )
|
|
+ not_installed = {
|
|
+ name: version
|
|
+ for name, version in desired.items()
|
|
+ if not (
|
|
+ name in cur_pkgs
|
|
+ and (
|
|
+ version is None
|
|
+ or _fulfills_version_string(
|
|
+ cur_pkgs[name], version, ignore_epoch=ignore_epoch
|
|
)
|
|
)
|
|
- ]
|
|
- )
|
|
+ )
|
|
+ }
|
|
if not_installed:
|
|
try:
|
|
problems = _preflight_check(not_installed, **kwargs)
|
|
@@ -713,13 +715,13 @@ def _find_install_targets(
|
|
comments.append(
|
|
"The following package(s) were not found, and no "
|
|
"possible matches were found in the package db: "
|
|
- "{0}".format(", ".join(sorted(problems["no_suggest"])))
|
|
+ "{}".format(", ".join(sorted(problems["no_suggest"])))
|
|
)
|
|
if problems.get("suggest"):
|
|
- for pkgname, suggestions in six.iteritems(problems["suggest"]):
|
|
+ for pkgname, suggestions in problems["suggest"].items():
|
|
comments.append(
|
|
- "Package '{0}' not found (possible matches: "
|
|
- "{1})".format(pkgname, ", ".join(suggestions))
|
|
+ "Package '{}' not found (possible matches: "
|
|
+ "{})".format(pkgname, ", ".join(suggestions))
|
|
)
|
|
if comments:
|
|
if len(comments) > 1:
|
|
@@ -733,9 +735,7 @@ def _find_install_targets(
|
|
|
|
# Resolve the latest package version for any packages with "latest" in the
|
|
# package version
|
|
- wants_latest = (
|
|
- [] if sources else [x for x, y in six.iteritems(desired) if y == "latest"]
|
|
- )
|
|
+ wants_latest = [] if sources else [x for x, y in desired.items() if y == "latest"]
|
|
if wants_latest:
|
|
resolved_latest = __salt__["pkg.latest_version"](
|
|
*wants_latest, refresh=refresh, **kwargs
|
|
@@ -766,7 +766,7 @@ def _find_install_targets(
|
|
problems = []
|
|
warnings = []
|
|
failed_verify = False
|
|
- for package_name, version_string in six.iteritems(desired):
|
|
+ for package_name, version_string in desired.items():
|
|
cver = cur_pkgs.get(package_name, [])
|
|
if resolve_capabilities and not cver and package_name in cur_prov:
|
|
cver = cur_pkgs.get(cur_prov.get(package_name)[0], [])
|
|
@@ -795,12 +795,12 @@ def _find_install_targets(
|
|
problems.append(err.format(version_string, "file not found"))
|
|
continue
|
|
elif not os.path.exists(cached_path):
|
|
- problems.append("{0} does not exist on minion".format(version_string))
|
|
+ problems.append("{} does not exist on minion".format(version_string))
|
|
continue
|
|
source_info = __salt__["lowpkg.bin_pkg_info"](cached_path)
|
|
if source_info is None:
|
|
warnings.append(
|
|
- "Failed to parse metadata for {0}".format(version_string)
|
|
+ "Failed to parse metadata for {}".format(version_string)
|
|
)
|
|
continue
|
|
else:
|
|
@@ -923,13 +923,24 @@ def _verify_install(desired, new_pkgs, ignore_epoch=None, new_caps=None):
|
|
has_origin = "/" in pkgname
|
|
|
|
if __grains__["os"] == "FreeBSD" and has_origin:
|
|
- cver = [k for k, v in six.iteritems(new_pkgs) if v["origin"] == pkgname]
|
|
+ cver = [k for k, v in new_pkgs.items() if v["origin"] == pkgname]
|
|
elif __grains__["os"] == "MacOS" and has_origin:
|
|
cver = new_pkgs.get(pkgname, new_pkgs.get(pkgname.split("/")[-1]))
|
|
elif __grains__["os"] == "OpenBSD":
|
|
cver = new_pkgs.get(pkgname.split("%")[0])
|
|
elif __grains__["os_family"] == "Debian":
|
|
cver = new_pkgs.get(pkgname.split("=")[0])
|
|
+ elif __grains__["os_family"] == "Suse":
|
|
+ # On SUSE systems. Zypper returns packages without "arch" in name
|
|
+ try:
|
|
+ namepart, archpart = pkgname.rsplit(".", 1)
|
|
+ except ValueError:
|
|
+ cver = new_pkgs.get(pkgname)
|
|
+ else:
|
|
+ if archpart in salt.utils.pkg.rpm.ARCHES + ("noarch",):
|
|
+ cver = new_pkgs.get(namepart)
|
|
+ else:
|
|
+ cver = new_pkgs.get(pkgname)
|
|
else:
|
|
cver = new_pkgs.get(pkgname)
|
|
if not cver and pkgname in new_caps:
|
|
@@ -964,7 +975,7 @@ def _get_desired_pkg(name, desired):
|
|
oper = ""
|
|
else:
|
|
oper = "="
|
|
- return "{0}{1}{2}".format(name, oper, "" if not desired[name] else desired[name])
|
|
+ return "{}{}{}".format(name, oper, "" if not desired[name] else desired[name])
|
|
|
|
|
|
def _preflight_check(desired, fromrepo, **kwargs):
|
|
@@ -1709,8 +1720,8 @@ def installed(
|
|
"comment": "pkg.verify not implemented",
|
|
}
|
|
|
|
- if not isinstance(version, six.string_types) and version is not None:
|
|
- version = six.text_type(version)
|
|
+ if not isinstance(version, str) and version is not None:
|
|
+ version = str(version)
|
|
|
|
kwargs["allow_updates"] = allow_updates
|
|
|
|
@@ -1754,7 +1765,7 @@ def installed(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": False,
|
|
- "comment": six.text_type(exc),
|
|
+ "comment": str(exc),
|
|
}
|
|
|
|
if "result" in hold_ret and not hold_ret["result"]:
|
|
@@ -1763,7 +1774,7 @@ def installed(
|
|
"changes": {},
|
|
"result": False,
|
|
"comment": "An error was encountered while "
|
|
- "holding/unholding package(s): {0}".format(hold_ret["comment"]),
|
|
+ "holding/unholding package(s): {}".format(hold_ret["comment"]),
|
|
}
|
|
else:
|
|
modified_hold = [
|
|
@@ -1779,16 +1790,16 @@ def installed(
|
|
]
|
|
|
|
for i in modified_hold:
|
|
- result["comment"] += ".\n{0}".format(i["comment"])
|
|
+ result["comment"] += ".\n{}".format(i["comment"])
|
|
result["result"] = i["result"]
|
|
result["changes"][i["name"]] = i["changes"]
|
|
|
|
for i in not_modified_hold:
|
|
- result["comment"] += ".\n{0}".format(i["comment"])
|
|
+ result["comment"] += ".\n{}".format(i["comment"])
|
|
result["result"] = i["result"]
|
|
|
|
for i in failed_hold:
|
|
- result["comment"] += ".\n{0}".format(i["comment"])
|
|
+ result["comment"] += ".\n{}".format(i["comment"])
|
|
result["result"] = i["result"]
|
|
return result
|
|
|
|
@@ -1805,8 +1816,8 @@ def installed(
|
|
|
|
# Remove any targets not returned by _find_install_targets
|
|
if pkgs:
|
|
- pkgs = [dict([(x, y)]) for x, y in six.iteritems(targets)]
|
|
- pkgs.extend([dict([(x, y)]) for x, y in six.iteritems(to_reinstall)])
|
|
+ pkgs = [dict([(x, y)]) for x, y in targets.items()]
|
|
+ pkgs.extend([dict([(x, y)]) for x, y in to_reinstall.items()])
|
|
elif sources:
|
|
oldsources = sources
|
|
sources = [x for x in oldsources if next(iter(list(x.keys()))) in targets]
|
|
@@ -1823,12 +1834,12 @@ def installed(
|
|
summary = ", ".join([_get_desired_pkg(x, targets) for x in targets])
|
|
comment.append(
|
|
"The following packages would be "
|
|
- "installed/updated: {0}".format(summary)
|
|
+ "installed/updated: {}".format(summary)
|
|
)
|
|
if to_unpurge:
|
|
comment.append(
|
|
"The following packages would have their selection status "
|
|
- "changed from 'purge' to 'install': {0}".format(", ".join(to_unpurge))
|
|
+ "changed from 'purge' to 'install': {}".format(", ".join(to_unpurge))
|
|
)
|
|
if to_reinstall:
|
|
# Add a comment for each package in to_reinstall with its
|
|
@@ -1852,7 +1863,7 @@ def installed(
|
|
else:
|
|
pkgstr = _get_desired_pkg(reinstall_pkg, to_reinstall)
|
|
comment.append(
|
|
- "Package '{0}' would be reinstalled because the "
|
|
+ "Package '{}' would be reinstalled because the "
|
|
"following files have been altered:".format(pkgstr)
|
|
)
|
|
comment.append(_nested_output(altered_files[reinstall_pkg]))
|
|
@@ -1896,7 +1907,7 @@ def installed(
|
|
ret["changes"] = {}
|
|
ret["comment"] = (
|
|
"An error was encountered while installing "
|
|
- "package(s): {0}".format(exc)
|
|
+ "package(s): {}".format(exc)
|
|
)
|
|
if warnings:
|
|
ret.setdefault("warnings", []).extend(warnings)
|
|
@@ -1907,7 +1918,7 @@ def installed(
|
|
|
|
if isinstance(pkg_ret, dict):
|
|
changes["installed"].update(pkg_ret)
|
|
- elif isinstance(pkg_ret, six.string_types):
|
|
+ elif isinstance(pkg_ret, str):
|
|
comment.append(pkg_ret)
|
|
# Code below will be looking for a dictionary. If this is a string
|
|
# it means that there was an exception raised and that no packages
|
|
@@ -1921,7 +1932,7 @@ def installed(
|
|
action = "pkg.hold" if kwargs["hold"] else "pkg.unhold"
|
|
hold_ret = __salt__[action](name=name, pkgs=desired)
|
|
except (CommandExecutionError, SaltInvocationError) as exc:
|
|
- comment.append(six.text_type(exc))
|
|
+ comment.append(str(exc))
|
|
ret = {
|
|
"name": name,
|
|
"changes": changes,
|
|
@@ -1938,7 +1949,7 @@ def installed(
|
|
"changes": {},
|
|
"result": False,
|
|
"comment": "An error was encountered while "
|
|
- "holding/unholding package(s): {0}".format(hold_ret["comment"]),
|
|
+ "holding/unholding package(s): {}".format(hold_ret["comment"]),
|
|
}
|
|
if warnings:
|
|
ret.setdefault("warnings", []).extend(warnings)
|
|
@@ -1996,11 +2007,11 @@ def installed(
|
|
summary = ", ".join([_get_desired_pkg(x, desired) for x in modified])
|
|
if len(summary) < 20:
|
|
comment.append(
|
|
- "The following packages were installed/updated: " "{0}".format(summary)
|
|
+ "The following packages were installed/updated: " "{}".format(summary)
|
|
)
|
|
else:
|
|
comment.append(
|
|
- "{0} targeted package{1} {2} installed/updated.".format(
|
|
+ "{} targeted package{} {} installed/updated.".format(
|
|
len(modified),
|
|
"s" if len(modified) > 1 else "",
|
|
"were" if len(modified) > 1 else "was",
|
|
@@ -2014,14 +2025,14 @@ def installed(
|
|
comment.append(i["comment"])
|
|
if len(changes[change_name]["new"]) > 0:
|
|
changes[change_name]["new"] += "\n"
|
|
- changes[change_name]["new"] += "{0}".format(i["changes"]["new"])
|
|
+ changes[change_name]["new"] += "{}".format(i["changes"]["new"])
|
|
if len(changes[change_name]["old"]) > 0:
|
|
changes[change_name]["old"] += "\n"
|
|
- changes[change_name]["old"] += "{0}".format(i["changes"]["old"])
|
|
+ changes[change_name]["old"] += "{}".format(i["changes"]["old"])
|
|
else:
|
|
comment.append(i["comment"])
|
|
changes[change_name] = {}
|
|
- changes[change_name]["new"] = "{0}".format(i["changes"]["new"])
|
|
+ changes[change_name]["new"] = "{}".format(i["changes"]["new"])
|
|
|
|
# Any requested packages that were not targeted for install or reinstall
|
|
if not_modified:
|
|
@@ -2031,11 +2042,11 @@ def installed(
|
|
summary = ", ".join([_get_desired_pkg(x, desired) for x in not_modified])
|
|
if len(not_modified) <= 20:
|
|
comment.append(
|
|
- "The following packages were already installed: " "{0}".format(summary)
|
|
+ "The following packages were already installed: " "{}".format(summary)
|
|
)
|
|
else:
|
|
comment.append(
|
|
- "{0} targeted package{1} {2} already installed".format(
|
|
+ "{} targeted package{} {} already installed".format(
|
|
len(not_modified),
|
|
"s" if len(not_modified) > 1 else "",
|
|
"were" if len(not_modified) > 1 else "was",
|
|
@@ -2054,7 +2065,7 @@ def installed(
|
|
else:
|
|
summary = ", ".join([_get_desired_pkg(x, desired) for x in failed])
|
|
comment.insert(
|
|
- 0, "The following packages failed to " "install/update: {0}".format(summary)
|
|
+ 0, "The following packages failed to " "install/update: {}".format(summary)
|
|
)
|
|
result = False
|
|
|
|
@@ -2118,7 +2129,7 @@ def installed(
|
|
pkgstr = modified_pkg
|
|
else:
|
|
pkgstr = _get_desired_pkg(modified_pkg, desired)
|
|
- msg = "Package {0} was reinstalled.".format(pkgstr)
|
|
+ msg = "Package {} was reinstalled.".format(pkgstr)
|
|
if modified_pkg in altered_files:
|
|
msg += " The following files were remediated:"
|
|
comment.append(msg)
|
|
@@ -2133,7 +2144,7 @@ def installed(
|
|
pkgstr = failed_pkg
|
|
else:
|
|
pkgstr = _get_desired_pkg(failed_pkg, desired)
|
|
- msg = "Reinstall was not successful for package {0}.".format(pkgstr)
|
|
+ msg = "Reinstall was not successful for package {}.".format(pkgstr)
|
|
if failed_pkg in altered_files:
|
|
msg += " The following files could not be remediated:"
|
|
comment.append(msg)
|
|
@@ -2274,12 +2285,12 @@ def downloaded(
|
|
ret["result"] = False
|
|
ret[
|
|
"comment"
|
|
- ] = "An error was encountered while checking targets: " "{0}".format(targets)
|
|
+ ] = "An error was encountered while checking targets: " "{}".format(targets)
|
|
return ret
|
|
|
|
if __opts__["test"]:
|
|
summary = ", ".join(targets)
|
|
- ret["comment"] = "The following packages would be " "downloaded: {0}".format(
|
|
+ ret["comment"] = "The following packages would be " "downloaded: {}".format(
|
|
summary
|
|
)
|
|
return ret
|
|
@@ -2306,7 +2317,7 @@ def downloaded(
|
|
ret["changes"] = {}
|
|
ret["comment"] = (
|
|
"An error was encountered while downloading "
|
|
- "package(s): {0}".format(exc)
|
|
+ "package(s): {}".format(exc)
|
|
)
|
|
return ret
|
|
|
|
@@ -2316,13 +2327,13 @@ def downloaded(
|
|
if failed:
|
|
summary = ", ".join([_get_desired_pkg(x, targets) for x in failed])
|
|
ret["result"] = False
|
|
- ret["comment"] = "The following packages failed to " "download: {0}".format(
|
|
+ ret["comment"] = "The following packages failed to " "download: {}".format(
|
|
summary
|
|
)
|
|
|
|
if not ret["changes"] and not ret["comment"]:
|
|
ret["result"] = True
|
|
- ret["comment"] = "Packages downloaded: " "{0}".format(", ".join(targets))
|
|
+ ret["comment"] = "Packages downloaded: " "{}".format(", ".join(targets))
|
|
|
|
return ret
|
|
|
|
@@ -2382,14 +2393,14 @@ def patch_installed(name, advisory_ids=None, downloadonly=None, **kwargs):
|
|
ret["result"] = False
|
|
ret[
|
|
"comment"
|
|
- ] = "An error was encountered while checking targets: " "{0}".format(targets)
|
|
+ ] = "An error was encountered while checking targets: " "{}".format(targets)
|
|
return ret
|
|
|
|
if __opts__["test"]:
|
|
summary = ", ".join(targets)
|
|
ret[
|
|
"comment"
|
|
- ] = "The following advisory patches would be " "downloaded: {0}".format(summary)
|
|
+ ] = "The following advisory patches would be " "downloaded: {}".format(summary)
|
|
return ret
|
|
|
|
try:
|
|
@@ -2408,7 +2419,7 @@ def patch_installed(name, advisory_ids=None, downloadonly=None, **kwargs):
|
|
ret["changes"] = {}
|
|
ret["comment"] = (
|
|
"An error was encountered while downloading "
|
|
- "package(s): {0}".format(exc)
|
|
+ "package(s): {}".format(exc)
|
|
)
|
|
return ret
|
|
|
|
@@ -2417,7 +2428,7 @@ def patch_installed(name, advisory_ids=None, downloadonly=None, **kwargs):
|
|
ret["result"] = True
|
|
ret["comment"] = (
|
|
"Advisory patch is not needed or related packages "
|
|
- "are already {0}".format(status)
|
|
+ "are already {}".format(status)
|
|
)
|
|
|
|
return ret
|
|
@@ -2674,7 +2685,7 @@ def latest(
|
|
"changes": {},
|
|
"result": False,
|
|
"comment": "An error was encountered while checking the "
|
|
- "newest available version of package(s): {0}".format(exc),
|
|
+ "newest available version of package(s): {}".format(exc),
|
|
}
|
|
|
|
try:
|
|
@@ -2683,9 +2694,9 @@ def latest(
|
|
return {"name": name, "changes": {}, "result": False, "comment": exc.strerror}
|
|
|
|
# Repack the cur/avail data if only a single package is being checked
|
|
- if isinstance(cur, six.string_types):
|
|
+ if isinstance(cur, str):
|
|
cur = {desired_pkgs[0]: cur}
|
|
- if isinstance(avail, six.string_types):
|
|
+ if isinstance(avail, str):
|
|
avail = {desired_pkgs[0]: avail}
|
|
|
|
targets = {}
|
|
@@ -2695,7 +2706,7 @@ def latest(
|
|
# Package either a) is up-to-date, or b) does not exist
|
|
if not cur.get(pkg):
|
|
# Package does not exist
|
|
- msg = "No information found for '{0}'.".format(pkg)
|
|
+ msg = "No information found for '{}'.".format(pkg)
|
|
log.error(msg)
|
|
problems.append(msg)
|
|
elif (
|
|
@@ -2741,12 +2752,12 @@ def latest(
|
|
comments.append(
|
|
"The following packages are already up-to-date: "
|
|
+ ", ".join(
|
|
- ["{0} ({1})".format(x, cur[x]) for x in sorted(up_to_date)]
|
|
+ ["{} ({})".format(x, cur[x]) for x in sorted(up_to_date)]
|
|
)
|
|
)
|
|
else:
|
|
comments.append(
|
|
- "{0} packages are already up-to-date".format(up_to_date_count)
|
|
+ "{} packages are already up-to-date".format(up_to_date_count)
|
|
)
|
|
|
|
return {
|
|
@@ -2784,7 +2795,7 @@ def latest(
|
|
"changes": {},
|
|
"result": False,
|
|
"comment": "An error was encountered while installing "
|
|
- "package(s): {0}".format(exc),
|
|
+ "package(s): {}".format(exc),
|
|
}
|
|
|
|
if changes:
|
|
@@ -2800,7 +2811,7 @@ def latest(
|
|
|
|
comments = []
|
|
if failed:
|
|
- msg = "The following packages failed to update: " "{0}".format(
|
|
+ msg = "The following packages failed to update: " "{}".format(
|
|
", ".join(sorted(failed))
|
|
)
|
|
comments.append(msg)
|
|
@@ -2808,19 +2819,17 @@ def latest(
|
|
msg = (
|
|
"The following packages were successfully "
|
|
"installed/upgraded: "
|
|
- "{0}".format(", ".join(sorted(successful)))
|
|
+ "{}".format(", ".join(sorted(successful)))
|
|
)
|
|
comments.append(msg)
|
|
if up_to_date:
|
|
if len(up_to_date) <= 10:
|
|
msg = (
|
|
"The following packages were already up-to-date: "
|
|
- "{0}".format(", ".join(sorted(up_to_date)))
|
|
+ "{}".format(", ".join(sorted(up_to_date)))
|
|
)
|
|
else:
|
|
- msg = "{0} packages were already up-to-date ".format(
|
|
- len(up_to_date)
|
|
- )
|
|
+ msg = "{} packages were already up-to-date ".format(len(up_to_date))
|
|
comments.append(msg)
|
|
|
|
return {
|
|
@@ -2832,18 +2841,18 @@ def latest(
|
|
else:
|
|
if len(targets) > 10:
|
|
comment = (
|
|
- "{0} targeted packages failed to update. "
|
|
+ "{} targeted packages failed to update. "
|
|
"See debug log for details.".format(len(targets))
|
|
)
|
|
elif len(targets) > 1:
|
|
comment = (
|
|
"The following targeted packages failed to update. "
|
|
- "See debug log for details: ({0}).".format(
|
|
+ "See debug log for details: ({}).".format(
|
|
", ".join(sorted(targets))
|
|
)
|
|
)
|
|
else:
|
|
- comment = "Package {0} failed to " "update.".format(
|
|
+ comment = "Package {} failed to " "update.".format(
|
|
next(iter(list(targets.keys())))
|
|
)
|
|
if up_to_date:
|
|
@@ -2851,10 +2860,10 @@ def latest(
|
|
comment += (
|
|
" The following packages were already "
|
|
"up-to-date: "
|
|
- "{0}".format(", ".join(sorted(up_to_date)))
|
|
+ "{}".format(", ".join(sorted(up_to_date)))
|
|
)
|
|
else:
|
|
- comment += "{0} packages were already " "up-to-date".format(
|
|
+ comment += "{} packages were already " "up-to-date".format(
|
|
len(up_to_date)
|
|
)
|
|
|
|
@@ -2866,13 +2875,13 @@ def latest(
|
|
}
|
|
else:
|
|
if len(desired_pkgs) > 10:
|
|
- comment = "All {0} packages are up-to-date.".format(len(desired_pkgs))
|
|
+ comment = "All {} packages are up-to-date.".format(len(desired_pkgs))
|
|
elif len(desired_pkgs) > 1:
|
|
- comment = "All packages are up-to-date " "({0}).".format(
|
|
+ comment = "All packages are up-to-date " "({}).".format(
|
|
", ".join(sorted(desired_pkgs))
|
|
)
|
|
else:
|
|
- comment = "Package {0} is already " "up-to-date".format(desired_pkgs[0])
|
|
+ comment = "Package {} is already " "up-to-date".format(desired_pkgs[0])
|
|
|
|
return {"name": name, "changes": {}, "result": True, "comment": comment}
|
|
|
|
@@ -2894,8 +2903,7 @@ def _uninstall(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": False,
|
|
- "comment": "Invalid action '{0}'. "
|
|
- "This is probably a bug.".format(action),
|
|
+ "comment": "Invalid action '{}'. " "This is probably a bug.".format(action),
|
|
}
|
|
|
|
try:
|
|
@@ -2908,7 +2916,7 @@ def _uninstall(
|
|
"changes": {},
|
|
"result": False,
|
|
"comment": "An error was encountered while parsing targets: "
|
|
- "{0}".format(exc),
|
|
+ "{}".format(exc),
|
|
}
|
|
targets = _find_remove_targets(
|
|
name, version, pkgs, normalize, ignore_epoch=ignore_epoch, **kwargs
|
|
@@ -2921,7 +2929,7 @@ def _uninstall(
|
|
"changes": {},
|
|
"result": False,
|
|
"comment": "An error was encountered while checking targets: "
|
|
- "{0}".format(targets),
|
|
+ "{}".format(targets),
|
|
}
|
|
if action == "purge":
|
|
old_removed = __salt__["pkg.list_pkgs"](
|
|
@@ -2936,7 +2944,7 @@ def _uninstall(
|
|
"changes": {},
|
|
"result": True,
|
|
"comment": "None of the targeted packages are installed"
|
|
- "{0}".format(" or partially installed" if action == "purge" else ""),
|
|
+ "{}".format(" or partially installed" if action == "purge" else ""),
|
|
}
|
|
|
|
if __opts__["test"]:
|
|
@@ -2944,11 +2952,11 @@ def _uninstall(
|
|
"name": name,
|
|
"changes": {},
|
|
"result": None,
|
|
- "comment": "The following packages will be {0}d: "
|
|
- "{1}.".format(action, ", ".join(targets)),
|
|
+ "comment": "The following packages will be {}d: "
|
|
+ "{}.".format(action, ", ".join(targets)),
|
|
}
|
|
|
|
- changes = __salt__["pkg.{0}".format(action)](
|
|
+ changes = __salt__["pkg.{}".format(action)](
|
|
name, pkgs=pkgs, version=version, **kwargs
|
|
)
|
|
new = __salt__["pkg.list_pkgs"](versions_as_list=True, **kwargs)
|
|
@@ -2975,8 +2983,8 @@ def _uninstall(
|
|
"name": name,
|
|
"changes": changes,
|
|
"result": False,
|
|
- "comment": "The following packages failed to {0}: "
|
|
- "{1}.".format(action, ", ".join(failed)),
|
|
+ "comment": "The following packages failed to {}: "
|
|
+ "{}.".format(action, ", ".join(failed)),
|
|
}
|
|
|
|
comments = []
|
|
@@ -2984,14 +2992,13 @@ def _uninstall(
|
|
if not_installed:
|
|
comments.append(
|
|
"The following packages were not installed: "
|
|
- "{0}".format(", ".join(not_installed))
|
|
+ "{}".format(", ".join(not_installed))
|
|
)
|
|
comments.append(
|
|
- "The following packages were {0}d: "
|
|
- "{1}.".format(action, ", ".join(targets))
|
|
+ "The following packages were {}d: " "{}.".format(action, ", ".join(targets))
|
|
)
|
|
else:
|
|
- comments.append("All targeted packages were {0}d.".format(action))
|
|
+ comments.append("All targeted packages were {}d.".format(action))
|
|
|
|
return {
|
|
"name": name,
|
|
@@ -3089,7 +3096,7 @@ def removed(name, version=None, pkgs=None, normalize=True, ignore_epoch=None, **
|
|
ret["changes"] = {}
|
|
ret[
|
|
"comment"
|
|
- ] = "An error was encountered while removing " "package(s): {0}".format(exc)
|
|
+ ] = "An error was encountered while removing " "package(s): {}".format(exc)
|
|
return ret
|
|
|
|
|
|
@@ -3181,7 +3188,7 @@ def purged(name, version=None, pkgs=None, normalize=True, ignore_epoch=None, **k
|
|
ret["changes"] = {}
|
|
ret[
|
|
"comment"
|
|
- ] = "An error was encountered while purging " "package(s): {0}".format(exc)
|
|
+ ] = "An error was encountered while purging " "package(s): {}".format(exc)
|
|
return ret
|
|
|
|
|
|
@@ -3247,17 +3254,17 @@ def uptodate(name, refresh=False, pkgs=None, **kwargs):
|
|
"new": pkgver,
|
|
"old": __salt__["pkg.version"](pkgname, **kwargs),
|
|
}
|
|
- for pkgname, pkgver in six.iteritems(packages)
|
|
+ for pkgname, pkgver in packages.items()
|
|
}
|
|
if isinstance(pkgs, list):
|
|
packages = [pkg for pkg in packages if pkg in pkgs]
|
|
expected = {
|
|
pkgname: pkgver
|
|
- for pkgname, pkgver in six.iteritems(expected)
|
|
+ for pkgname, pkgver in expected.items()
|
|
if pkgname in pkgs
|
|
}
|
|
except Exception as exc: # pylint: disable=broad-except
|
|
- ret["comment"] = six.text_type(exc)
|
|
+ ret["comment"] = str(exc)
|
|
return ret
|
|
else:
|
|
ret["comment"] = "refresh must be either True or False"
|
|
@@ -3284,16 +3291,16 @@ def uptodate(name, refresh=False, pkgs=None, **kwargs):
|
|
ret["changes"] = {}
|
|
ret[
|
|
"comment"
|
|
- ] = "An error was encountered while updating " "packages: {0}".format(exc)
|
|
+ ] = "An error was encountered while updating " "packages: {}".format(exc)
|
|
return ret
|
|
|
|
# If a package list was provided, ensure those packages were updated
|
|
missing = []
|
|
if isinstance(pkgs, list):
|
|
- missing = [pkg for pkg in six.iterkeys(expected) if pkg not in ret["changes"]]
|
|
+ missing = [pkg for pkg in expected.keys() if pkg not in ret["changes"]]
|
|
|
|
if missing:
|
|
- ret["comment"] = "The following package(s) failed to update: {0}".format(
|
|
+ ret["comment"] = "The following package(s) failed to update: {}".format(
|
|
", ".join(missing)
|
|
)
|
|
ret["result"] = False
|
|
@@ -3362,8 +3369,8 @@ def group_installed(name, skip=None, include=None, **kwargs):
|
|
ret["comment"] = "skip must be formatted as a list"
|
|
return ret
|
|
for idx, item in enumerate(skip):
|
|
- if not isinstance(item, six.string_types):
|
|
- skip[idx] = six.text_type(item)
|
|
+ if not isinstance(item, str):
|
|
+ skip[idx] = str(item)
|
|
|
|
if include is None:
|
|
include = []
|
|
@@ -3372,15 +3379,15 @@ def group_installed(name, skip=None, include=None, **kwargs):
|
|
ret["comment"] = "include must be formatted as a list"
|
|
return ret
|
|
for idx, item in enumerate(include):
|
|
- if not isinstance(item, six.string_types):
|
|
- include[idx] = six.text_type(item)
|
|
+ if not isinstance(item, str):
|
|
+ include[idx] = str(item)
|
|
|
|
try:
|
|
diff = __salt__["pkg.group_diff"](name)
|
|
except CommandExecutionError as err:
|
|
ret["comment"] = (
|
|
"An error was encountered while installing/updating "
|
|
- "group '{0}': {1}.".format(name, err)
|
|
+ "group '{}': {}.".format(name, err)
|
|
)
|
|
return ret
|
|
|
|
@@ -3390,7 +3397,7 @@ def group_installed(name, skip=None, include=None, **kwargs):
|
|
if invalid_skip:
|
|
ret[
|
|
"comment"
|
|
- ] = "The following mandatory packages cannot be skipped: {0}".format(
|
|
+ ] = "The following mandatory packages cannot be skipped: {}".format(
|
|
", ".join(invalid_skip)
|
|
)
|
|
return ret
|
|
@@ -3401,7 +3408,7 @@ def group_installed(name, skip=None, include=None, **kwargs):
|
|
|
|
if not targets:
|
|
ret["result"] = True
|
|
- ret["comment"] = "Group '{0}' is already installed".format(name)
|
|
+ ret["comment"] = "Group '{}' is already installed".format(name)
|
|
return ret
|
|
|
|
partially_installed = (
|
|
@@ -3415,9 +3422,9 @@ def group_installed(name, skip=None, include=None, **kwargs):
|
|
if partially_installed:
|
|
ret[
|
|
"comment"
|
|
- ] = "Group '{0}' is partially installed and will be updated".format(name)
|
|
+ ] = "Group '{}' is partially installed and will be updated".format(name)
|
|
else:
|
|
- ret["comment"] = "Group '{0}' will be installed".format(name)
|
|
+ ret["comment"] = "Group '{}' will be installed".format(name)
|
|
return ret
|
|
|
|
try:
|
|
@@ -3432,19 +3439,19 @@ def group_installed(name, skip=None, include=None, **kwargs):
|
|
ret["changes"] = {}
|
|
ret["comment"] = (
|
|
"An error was encountered while "
|
|
- "installing/updating group '{0}': {1}".format(name, exc)
|
|
+ "installing/updating group '{}': {}".format(name, exc)
|
|
)
|
|
return ret
|
|
|
|
failed = [x for x in targets if x not in __salt__["pkg.list_pkgs"](**kwargs)]
|
|
if failed:
|
|
- ret["comment"] = "Failed to install the following packages: {0}".format(
|
|
+ ret["comment"] = "Failed to install the following packages: {}".format(
|
|
", ".join(failed)
|
|
)
|
|
return ret
|
|
|
|
ret["result"] = True
|
|
- ret["comment"] = "Group '{0}' was {1}".format(
|
|
+ ret["comment"] = "Group '{}' was {}".format(
|
|
name, "updated" if partially_installed else "installed"
|
|
)
|
|
return ret
|
|
@@ -3561,6 +3568,6 @@ def mod_watch(name, **kwargs):
|
|
return {
|
|
"name": name,
|
|
"changes": {},
|
|
- "comment": "pkg.{0} does not work with the watch requisite".format(sfun),
|
|
+ "comment": "pkg.{} does not work with the watch requisite".format(sfun),
|
|
"result": False,
|
|
}
|
|
--
|
|
2.29.2
|
|
|
|
|