mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Added autoclean/autoremove for the apt module
- Removed alias autoclean from autoremove. - Added independent execution of apt-get autoclean/autoremove - Continued to support --auto-remove as a flag to install/remove Fixes #22222 #24718
This commit is contained in:
parent
8fca263560
commit
2af5556901
2 changed files with 66 additions and 4 deletions
|
@ -115,11 +115,18 @@ options:
|
||||||
autoremove:
|
autoremove:
|
||||||
description:
|
description:
|
||||||
- If C(yes), remove unused dependency packages for all module states except I(build-dep). It can also be used as the only option.
|
- If C(yes), remove unused dependency packages for all module states except I(build-dep). It can also be used as the only option.
|
||||||
|
- Previous to version 2.4, autoclean was also an alias for autoremove, now it is its own separate command. See documentation for further information.
|
||||||
required: false
|
required: false
|
||||||
default: no
|
default: no
|
||||||
choices: [ "yes", "no" ]
|
choices: [ "yes", "no" ]
|
||||||
aliases: [ 'autoclean']
|
|
||||||
version_added: "2.1"
|
version_added: "2.1"
|
||||||
|
autoclean:
|
||||||
|
description:
|
||||||
|
- If C(yes), cleans the local repository of retrieved package files that can no longer be downloaded.
|
||||||
|
required: false
|
||||||
|
default: no
|
||||||
|
choices: [ "yes", "no" ]
|
||||||
|
version_added: "2.4"
|
||||||
only_upgrade:
|
only_upgrade:
|
||||||
description:
|
description:
|
||||||
- Only upgrade a package if it is already installed.
|
- Only upgrade a package if it is already installed.
|
||||||
|
@ -206,6 +213,14 @@ EXAMPLES = '''
|
||||||
- name: Install a .deb package from the internet.
|
- name: Install a .deb package from the internet.
|
||||||
apt:
|
apt:
|
||||||
deb: https://example.com/python-ppq_0.1-1_all.deb
|
deb: https://example.com/python-ppq_0.1-1_all.deb
|
||||||
|
|
||||||
|
- name: Remove useless packages from the cache
|
||||||
|
apt:
|
||||||
|
autoclean: yes
|
||||||
|
|
||||||
|
- name: Remove dependencies that are no longer required
|
||||||
|
apt:
|
||||||
|
autoremove: yes
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = '''
|
RETURN = '''
|
||||||
|
@ -668,6 +683,35 @@ def remove(m, pkgspec, cache, purge=False, force=False,
|
||||||
m.exit_json(changed=True, stdout=out, stderr=err, diff=diff)
|
m.exit_json(changed=True, stdout=out, stderr=err, diff=diff)
|
||||||
|
|
||||||
|
|
||||||
|
def cleanup(m, purge=False, force=False, operation=None,
|
||||||
|
dpkg_options=expand_dpkg_options(DPKG_OPTIONS)):
|
||||||
|
if force:
|
||||||
|
force_yes = '--force-yes'
|
||||||
|
else:
|
||||||
|
force_yes = ''
|
||||||
|
|
||||||
|
if purge:
|
||||||
|
purge = '--purge'
|
||||||
|
else:
|
||||||
|
purge = ''
|
||||||
|
|
||||||
|
if m.check_mode:
|
||||||
|
check_arg = '--simulate'
|
||||||
|
else:
|
||||||
|
check_arg = ''
|
||||||
|
|
||||||
|
cmd = "%s -y %s %s %s %s %s" % (APT_GET_CMD, dpkg_options, purge, force_yes, operation, check_arg)
|
||||||
|
|
||||||
|
rc, out, err = m.run_command(cmd)
|
||||||
|
if m._diff:
|
||||||
|
diff = parse_diff(out)
|
||||||
|
else:
|
||||||
|
diff = {}
|
||||||
|
if rc:
|
||||||
|
m.fail_json(msg="'apt-get %s' failed: %s" % (operation, err), stdout=out, stderr=err, rc=rc)
|
||||||
|
m.exit_json(changed=bool(len(diff)), stdout=out, stderr=err, diff=diff)
|
||||||
|
|
||||||
|
|
||||||
def upgrade(m, mode="yes", force=False, default_release=None,
|
def upgrade(m, mode="yes", force=False, default_release=None,
|
||||||
dpkg_options=expand_dpkg_options(DPKG_OPTIONS)):
|
dpkg_options=expand_dpkg_options(DPKG_OPTIONS)):
|
||||||
if m.check_mode:
|
if m.check_mode:
|
||||||
|
@ -815,7 +859,8 @@ def main():
|
||||||
force=dict(default='no', type='bool'),
|
force=dict(default='no', type='bool'),
|
||||||
upgrade=dict(choices=['no', 'yes', 'safe', 'full', 'dist']),
|
upgrade=dict(choices=['no', 'yes', 'safe', 'full', 'dist']),
|
||||||
dpkg_options=dict(default=DPKG_OPTIONS),
|
dpkg_options=dict(default=DPKG_OPTIONS),
|
||||||
autoremove=dict(type='bool', aliases=['autoclean']),
|
autoremove=dict(type='bool', default='no'),
|
||||||
|
autoclean=dict(type='bool', default='no'),
|
||||||
only_upgrade=dict(type='bool', default=False),
|
only_upgrade=dict(type='bool', default=False),
|
||||||
allow_unauthenticated=dict(default='no', aliases=['allow-unauthenticated'], type='bool'),
|
allow_unauthenticated=dict(default='no', aliases=['allow-unauthenticated'], type='bool'),
|
||||||
),
|
),
|
||||||
|
@ -860,6 +905,7 @@ def main():
|
||||||
allow_unauthenticated = p['allow_unauthenticated']
|
allow_unauthenticated = p['allow_unauthenticated']
|
||||||
dpkg_options = expand_dpkg_options(p['dpkg_options'])
|
dpkg_options = expand_dpkg_options(p['dpkg_options'])
|
||||||
autoremove = p['autoremove']
|
autoremove = p['autoremove']
|
||||||
|
autoclean = p['autoclean']
|
||||||
|
|
||||||
# Deal with deprecated aliases
|
# Deal with deprecated aliases
|
||||||
if p['state'] == 'installed':
|
if p['state'] == 'installed':
|
||||||
|
@ -924,8 +970,9 @@ def main():
|
||||||
allow_unauthenticated=allow_unauthenticated,
|
allow_unauthenticated=allow_unauthenticated,
|
||||||
force=force_yes, dpkg_options=p['dpkg_options'])
|
force=force_yes, dpkg_options=p['dpkg_options'])
|
||||||
|
|
||||||
packages = [package for package in p['package'] if package != '*']
|
unfiltered_packages = p['package'] or ()
|
||||||
all_installed = '*' in p['package']
|
packages = [package for package in unfiltered_packages if package != '*']
|
||||||
|
all_installed = '*' in unfiltered_packages
|
||||||
latest = p['state'] == 'latest'
|
latest = p['state'] == 'latest'
|
||||||
|
|
||||||
if latest and all_installed:
|
if latest and all_installed:
|
||||||
|
@ -940,6 +987,12 @@ def main():
|
||||||
if latest and '=' in package:
|
if latest and '=' in package:
|
||||||
module.fail_json(msg='version number inconsistent with state=latest: %s' % package)
|
module.fail_json(msg='version number inconsistent with state=latest: %s' % package)
|
||||||
|
|
||||||
|
if not packages:
|
||||||
|
if autoclean:
|
||||||
|
cleanup(module, p['purge'], force=force_yes, operation='autoclean', dpkg_options=dpkg_options)
|
||||||
|
if autoremove:
|
||||||
|
cleanup(module, p['purge'], force=force_yes, operation='autoremove', dpkg_options=dpkg_options)
|
||||||
|
|
||||||
if p['state'] in ('latest', 'present', 'build-dep'):
|
if p['state'] in ('latest', 'present', 'build-dep'):
|
||||||
state_upgrade = False
|
state_upgrade = False
|
||||||
state_builddep = False
|
state_builddep = False
|
||||||
|
|
|
@ -160,3 +160,12 @@
|
||||||
that:
|
that:
|
||||||
- "not apt_result.changed"
|
- "not apt_result.changed"
|
||||||
- "apt_result.failed"
|
- "apt_result.failed"
|
||||||
|
|
||||||
|
- name: autoclean during install
|
||||||
|
apt: pkg=hello state=present autoclean=yes
|
||||||
|
|
||||||
|
- name: autoclean
|
||||||
|
apt: autoclean=yes
|
||||||
|
|
||||||
|
- name: autoremove
|
||||||
|
apt: autoremove=yes
|
||||||
|
|
Loading…
Reference in a new issue