diff options
author | Michael Scherer <misc@zarb.org> | 2015-01-11 04:27:10 +0100 |
---|---|---|
committer | Michael Scherer <misc@zarb.org> | 2015-01-11 05:02:51 +0100 |
commit | 0b2d190f7243d702b471d46d0aa1151fd5384869 (patch) | |
tree | b01d073822a0782b0ec9d5e2b5b843ace5e2ad81 | |
parent | d3297dc8a82b02bb7d452516047dda810c0991e6 (diff) | |
download | ansible-modules-core-0b2d190f7243d702b471d46d0aa1151fd5384869.tar.gz |
Use the rpm python module rather than execing rpm
Using the rpm module prevent a uneeded fork, and permit
to skip the signature checking which slow down a bit the
operation, and which would be done by yum on installation
anyway.
-rw-r--r-- | packaging/os/yum.py | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/packaging/os/yum.py b/packaging/os/yum.py index 73fbb699..b652fd34 100644 --- a/packaging/os/yum.py +++ b/packaging/os/yum.py @@ -25,6 +25,7 @@ import traceback import os import yum +import rpm try: from yum.misc import find_unfinished_transactions, find_ts_remaining @@ -108,7 +109,7 @@ options: notes: [] # informational: requirements for nodes -requirements: [ yum, rpm ] +requirements: [ yum ] author: Seth Vidal ''' @@ -405,14 +406,19 @@ def transaction_exists(pkglist): def local_nvra(module, path): """return nvra of a local rpm passed in""" - - cmd = ['/bin/rpm', '-qp' ,'--qf', - '%{name}-%{version}-%{release}.%{arch}\n', path ] - rc, out, err = module.run_command(cmd) - if rc != 0: - return None - nvra = out.split('\n')[0] - return nvra + + ts = rpm.TransactionSet() + ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) + fd = os.open(path, os.O_RDONLY) + try: + header = ts.hdrFromFdno(fd) + finally: + os.close(fd) + + return '%s-%s-%s.%s' % (header[rpm.RPMTAG_NAME], + header[rpm.RPMTAG_VERSION], + header[rpm.RPMTAG_RELEASE], + header[rpm.RPMTAG_ARCH]) def pkg_to_dict(pkgstr): |