diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-07-24 11:32:56 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-08-20 17:30:39 -0400 |
commit | 4e75773f31bd5dd1cbad30296b2a32c38e552ead (patch) | |
tree | 5ebacb2ae0a3d09ea0628edf49015c495c81b3fb /src/lib/Server/Plugin.py | |
parent | 6cc1ede5cba4a27871ece2cbdab4ebc93c00fb4c (diff) | |
download | bcfg2-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.py | 26 |
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: |