mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Correct yum and dnf autoremove behavior (#47902)
* Correct yum and dnf autoremove behavior Sanity check args passed to autoremove Fixes #47184 Signed-off-by: Adam Miller <admiller@redhat.com> * fix docs Signed-off-by: Adam Miller <admiller@redhat.com>
This commit is contained in:
parent
14037443de
commit
1c777976c5
4 changed files with 21 additions and 8 deletions
3
changelogs/fragments/yumdnf-autoremove.yaml
Normal file
3
changelogs/fragments/yumdnf-autoremove.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
minor_changes:
|
||||||
|
- "fix yum and dnf autoremove input sanitization to properly warn user if invalid options passed and update documentation to match"
|
|
@ -40,7 +40,7 @@ yumdnf_argument_spec = dict(
|
||||||
security=dict(type='bool', default=False),
|
security=dict(type='bool', default=False),
|
||||||
skip_broken=dict(type='bool', default=False),
|
skip_broken=dict(type='bool', default=False),
|
||||||
# removed==absent, installed==present, these are accepted as aliases
|
# removed==absent, installed==present, these are accepted as aliases
|
||||||
state=dict(type='str', default='present', choices=['absent', 'installed', 'latest', 'present', 'removed']),
|
state=dict(type='str', default=None, choices=['absent', 'installed', 'latest', 'present', 'removed']),
|
||||||
update_cache=dict(type='bool', default=False, aliases=['expire-cache']),
|
update_cache=dict(type='bool', default=False, aliases=['expire-cache']),
|
||||||
update_only=dict(required=False, default="no", type='bool'),
|
update_only=dict(required=False, default="no", type='bool'),
|
||||||
validate_certs=dict(type='bool', default=True),
|
validate_certs=dict(type='bool', default=True),
|
||||||
|
@ -104,6 +104,19 @@ class YumDnf(with_metaclass(ABCMeta, object)):
|
||||||
'string of packages or a list of packages.'
|
'string of packages or a list of packages.'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Sanity checking for autoremove
|
||||||
|
if self.state is None:
|
||||||
|
if self.autoremove:
|
||||||
|
self.state = "absent"
|
||||||
|
else:
|
||||||
|
self.state = "present"
|
||||||
|
|
||||||
|
if self.autoremove and (self.state != "absent"):
|
||||||
|
self.module.fail_json(
|
||||||
|
msg="Autoremove should be used alone or with state=absent",
|
||||||
|
results=[],
|
||||||
|
)
|
||||||
|
|
||||||
# This should really be redefined by both the yum and dnf module but a
|
# This should really be redefined by both the yum and dnf module but a
|
||||||
# default isn't a bad idea
|
# default isn't a bad idea
|
||||||
self.lockfile = '/var/run/yum.pid'
|
self.lockfile = '/var/run/yum.pid'
|
||||||
|
|
|
@ -41,8 +41,9 @@ options:
|
||||||
state:
|
state:
|
||||||
description:
|
description:
|
||||||
- Whether to install (C(present), C(latest)), or remove (C(absent)) a package.
|
- Whether to install (C(present), C(latest)), or remove (C(absent)) a package.
|
||||||
|
- Default is C(None), however in effect the default action is C(present) unless the C(autoremove) option is
|
||||||
|
enabled for this module, then C(absent) is inferred.
|
||||||
choices: ['absent', 'present', 'installed', 'removed', 'latest']
|
choices: ['absent', 'present', 'installed', 'removed', 'latest']
|
||||||
default: "present"
|
|
||||||
|
|
||||||
enablerepo:
|
enablerepo:
|
||||||
description:
|
description:
|
||||||
|
@ -1041,11 +1042,6 @@ class DnfModule(YumDnf):
|
||||||
msg="Autoremove requires dnf>=2.0.1. Current dnf version is %s" % dnf.__version__,
|
msg="Autoremove requires dnf>=2.0.1. Current dnf version is %s" % dnf.__version__,
|
||||||
results=[],
|
results=[],
|
||||||
)
|
)
|
||||||
if self.state not in ["absent", None]:
|
|
||||||
self.module.fail_json(
|
|
||||||
msg="Autoremove should be used alone or with state=absent",
|
|
||||||
results=[],
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.update_cache and not self.names and not self.list:
|
if self.update_cache and not self.names and not self.list:
|
||||||
self.base = self._base(
|
self.base = self._base(
|
||||||
|
|
|
@ -55,8 +55,9 @@ options:
|
||||||
- C(present) and C(installed) will simply ensure that a desired package is installed.
|
- C(present) and C(installed) will simply ensure that a desired package is installed.
|
||||||
- C(latest) will update the specified package if it's not of the latest available version.
|
- C(latest) will update the specified package if it's not of the latest available version.
|
||||||
- C(absent) and C(removed) will remove the specified package.
|
- C(absent) and C(removed) will remove the specified package.
|
||||||
|
- Default is C(None), however in effect the default action is C(present) unless the C(autoremove) option is¬
|
||||||
|
enabled for this module, then C(absent) is inferred.
|
||||||
choices: [ absent, installed, latest, present, removed ]
|
choices: [ absent, installed, latest, present, removed ]
|
||||||
default: present
|
|
||||||
enablerepo:
|
enablerepo:
|
||||||
description:
|
description:
|
||||||
- I(Repoid) of repositories to enable for the install/update operation.
|
- I(Repoid) of repositories to enable for the install/update operation.
|
||||||
|
|
Loading…
Reference in a new issue