diff options
author | Tobias Florek <tob@butter.sh> | 2015-11-24 10:23:58 +0100 |
---|---|---|
committer | Tobias Florek <tob@butter.sh> | 2016-07-18 10:10:52 +0200 |
commit | 18f1d496aacdb8ba9cf3fc20018a417b86e4c981 (patch) | |
tree | d726ad3c9cebc7e8636577dd5cb4d0a3dd538a46 /library/rpm_q.py | |
parent | 166db870ed38eaff45a040128c9f4aca252f25d0 (diff) | |
download | openshift-18f1d496aacdb8ba9cf3fc20018a417b86e4c981.tar.gz openshift-18f1d496aacdb8ba9cf3fc20018a417b86e4c981.tar.bz2 openshift-18f1d496aacdb8ba9cf3fc20018a417b86e4c981.tar.xz openshift-18f1d496aacdb8ba9cf3fc20018a417b86e4c981.zip |
add rpm_q module to query rpm database
Diffstat (limited to 'library/rpm_q.py')
-rw-r--r-- | library/rpm_q.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/library/rpm_q.py b/library/rpm_q.py new file mode 100644 index 000000000..7e184579a --- /dev/null +++ b/library/rpm_q.py @@ -0,0 +1,66 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# (c) 2015, Tobias Florek <tob@butter.sh> +# Licensed under the terms of the MIT License + +from ansible.module_utils.basic import * + +DOCUMENTATION = """ +--- +module: rpm_q +short_description: Query the RPM database +author: Tobias Florek +options: + name: + description: + - The name of the package to query + required: true + state: + description: + - Whether the package is supposed to be installed or not + choices: [present, absent] + default: present +""" + +EXAMPLES = """ +- rpm_q: name=ansible state=present +- rpm_q: name=ansible state=absent +""" + +import os + +RPM_BINARY = '/bin/rpm' + +def main(): + """ + Checks rpm -q for the named package and returns the installed packages + or None if not installed. + """ + module = AnsibleModule( + argument_spec=dict( + name=dict(required=True), + state=dict(default='present', choices=['present', 'absent']) + ), + supports_check_mode=True + ) + + name = module.params['name'] + state = module.params['state'] + + rc, out, err = module.run_command([RPM_BINARY, '-q', name]) + + installed = out.rstrip('\n').split('\n') + + if rc != 0: + if state == 'present': + module.fail_json(msg="%s is not installed" % name, stdout=out, stderr=err, rc=rc) + else: + module.exit_json(changed=False) + elif state == 'present': + module.exit_json(changed=False, installed_versions=installed) + else: + module.fail_json(msg="%s is installed", installed_versions=installed) + +if __name__ == '__main__': + main() |