summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugin.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-07-24 11:32:56 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-08-20 17:30:39 -0400
commit4e75773f31bd5dd1cbad30296b2a32c38e552ead (patch)
tree5ebacb2ae0a3d09ea0628edf49015c495c81b3fb /src/lib/Server/Plugin.py
parent6cc1ede5cba4a27871ece2cbdab4ebc93c00fb4c (diff)
downloadbcfg2-4e75773f31bd5dd1cbad30296b2a32c38e552ead.tar.gz
bcfg2-4e75773f31bd5dd1cbad30296b2a32c38e552ead.tar.bz2
bcfg2-4e75773f31bd5dd1cbad30296b2a32c38e552ead.zip
allow xinclude files to be missing if xi:fallback is provided
Conflicts: src/lib/Server/Lint/Comments.py src/lib/Server/Plugin.py
Diffstat (limited to 'src/lib/Server/Plugin.py')
-rw-r--r--src/lib/Server/Plugin.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/lib/Server/Plugin.py b/src/lib/Server/Plugin.py
index 28299d8c7..9889e5be6 100644
--- a/src/lib/Server/Plugin.py
+++ b/src/lib/Server/Plugin.py
@@ -609,6 +609,32 @@ class SingleXMLFileBacked(XMLFileBacked):
self.fam = fam
self.fam.AddMonitor(filename, self)
+ def _follow_xincludes(self, fname=None, xdata=None):
+ ''' follow xincludes, adding included files to self.extras '''
+ if xdata is None:
+ if fname is None:
+ xdata = self.xdata.getroottree()
+ else:
+ xdata = lxml.etree.parse(fname)
+ included = [el for el in xdata.findall('//%sinclude' %
+ Bcfg2.Server.XI_NAMESPACE)]
+ for el in included:
+ name = el.get("href")
+ if name not in self.extras:
+ if name.startswith("/"):
+ fpath = name
+ else:
+ fpath = os.path.join(os.path.dirname(self.name), name)
+ if os.path.exists(fpath):
+ self._follow_xincludes(fname=fpath)
+ self.add_monitor(fpath, name)
+ else:
+ msg = "%s: %s does not exist, skipping" % (self.name, name)
+ if el.findall('./%sfallback' % Bcfg2.Server.XI_NAMESPACE):
+ self.logger.debug(msg)
+ else:
+ self.logger.warning(msg)
+
def Index(self):
"""Build local data structures."""
try: