From d74aa12c9d3d92c405aaacb5a3bfd265b017879f Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Mon, 26 Jul 2010 15:30:42 +0000 Subject: Packages: Allow xinclude and add XML error handling git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5990 ce84e21b-d406-0410-9b95-82705330c041 --- schemas/packages.xsd | 17 +++++++++-------- src/lib/Server/Plugins/Packages.py | 24 ++++++++++++++++++------ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/schemas/packages.xsd b/schemas/packages.xsd index 342920c2b..e15fb7f99 100644 --- a/schemas/packages.xsd +++ b/schemas/packages.xsd @@ -32,12 +32,13 @@ - - - - - - - - + + + + + + + + + diff --git a/src/lib/Server/Plugins/Packages.py b/src/lib/Server/Plugins/Packages.py index 40b01e64e..7978ddd62 100644 --- a/src/lib/Server/Plugins/Packages.py +++ b/src/lib/Server/Plugins/Packages.py @@ -543,16 +543,22 @@ class Packages(Bcfg2.Server.Plugin.Plugin, # create cache directory if needed os.makedirs(self.cachepath) try: - xdata = lxml.etree.parse(self.data + '/config.xml').getroot() + xdata = lxml.etree.parse(self.data + '/config.xml') + xdata.xinclude() + xdata = xdata.getroot() + except (lxml.etree.XIncludeError, \ + lxml.etree.XMLSyntaxError), xmlerr: + self.logger.error("Package: Error processing xml: %s" % xmlerr) + raise Bcfg2.Server.Plugin.PluginInitError except IOError: self.logger.error("Failed to read Packages configuration. Have" " you created your config.xml file?") raise Bcfg2.Server.Plugin.PluginInitError self.sentinels = set() self.sources = [] - for s in xdata.findall('APTSource'): + for s in xdata.findall('.//APTSource'): self.sources.append(APTSource(self.cachepath, **source_from_xml(s))) - for s in xdata.findall('YUMSource'): + for s in xdata.findall('.//YUMSource'): self.sources.append(YUMSource(self.cachepath, **source_from_xml(s))) for source in self.sources: source.setup_data() @@ -682,16 +688,22 @@ class Packages(Bcfg2.Server.Plugin.Plugin, def Refresh(self): '''Packages.Refresh() => True|False\nReload configuration specification and sources\n''' try: - xdata = lxml.etree.parse(self.data + '/config.xml').getroot() + xdata = lxml.etree.parse(self.data + '/config.xml') + xdata.xinclude() + xdata = xdata.getroot() + except (lxml.etree.XIncludeError, \ + lxml.etree.XMLSyntaxError), xmlerr: + self.logger.error("Package: Error processing xml: %s" % xmlerr) + raise Bcfg2.Server.Plugin.PluginInitError except IOError: self.logger.error("Failed to read Packages configuration. Have" + " you created your config.xml file?") raise Bcfg2.Server.Plugin.PluginInitError self.sentinels = set() self.sources = [] - for s in xdata.findall('APTSource'): + for s in xdata.findall('.//APTSource'): self.sources.append(APTSource(self.cachepath, **source_from_xml(s))) - for s in xdata.findall('YUMSource'): + for s in xdata.findall('.//YUMSource'): self.sources.append(YUMSource(self.cachepath, **source_from_xml(s))) for source in self.sources: source.setup_data() -- cgit v1.2.3-1-g7c22