From dd58837acd6240d20d00af9ff89f768cbece0164 Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Fri, 28 Jan 2011 12:20:50 -0600 Subject: Metadata: Handle writes to XInclude files in bootstrap mode --- src/lib/Server/Plugins/Metadata.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Plugins/Metadata.py b/src/lib/Server/Plugins/Metadata.py index 3aeda0952..1ced3f8f3 100644 --- a/src/lib/Server/Plugins/Metadata.py +++ b/src/lib/Server/Plugins/Metadata.py @@ -767,12 +767,28 @@ class Metadata(Bcfg2.Server.Plugin.Plugin, try: self.clientdata_original = lxml.etree.parse(self.data + "/clients.xml") except Exception, e: - self.logger.error("Metadata: Failed to relad clients.xml. %s" % e) + self.logger.error("Metadata: Failed to read clients.xml. %s" % e) raise MetadataConsistencyError cli = self.clientdata_original.xpath('.//Client[@name="%s"]' \ % (client)) - cli[0].set('auth', 'cert') - self.write_back_clients() + if len(cli) > 0: + cli[0].set('auth', 'cert') + self.write_back_clients() + else: + """Try to find the client in included files""" + for included in self.extra['clients.xml']: + try: + xdata = lxml.etree.parse("%s/%s" % (self.data, included)) + cli = xdata.xpath('.//Client[@name="%s"]' % (client)) + if len(cli) > 0: + cli[0].set('auth', 'cert') + self.write_back_xml(included, xdata) + break + except lxml.etree.XMLSyntaxError: + self.logger.error('Failed to parse %s' % (included)) + else: + self.logger.error("Metadata: Unable to update profile for client %s. Use of Xinclude?" % client) + raise MetadataConsistencyError def viz(self, hosts, bundles, key, colors): """Admin mode viz support.""" -- cgit v1.2.3-1-g7c22