summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
diff options
context:
space:
mode:
authorSol Jerome <sol.jerome@gmail.com>2013-07-27 17:19:47 -0500
committerSol Jerome <sol.jerome@gmail.com>2013-07-27 17:19:47 -0500
commitaa230853296cd3b69f0296d646daf37b4b2cd764 (patch)
tree8ad1a2e8ee5f05ef775c2536984440a0cc74ec78 /src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
parent08f5ad7e1b470b79ce81130b2f299426b132db80 (diff)
parent3435963a7c715bd3e6e912c6224fc8b893b1abe4 (diff)
downloadbcfg2-aa230853296cd3b69f0296d646daf37b4b2cd764.tar.gz
bcfg2-aa230853296cd3b69f0296d646daf37b4b2cd764.tar.bz2
bcfg2-aa230853296cd3b69f0296d646daf37b4b2cd764.zip
Merge branch 'maint'
Signed-off-by: Sol Jerome <sol.jerome@gmail.com> Conflicts: doc/appendix/guides/ubuntu.txt src/lib/Bcfg2/Options.py src/lib/Bcfg2/Server/Plugins/Packages/Yum.py src/lib/Bcfg2/settings.py
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Packages/Yum.py')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Yum.py35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
index 6692a1735..aee16eee1 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
@@ -53,11 +53,14 @@ The Yum Backend
import os
import re
import sys
+import time
import copy
import errno
import socket
import logging
import lxml.etree
+from lockfile import FileLock
+
import Bcfg2.Server.FileMonitor
import Bcfg2.Server.Plugin
from Bcfg2.Utils import Executor
@@ -275,6 +278,10 @@ class YumCollection(Collection):
debug=debug)
self.keypath = os.path.join(self.cachepath, "keys")
+ #: A :class:`Bcfg2.Utils.Executor` object to use to run
+ #: external commands
+ self.cmd = Executor()
+
self._helper = None
if self.use_yum:
#: Define a unique cache file for this collection to use
@@ -843,6 +850,17 @@ class YumCollection(Collection):
if not self.use_yum:
return Collection.complete(self, packagelist)
+ lock = FileLock(os.path.join(self.cachefile, "lock"))
+ slept = 0
+ while lock.is_locked():
+ if slept > 30:
+ self.logger.warning("Packages: Timeout waiting for yum cache "
+ "to release its lock")
+ return set(), set()
+ self.logger.debug("Packages: Yum cache is locked, waiting...")
+ time.sleep(3)
+ slept += 3
+
if packagelist:
try:
result = self.call_helper(
@@ -891,22 +909,19 @@ class YumCollection(Collection):
cmd.append("-v")
cmd.append(command)
self.debug_log("Packages: running %s" % " ".join(cmd))
+
if inputdata:
- result = self.cmd.run(cmd, inputdata=json.dumps(inputdata))
+ result = self.cmd.run(cmd, timeout=self.setup['client_timeout'],
+ inputdata=json.dumps(inputdata))
else:
- result = self.cmd.run(cmd)
+ result = self.cmd.run(cmd, timeout=self.setup['client_timeout'])
if not result.success:
- errlines = result.error.splitlines()
self.logger.error("Packages: error running bcfg2-yum-helper: %s" %
- errlines[0])
- for line in errlines[1:]:
- self.logger.error("Packages: %s" % line)
+ result.error)
elif result.stderr:
- errlines = result.stderr.splitlines()
self.debug_log("Packages: debug info from bcfg2-yum-helper: %s" %
- errlines[0])
- for line in errlines[1:]:
- self.debug_log("Packages: %s" % line)
+ result.stderr)
+
try:
return json.loads(result.stdout)
except ValueError: