summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Packages/PackagesSources.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2011-10-19 10:14:43 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2011-10-19 10:14:43 -0400
commitc4154ca4d2b7b2a7bcc266d3f473ff1d247cac9f (patch)
tree6138db8063f0292037426e978311940a3d83b677 /src/lib/Server/Plugins/Packages/PackagesSources.py
parent826f385767ccf9f608fcfbe35e381a9dbc59db4b (diff)
downloadbcfg2-c4154ca4d2b7b2a7bcc266d3f473ff1d247cac9f.tar.gz
bcfg2-c4154ca4d2b7b2a7bcc266d3f473ff1d247cac9f.tar.bz2
bcfg2-c4154ca4d2b7b2a7bcc266d3f473ff1d247cac9f.zip
Various Packages plugin fixes:
* Added bcfg2-yum-helper to offload Yum API calls to a short-lived process. As absurd as this is, it appears to be the standard way to get around Yum's atrocious memory handling (cf. yum-updatesd). * Added SourceInitError for non-fatal errors instantiating new sources. * Fixed bug that caused all cached data to be removed on server startup (reported by mikemccllstr on IRC). * Fixed a number of overly aggressive caching issues. * Fixed the way sources are loaded at server startup. * Fixed handling of Yum package groups.
Diffstat (limited to 'src/lib/Server/Plugins/Packages/PackagesSources.py')
-rw-r--r--src/lib/Server/Plugins/Packages/PackagesSources.py31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/lib/Server/Plugins/Packages/PackagesSources.py b/src/lib/Server/Plugins/Packages/PackagesSources.py
index 6d0b1d732..4fbccab30 100644
--- a/src/lib/Server/Plugins/Packages/PackagesSources.py
+++ b/src/lib/Server/Plugins/Packages/PackagesSources.py
@@ -3,10 +3,10 @@ import sys
import lxml.etree
import logging
import Bcfg2.Server.Plugin
+from Bcfg2.Server.Plugins.Packages.Source import SourceInitError
logger = logging.getLogger("Packages")
-
class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
Bcfg2.Server.Plugin.StructFile):
__identifier__ = None
@@ -30,8 +30,19 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
# create cache directory if needed
os.makedirs(self.cachepath)
self.pkg_obj = packages
+ self.parsed = set()
self.loaded = False
+ def HandleEvent(self, event=None):
+ Bcfg2.Server.Plugin.SingleXMLFileBacked.HandleEvent(self, event=event)
+ if event.filename != self.name:
+ self.parsed.add(os.path.basename(event.filename))
+
+ if sorted(list(self.parsed)) == sorted(self.extras):
+ logger.info("Reloading Packages plugin")
+ self.pkg_obj.Reload()
+ self.loaded = True
+
def Index(self):
Bcfg2.Server.Plugin.SingleXMLFileBacked.Index(self)
self.entries = []
@@ -40,9 +51,6 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
if source is not None:
self.entries.append(source)
- self.pkg_obj.Reload()
- self.loaded = True
-
def source_from_xml(self, xsource):
""" create a *Source object from its XML representation in
sources.xml """
@@ -60,7 +68,20 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
logger.error("Packages: Unknown source type %s" % stype)
return None
- return cls(self.cachepath, xsource, self.config)
+ try:
+ source = cls(self.cachepath, xsource, self.config)
+ except SourceInitError:
+ err = sys.exc_info()[1]
+ logger.error("Packages: %s" % err)
+ source = None
+
+ return source
def __getitem__(self, key):
return self.entries[key]
+
+ def __repr__(self):
+ return "PackagesSources: %s" % repr(self.entries)
+
+ def __str__(self):
+ return "PackagesSources: %s" % str(self.entries)