package_facts add alias support

fixes #83143
pull/83149/head
Brian Coca 1 month ago
parent 124d03145c
commit 2d690d7bdc

@ -0,0 +1,2 @@
minor_changes;
- package_facts module now supports using aliases for supported package managers, for example managers=yum or managers=dnf will resolve to using the underlying rpm.

@ -14,30 +14,42 @@ description:
options:
manager:
description:
- The package manager used by the system so we can query the package information.
- Since 2.8 this is a list and can support multiple package managers per system.
- The package manager(s) used by the system so we can query the package information.
This is a list and can support multiple package managers per system, since version 2.8.
- The 'portage' and 'pkg' options were added in version 2.8.
- The 'apk' option was added in version 2.11.
- The 'pkg_info' option was added in version 2.13.
- Aliases were added in 2.18, to support using C(auto={{ansible_facts['pkg_mgr']}})
default: ['auto']
choices: ['auto', 'rpm', 'apt', 'portage', 'pkg', 'pacman', 'apk', 'pkg_info']
choices:
auto: Depending on O(strategy), will match the first or all package managers provided, in order
rpm: For .rpm based distros, requires RPM Python bindings, not installed by default on Suse (python3-rpm)
yum: Alias to rpm
dnf: Alias to rpm
dnf5: Alias to rpm
zypper: Alias to rpm
apt: For .deb based distros, C(python-apt) package must be installed on targeted hosts
portage: Handles ebuild packages, it requires the C(qlist) utility, which is part of 'app-portage/portage-utils'
pkg: libpkg front end (FreeBSD)
pkg5: Alias to pkg
pkgng: Alias to pkg
pacman: Archlinux package managaer/builder
apk: Alpine linux package manager
pkg_info: OpenBSD package manager
openbsd_pkg: Alias To pkg_info
type: list
elements: str
strategy:
description:
- This option controls how the module queries the package managers on the system.
V(first) means it will return only information for the first supported package manager available.
V(all) will return information for all supported and available package managers on the system.
choices: ['first', 'all']
choices:
first: means it will return only information for the first supported package manager available.
all: will return information for all supported and available package managers on the system.
default: 'first'
type: str
version_added: "2.8"
version_added: "2.5"
requirements:
- For 'portage' support it requires the C(qlist) utility, which is part of 'app-portage/portage-utils'.
- For Debian-based systems C(python-apt) package must be installed on targeted hosts.
- For SUSE-based systems C(python3-rpm) package must be installed on targeted hosts.
This package is required because SUSE does not include RPM Python bindings by default.
author:
- Matthew Jones (@matburt)
- Brian Coca (@bcoca)
@ -247,6 +259,13 @@ from ansible.module_utils.common.respawn import has_respawned, probe_interpreter
from ansible.module_utils.facts.packages import LibMgr, CLIMgr, get_all_pkg_managers
ALIASES = {
'rpm': ['dnf', 'dfn5','yum' , 'zypper'],
'pkg': ['pkg5', 'pkgng'],
'pkg_info': ['openbsd_pkg'],
}
class RPM(LibMgr):
LIB = 'rpm'
@ -485,9 +504,13 @@ def main():
# get supported pkg managers
PKG_MANAGERS = get_all_pkg_managers()
PKG_MANAGER_NAMES = [x.lower() for x in PKG_MANAGERS.keys()]
# add aliases
PKG_MANAGER_NAMES.extend([alias for alist in ALIASES.values() for alias in alist])
# start work
global module
# choices are not set for 'manager' as they are computed dynamically and validated below instead of in argspec
module = AnsibleModule(argument_spec=dict(manager={'type': 'list', 'elements': 'str', 'default': ['auto']},
strategy={'choices': ['first', 'all'], 'default': 'first'}),
supports_check_mode=True)
@ -513,12 +536,19 @@ def main():
seen = set()
for pkgmgr in managers:
if found and strategy == 'first':
if strategy == 'first' and found:
break
# substitute aliases for aliased
for aliased in ALIASES:
if pkgmgr in ALIASES[aliased]
pkgmgr = aliased
break
# dedupe as per above
if pkgmgr in seen:
continue
seen.add(pkgmgr)
try:
try:

Loading…
Cancel
Save