summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Scherer <misc@zarb.org>2015-01-11 04:27:10 +0100
committerMichael Scherer <misc@zarb.org>2015-01-11 05:02:51 +0100
commit0b2d190f7243d702b471d46d0aa1151fd5384869 (patch)
treeb01d073822a0782b0ec9d5e2b5b843ace5e2ad81
parentd3297dc8a82b02bb7d452516047dda810c0991e6 (diff)
downloadansible-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.py24
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):