summaryrefslogtreecommitdiffstats
path: root/ansible_collections/community/general/plugins/modules/pacman.py
diff options
context:
space:
mode:
Diffstat (limited to 'ansible_collections/community/general/plugins/modules/pacman.py')
-rw-r--r--ansible_collections/community/general/plugins/modules/pacman.py86
1 files changed, 49 insertions, 37 deletions
diff --git a/ansible_collections/community/general/plugins/modules/pacman.py b/ansible_collections/community/general/plugins/modules/pacman.py
index 66f58155d..7f67b9103 100644
--- a/ansible_collections/community/general/plugins/modules/pacman.py
+++ b/ansible_collections/community/general/plugins/modules/pacman.py
@@ -34,17 +34,17 @@ options:
name:
description:
- Name or list of names of the package(s) or file(s) to install, upgrade, or remove.
- Can't be used in combination with C(upgrade).
+ Cannot be used in combination with O(upgrade).
aliases: [ package, pkg ]
type: list
elements: str
state:
description:
- - Whether to install (C(present) or C(installed), C(latest)), or remove (C(absent) or C(removed)) a package.
- - C(present) and C(installed) will simply ensure that a desired package is installed.
- - C(latest) will update the specified package if it is not of the latest available version.
- - C(absent) and C(removed) will remove the specified package.
+ - Whether to install (V(present) or V(installed), V(latest)), or remove (V(absent) or V(removed)) a package.
+ - V(present) and V(installed) will simply ensure that a desired package is installed.
+ - V(latest) will update the specified package if it is not of the latest available version.
+ - V(absent) and V(removed) will remove the specified package.
default: present
choices: [ absent, installed, latest, present, removed ]
type: str
@@ -52,9 +52,9 @@ options:
force:
description:
- When removing packages, forcefully remove them, without any checks.
- Same as I(extra_args="--nodeps --nodeps").
- When combined with I(update_cache), force a refresh of all package databases.
- Same as I(update_cache_extra_args="--refresh --refresh").
+ Same as O(extra_args="--nodeps --nodeps").
+ - When combined with O(update_cache), force a refresh of all package databases.
+ Same as O(update_cache_extra_args="--refresh --refresh").
default: false
type: bool
@@ -79,7 +79,7 @@ options:
extra_args:
description:
- - Additional option to pass to pacman when enforcing C(state).
+ - Additional option to pass to pacman when enforcing O(state).
default: ''
type: str
@@ -87,28 +87,28 @@ options:
description:
- Whether or not to refresh the master package lists.
- This can be run as part of a package installation or as a separate step.
- - If not specified, it defaults to C(false).
+ - If not specified, it defaults to V(false).
- Please note that this option only had an influence on the module's C(changed) state
- if I(name) and I(upgrade) are not specified before community.general 5.0.0.
+ if O(name) and O(upgrade) are not specified before community.general 5.0.0.
See the examples for how to keep the old behavior.
type: bool
update_cache_extra_args:
description:
- - Additional option to pass to pacman when enforcing C(update_cache).
+ - Additional option to pass to pacman when enforcing O(update_cache).
default: ''
type: str
upgrade:
description:
- Whether or not to upgrade the whole system.
- Can't be used in combination with C(name).
- - If not specified, it defaults to C(false).
+ Cannot be used in combination with O(name).
+ - If not specified, it defaults to V(false).
type: bool
upgrade_extra_args:
description:
- - Additional option to pass to pacman when enforcing C(upgrade).
+ - Additional option to pass to pacman when enforcing O(upgrade).
default: ''
type: str
@@ -121,8 +121,8 @@ options:
reason_for:
description:
- - Set the install reason for C(all) packages or only for C(new) packages.
- - In case of I(state=latest) already installed packages which will be updated to a newer version are not counted as C(new).
+ - Set the install reason for V(all) packages or only for V(new) packages.
+ - In case of O(state=latest) already installed packages which will be updated to a newer version are not counted as V(new).
default: new
choices: [ all, new ]
type: str
@@ -130,20 +130,23 @@ options:
notes:
- When used with a C(loop:) each package will be processed individually,
- it is much more efficient to pass the list directly to the I(name) option.
- - To use an AUR helper (I(executable) option), a few extra setup steps might be required beforehand.
+ it is much more efficient to pass the list directly to the O(name) option.
+ - To use an AUR helper (O(executable) option), a few extra setup steps might be required beforehand.
For example, a dedicated build user with permissions to install packages could be necessary.
+ - >
+ In the tests, while using C(yay) as the O(executable) option, the module failed to install AUR packages
+ with the error: C(error: target not found: <pkg>).
"""
RETURN = """
packages:
description:
- A list of packages that have been changed.
- - Before community.general 4.5.0 this was only returned when I(upgrade=true).
+ - Before community.general 4.5.0 this was only returned when O(upgrade=true).
In community.general 4.5.0, it was sometimes omitted when the package list is empty,
- but since community.general 4.6.0 it is always returned when I(name) is specified or
- I(upgrade=true).
- returned: success and I(name) is specified or I(upgrade=true)
+ but since community.general 4.6.0 it is always returned when O(name) is specified or
+ O(upgrade=true).
+ returned: success and O(name) is specified or O(upgrade=true)
type: list
elements: str
sample: [ package, other-package ]
@@ -151,8 +154,8 @@ packages:
cache_updated:
description:
- The changed status of C(pacman -Sy).
- - Useful when I(name) or I(upgrade=true) are specified next to I(update_cache=true).
- returned: success, when I(update_cache=true)
+ - Useful when O(name) or O(upgrade=true) are specified next to O(update_cache=true).
+ returned: success, when O(update_cache=true)
type: bool
sample: false
version_added: 4.6.0
@@ -263,6 +266,7 @@ EXAMPLES = """
reason_for: all
"""
+import re
import shlex
from ansible.module_utils.basic import AnsibleModule
from collections import defaultdict, namedtuple
@@ -418,7 +422,7 @@ class Pacman(object):
for p in name_ver:
# With Pacman v6.0.1 - libalpm v13.0.1, --upgrade outputs "loading packages..." on stdout. strip that.
# When installing from URLs, pacman can also output a 'nothing to do' message. strip that too.
- if "loading packages" in p or "there is nothing to do" in p:
+ if "loading packages" in p or "there is nothing to do" in p or 'Avoid running' in p:
continue
name, version = p.split()
if name in self.inventory["installed_pkgs"]:
@@ -706,11 +710,12 @@ class Pacman(object):
installed_pkgs = {}
dummy, stdout, dummy = self.m.run_command([self.pacman_path, "--query"], check_rc=True)
# Format of a line: "pacman 6.0.1-2"
+ query_re = re.compile(r'^\s*(?P<pkg>\S+)\s+(?P<ver>\S+)\s*$')
for l in stdout.splitlines():
- l = l.strip()
- if not l:
+ query_match = query_re.match(l)
+ if not query_match:
continue
- pkg, ver = l.split()
+ pkg, ver = query_match.groups()
installed_pkgs[pkg] = ver
installed_groups = defaultdict(set)
@@ -721,11 +726,12 @@ class Pacman(object):
# base-devel file
# base-devel findutils
# ...
+ query_groups_re = re.compile(r'^\s*(?P<group>\S+)\s+(?P<pkg>\S+)\s*$')
for l in stdout.splitlines():
- l = l.strip()
- if not l:
+ query_groups_match = query_groups_re.match(l)
+ if not query_groups_match:
continue
- group, pkgname = l.split()
+ group, pkgname = query_groups_match.groups()
installed_groups[group].add(pkgname)
available_pkgs = {}
@@ -747,11 +753,12 @@ class Pacman(object):
# vim-plugins vim-airline-themes
# vim-plugins vim-ale
# ...
+ sync_groups_re = re.compile(r'^\s*(?P<group>\S+)\s+(?P<pkg>\S+)\s*$')
for l in stdout.splitlines():
- l = l.strip()
- if not l:
+ sync_groups_match = sync_groups_re.match(l)
+ if not sync_groups_match:
continue
- group, pkg = l.split()
+ group, pkg = sync_groups_match.groups()
available_groups[group].add(pkg)
upgradable_pkgs = {}
@@ -759,9 +766,14 @@ class Pacman(object):
[self.pacman_path, "--query", "--upgrades"], check_rc=False
)
+ stdout = stdout.splitlines()
+ if stdout and "Avoid running" in stdout[0]:
+ stdout = stdout[1:]
+ stdout = "\n".join(stdout)
+
# non-zero exit with nothing in stdout -> nothing to upgrade, all good
# stderr can have warnings, so not checked here
- if rc == 1 and stdout == "":
+ if rc == 1 and not stdout:
pass # nothing to upgrade
elif rc == 0:
# Format of lines:
@@ -771,7 +783,7 @@ class Pacman(object):
l = l.strip()
if not l:
continue
- if "[ignored]" in l:
+ if "[ignored]" in l or "Avoid running" in l:
continue
s = l.split()
if len(s) != 4: