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/Client/Tools/BundleDeps.py | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/lib/Bcfg2/Client/Tools/BundleDeps.py (limited to 'src/lib/Bcfg2/Client/Tools/BundleDeps.py') diff --git a/src/lib/Bcfg2/Client/Tools/BundleDeps.py b/src/lib/Bcfg2/Client/Tools/BundleDeps.py new file mode 100644 index 000000000..aaa090633 --- /dev/null +++ b/src/lib/Bcfg2/Client/Tools/BundleDeps.py @@ -0,0 +1,34 @@ +""" Bundle dependency support """ + +import Bcfg2.Client.Tools + + +class BundleDeps(Bcfg2.Client.Tools.Tool): + """Bundle dependency helper for Bcfg2. It handles Bundle tags inside the + bundles that references the required other bundles that should change the + modification status if the referenced bundles is modified.""" + + name = 'Bundle' + __handles__ = [('Bundle', None)] + __req__ = {'Bundle': ['name']} + + def InstallBundle(self, _): + """Simple no-op because we only need the BundleUpdated hook.""" + return dict() + + def VerifyBundle(self, entry, _): # pylint: disable=W0613 + """Simple no-op because we only need the BundleUpdated hook.""" + return True + + def BundleUpdated(self, entry): + """This handles the dependencies on this bundle. It searches all + Bundle tags in other bundles that references the current bundle name + and marks those tags as modified to trigger the modification hook on + the other bundles.""" + + bundle_name = entry.get('name') + for bundle in self.config.findall('./Bundle/Bundle'): + if bundle.get('name') == bundle_name and \ + bundle not in self.modified: + self.modified.append(bundle) + return dict() -- cgit v1.2.3-1-g7c22