summaryrefslogtreecommitdiffstats
path: root/roles/lib_utils/library/rpm_q.py
diff options
context:
space:
mode:
authorScott Dodson <sdodson@redhat.com>2017-12-19 13:08:55 -0500
committerGitHub <noreply@github.com>2017-12-19 13:08:55 -0500
commit151115eaf18d557aa8f770e61820e10bed4109bc (patch)
tree2d8a7305669b242ec1c03a06ecb5cf3238dec688 /roles/lib_utils/library/rpm_q.py
parent7ab8e67bfc62e16466e3fd211fded63f16583403 (diff)
parent801779eeb6f6308f81ae7c48409de7686c04a0aa (diff)
downloadopenshift-151115eaf18d557aa8f770e61820e10bed4109bc.tar.gz
openshift-151115eaf18d557aa8f770e61820e10bed4109bc.tar.bz2
openshift-151115eaf18d557aa8f770e61820e10bed4109bc.tar.xz
openshift-151115eaf18d557aa8f770e61820e10bed4109bc.zip
Merge pull request #6469 from mgugino-upstream-stage/plugin-consolidate
Plugin consolidate
Diffstat (limited to 'roles/lib_utils/library/rpm_q.py')
-rw-r--r--roles/lib_utils/library/rpm_q.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/roles/lib_utils/library/rpm_q.py b/roles/lib_utils/library/rpm_q.py
new file mode 100644
index 000000000..3dec50fc2
--- /dev/null
+++ b/roles/lib_utils/library/rpm_q.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# (c) 2015, Tobias Florek <tob@butter.sh>
+# Licensed under the terms of the MIT License
+"""
+An ansible module to query the RPM database. For use, when yum/dnf are not
+available.
+"""
+
+# pylint: disable=redefined-builtin,wildcard-import,unused-wildcard-import
+from ansible.module_utils.basic import * # noqa: F403
+
+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
+"""
+
+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( # noqa: F405
+ 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']
+
+ # pylint: disable=invalid-name
+ 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()