diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-06-04 13:31:55 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-06-04 13:31:55 -0400 |
commit | 0c0e773334404a9406bfb413e7ef7e89d5ac4a86 (patch) | |
tree | bad3dd91dc8180c0e46ce66f5e22b2d90d673f61 /src | |
parent | d071bc08bfdaf154f1691999e5f413c7a3b634af (diff) | |
download | bcfg2-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
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Packages/Yum.py | 10 | ||||
-rwxr-xr-x | 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)) |