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>
pull/48068/head
Adam Miller 6 years ago committed by ansibot
parent 14037443de
commit 1c777976c5

@ -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…
Cancel
Save