use state=latest to ensure the latest version is installed. mimics functionality of the apt and yum modules.
This commit is contained in:
parent
3e7ab59eb4
commit
438a5a730e
1 changed files with 12 additions and 11 deletions
|
@ -42,7 +42,7 @@ options:
|
||||||
- Desired state of the package.
|
- Desired state of the package.
|
||||||
required: false
|
required: false
|
||||||
default: "present"
|
default: "present"
|
||||||
choices: ["present", "absent"]
|
choices: ["present", "absent", "latest"]
|
||||||
|
|
||||||
recurse:
|
recurse:
|
||||||
description:
|
description:
|
||||||
|
@ -68,7 +68,7 @@ EXAMPLES = '''
|
||||||
- pacman: name=foo state=present
|
- pacman: name=foo state=present
|
||||||
|
|
||||||
# Upgrade package foo
|
# Upgrade package foo
|
||||||
- pacman: name=foo state=present update_cache=yes
|
- pacman: name=foo state=latest update_cache=yes
|
||||||
|
|
||||||
# Remove packages foo and bar
|
# Remove packages foo and bar
|
||||||
- pacman: name=foo,bar state=absent
|
- pacman: name=foo,bar state=absent
|
||||||
|
@ -160,13 +160,13 @@ def remove_packages(module, packages):
|
||||||
module.exit_json(changed=False, msg="package(s) already absent")
|
module.exit_json(changed=False, msg="package(s) already absent")
|
||||||
|
|
||||||
|
|
||||||
def install_packages(module, packages, package_files):
|
def install_packages(module, state, packages, package_files):
|
||||||
install_c = 0
|
install_c = 0
|
||||||
|
|
||||||
for i, package in enumerate(packages):
|
for i, package in enumerate(packages):
|
||||||
# if the package is installed and up-to-date then skip
|
# if the package is installed and state == present or state == latest and is up-to-date then skip
|
||||||
installed, updated = query_package(module, package)
|
installed, updated = query_package(module, package)
|
||||||
if installed and updated:
|
if installed and (state == 'present' or (state == 'latest' and updated)):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if package_files[i]:
|
if package_files[i]:
|
||||||
|
@ -191,9 +191,10 @@ def install_packages(module, packages, package_files):
|
||||||
def check_packages(module, packages, state):
|
def check_packages(module, packages, state):
|
||||||
would_be_changed = []
|
would_be_changed = []
|
||||||
for package in packages:
|
for package in packages:
|
||||||
installed = query_package(module, package)
|
installed, updated = query_package(module, package)
|
||||||
if ((state == "present" and not installed) or
|
if ((state in ["present", "latest"] and not installed) or
|
||||||
(state == "absent" and installed)):
|
(state == "absent" and installed) or
|
||||||
|
(state == "latest" and not updated)):
|
||||||
would_be_changed.append(package)
|
would_be_changed.append(package)
|
||||||
if would_be_changed:
|
if would_be_changed:
|
||||||
if state == "absent":
|
if state == "absent":
|
||||||
|
@ -208,7 +209,7 @@ def main():
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec = dict(
|
argument_spec = dict(
|
||||||
name = dict(aliases=['pkg']),
|
name = dict(aliases=['pkg']),
|
||||||
state = dict(default='present', choices=['present', 'installed', 'absent', 'removed']),
|
state = dict(default='present', choices=['present', 'installed', "latest", 'absent', 'removed']),
|
||||||
recurse = dict(default='no', choices=BOOLEANS, type='bool'),
|
recurse = dict(default='no', choices=BOOLEANS, type='bool'),
|
||||||
update_cache = dict(default='no', aliases=['update-cache'], choices=BOOLEANS, type='bool')),
|
update_cache = dict(default='no', aliases=['update-cache'], choices=BOOLEANS, type='bool')),
|
||||||
required_one_of = [['name', 'update_cache']],
|
required_one_of = [['name', 'update_cache']],
|
||||||
|
@ -249,8 +250,8 @@ def main():
|
||||||
if module.check_mode:
|
if module.check_mode:
|
||||||
check_packages(module, pkgs, p['state'])
|
check_packages(module, pkgs, p['state'])
|
||||||
|
|
||||||
if p['state'] == 'present':
|
if p['state'] in ['present', 'latest']:
|
||||||
install_packages(module, pkgs, pkg_files)
|
install_packages(module, p['state'], pkgs, pkg_files)
|
||||||
elif p['state'] == 'absent':
|
elif p['state'] == 'absent':
|
||||||
remove_packages(module, pkgs)
|
remove_packages(module, pkgs)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue