Allow multiple packages to removed at the same time

pull/18777/head
Kevin Brebanov 9 years ago committed by Matt Clay
parent 69389f0cdc
commit a5d604e151

@ -60,6 +60,9 @@ EXAMPLES = '''
# Remove "foo" package # Remove "foo" package
- apk: name=foo state=absent - apk: name=foo state=absent
# Remove "foo" and "bar" packages
- apk: name=foo,bar state=absent
# Install the package "foo" # Install the package "foo"
- apk: name=foo state=present - apk: name=foo state=present
@ -138,18 +141,22 @@ def install_package(module, name, state):
module.fail_json(msg="failed to install %s" % (name)) module.fail_json(msg="failed to install %s" % (name))
module.exit_json(changed=True, msg="installed %s package" % (name)) module.exit_json(changed=True, msg="installed %s package" % (name))
def remove_package(module, name): def remove_packages(module, names):
installed = query_package(module, name) installed = []
for name in names:
if query_package(module, name):
installed.append(name)
if not installed: if not installed:
module.exit_json(changed=False, msg="package already removed") module.exit_json(changed=False, msg="package(s) already removed")
names = " ".join(installed)
if module.check_mode: if module.check_mode:
cmd = "apk del --purge --simulate %s" % (name) cmd = "apk del --purge --simulate %s" % (names)
else: else:
cmd = "apk del --purge %s" % (name) cmd = "apk del --purge %s" % (names)
rc, stdout, stderr = module.run_command(cmd, check_rc=False) rc, stdout, stderr = module.run_command(cmd, check_rc=False)
if rc != 0: if rc != 0:
module.fail_json(msg="failed to remove %s" % (name)) module.fail_json(msg="failed to remove %s package(s)" % (names))
module.exit_json(changed=True, msg="removed %s package" % (name)) module.exit_json(changed=True, msg="removed %s package(s)" % (names))
# ========================================== # ==========================================
# Main control flow. # Main control flow.
@ -185,10 +192,14 @@ def main():
if p['upgrade']: if p['upgrade']:
upgrade_packages(module) upgrade_packages(module)
# Create a list of package names
# Removing empty strings that may have been created by a trailing ','
names = filter((lambda x: x != ''), p['name'].split(','))
if p['state'] in ['present', 'latest']: if p['state'] in ['present', 'latest']:
install_package(module, p['name'], p['state']) install_package(module, p['name'], p['state'])
elif p['state'] == 'absent': elif p['state'] == 'absent':
remove_package(module, p['name']) remove_packages(module, names)
# Import module snippets. # Import module snippets.
from ansible.module_utils.basic import * from ansible.module_utils.basic import *

Loading…
Cancel
Save