From be564316c7c4deaad090bfc0bc79c460965cb1d6 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Tue, 25 Nov 2014 00:51:23 +0100 Subject: Bundler: add modification support to Bundle dependencies Bundle dependencies are now realized with RequiredBundle and support inheritance of the modification flag. This requires new client support and will only work with clients >= 1.4.0pre2. --- src/lib/Bcfg2/Server/Plugins/Bundler.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/lib/Bcfg2/Server') diff --git a/src/lib/Bcfg2/Server/Plugins/Bundler.py b/src/lib/Bcfg2/Server/Plugins/Bundler.py index 41ee57b6d..4945bf85b 100644 --- a/src/lib/Bcfg2/Server/Plugins/Bundler.py +++ b/src/lib/Bcfg2/Server/Plugins/Bundler.py @@ -8,6 +8,7 @@ import fnmatch import lxml.etree from Bcfg2.Server.Plugin import StructFile, Plugin, Structure, \ StructureValidator, XMLDirectoryBacked, Generator +from Bcfg2.version import Bcfg2VersionInfo from genshi.template import TemplateError @@ -116,17 +117,35 @@ class Bundler(Plugin, for el in child.getchildren(): data.append(el) data.remove(child) - elif child.get("name"): + else: + # no children -- wat + self.logger.warning("Bundler: Useless empty Bundle tag " + "in %s" % self.name) + data.remove(child) + + for child in data.findall('RequiredBundle'): + if child.get("name"): # dependent bundle -- add it to the list of # bundles for this client if child.get("name") not in bundles_added: bundles.append(child.get("name")) bundles_added.add(child.get("name")) + if child.get('modification', 'ignore') == 'inherit': + if metadata.version_info >= \ + Bcfg2VersionInfo('1.4.0pre2'): + lxml.etree.SubElement(data, 'Bundle', + name=child.get('name')) + else: + self.logger.warning( + 'Bundler: modification="inherit" is only ' + 'supported for clients starting 1.4.0pre2') data.remove(child) else: - # neither name or children -- wat - self.logger.warning("Bundler: Useless empty Bundle tag " - "in %s" % self.name) + # no name -- wat + self.logger.warning('Bundler: Missing required name in ' + 'RequiredBundle tag in %s' % + self.name) data.remove(child) + bundleset.append(data) return bundleset -- cgit v1.2.3-1-g7c22 From d4ae5e04739d9a8e0732dd35ee28c14b0ff96957 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Tue, 25 Nov 2014 17:56:16 +0100 Subject: Bundler: modification is now the boolean inherit_modification --- src/lib/Bcfg2/Server/Plugins/Bundler.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/lib/Bcfg2/Server') diff --git a/src/lib/Bcfg2/Server/Plugins/Bundler.py b/src/lib/Bcfg2/Server/Plugins/Bundler.py index 4945bf85b..6c35ada59 100644 --- a/src/lib/Bcfg2/Server/Plugins/Bundler.py +++ b/src/lib/Bcfg2/Server/Plugins/Bundler.py @@ -130,15 +130,16 @@ class Bundler(Plugin, if child.get("name") not in bundles_added: bundles.append(child.get("name")) bundles_added.add(child.get("name")) - if child.get('modification', 'ignore') == 'inherit': + if child.get('inherit_modification', 'false') == 'true': if metadata.version_info >= \ Bcfg2VersionInfo('1.4.0pre2'): lxml.etree.SubElement(data, 'Bundle', name=child.get('name')) else: self.logger.warning( - 'Bundler: modification="inherit" is only ' - 'supported for clients starting 1.4.0pre2') + 'Bundler: inherit_modification="true" is ' + 'only supported for clients starting ' + '1.4.0pre2') data.remove(child) else: # no name -- wat -- cgit v1.2.3-1-g7c22