From 0c0e773334404a9406bfb413e7ef7e89d5ac4a86 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 4 Jun 2013 13:31:55 -0400 Subject: bcfg2-yum-helper: use null RPM db --- src/lib/Bcfg2/Server/Plugins/Packages/Yum.py | 10 ++++++++-- src/sbin/bcfg2-yum-helper | 21 +++++++++++++++++++-- 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)) -- cgit v1.2.3-1-g7c22