summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-06-04 13:31:55 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-06-04 13:31:55 -0400
commit0c0e773334404a9406bfb413e7ef7e89d5ac4a86 (patch)
treebad3dd91dc8180c0e46ce66f5e22b2d90d673f61
parentd071bc08bfdaf154f1691999e5f413c7a3b634af (diff)
downloadbcfg2-yum-helper-bug.tar.gz
bcfg2-yum-helper-bug.tar.bz2
bcfg2-yum-helper-bug.zip
bcfg2-yum-helper: use null RPM dbyum-helper-bug
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Yum.py10
-rwxr-xr-xsrc/sbin/bcfg2-yum-helper21
2 files changed, 27 insertions, 4 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
index 20b2c9500..29b403291 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
@@ -877,10 +877,16 @@ class YumCollection(Collection):
:returns: Varies depending on the return value of the
``bcfg2-yum-helper`` command.
"""
- cmd = [self.helper, "-c", self.cfgfile]
+ cmd = [self.helper, "-c", self.cfgfile, "-t", self.cachefile]
verbose = self.debug_flag or self.setup['verbose']
- if verbose:
+ if self.setup['verbose']:
cmd.append("-v")
+ if self.debug_flag:
+ cmd.append("-v")
+ if not self.setup['verbose']:
+ # ensure that the helper is always run with -vv in
+ # debug mode, even if verbose is disabled
+ cmd.append("-v")
cmd.append(command)
self.debug_log("Packages: running %s" % " ".join(cmd), flag=verbose)
try:
diff --git a/src/sbin/bcfg2-yum-helper b/src/sbin/bcfg2-yum-helper
index 7dbdad16b..9e2a1b410 100755
--- a/src/sbin/bcfg2-yum-helper
+++ b/src/sbin/bcfg2-yum-helper
@@ -8,7 +8,10 @@ code. It's pure madness. """
import os
import sys
import yum
+import atexit
+import shutil
import logging
+import tempfile
import Bcfg2.Logger
from optparse import OptionParser
try:
@@ -45,9 +48,15 @@ def pkgtup_to_string(package):
class DepSolver(object):
""" Yum dependency solver """
- def __init__(self, cfgfile, verbose=1):
+ def __init__(self, cfgfile, tempdir=None, verbose=1):
self.cfgfile = cfgfile
self.yumbase = yum.YumBase()
+ self.tmpdir = tempdir
+ # do not use the local rpmdb; instead, use a bogus RPM db
+ # (with no packages in it) as the rpmdb.
+ self.yumbase.rpmdb = \
+ yum.rpmsack.RPMDBPackageSack(root=self.tmpdir,
+ persistdir=self.tmpdir)
# pylint: disable=E1121,W0212
try:
self.yumbase.preconf.debuglevel = verbose
@@ -197,6 +206,7 @@ class DepSolver(object):
def main():
parser = OptionParser()
parser.add_option("-c", "--config", help="Config file")
+ parser.add_option("-t", "--tmpdir", help="Temporary directory to use")
parser.add_option("-v", "--verbose", help="Verbosity level",
action="count")
(options, args) = parser.parse_args()
@@ -221,7 +231,14 @@ def main():
logger.error("Config file %s not found" % options.config)
return 1
- depsolver = DepSolver(options.config, options.verbose)
+ if options.tmpdir:
+ tmpdir = options.tmpdir
+ else:
+ tmpdir = tempfile.mkdtemp()
+ logger.debug("Using %s as temp dir" % tmpdir)
+ atexit.register(lambda: shutil.rmtree(tmpdir))
+
+ depsolver = DepSolver(options.config, tmpdir, options.verbose)
if cmd == "clean":
depsolver.clean_cache()
print(json.dumps(True))