summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Client/Tools/__init__.py
diff options
context:
space:
mode:
authorSol Jerome <sol.jerome@gmail.com>2014-10-29 15:30:26 -0500
committerSol Jerome <sol.jerome@gmail.com>2014-10-29 15:42:42 -0500
commit835c459b9849b888fdecd045f5d64b37742eb2b3 (patch)
tree56b08cb53f26b59fac27de9026e86b4a60991ffb /src/lib/Bcfg2/Client/Tools/__init__.py
parent111bb75cf8872cc2bca4b00983c5ea9beffed7ae (diff)
downloadbcfg2-835c459b9849b888fdecd045f5d64b37742eb2b3.tar.gz
bcfg2-835c459b9849b888fdecd045f5d64b37742eb2b3.tar.bz2
bcfg2-835c459b9849b888fdecd045f5d64b37742eb2b3.zip
Tools: Fix install of non-whitelisted services
Previously, a service restart would occur even when running in whitelist mode without the service being present in the whitelist. Signed-off-by: Sol Jerome <sol.jerome@gmail.com>
Diffstat (limited to 'src/lib/Bcfg2/Client/Tools/__init__.py')
-rw-r--r--src/lib/Bcfg2/Client/Tools/__init__.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/__init__.py b/src/lib/Bcfg2/Client/Tools/__init__.py
index 703b8ff57..0bec71e20 100644
--- a/src/lib/Bcfg2/Client/Tools/__init__.py
+++ b/src/lib/Bcfg2/Client/Tools/__init__.py
@@ -1,10 +1,12 @@
"""This contains all Bcfg2 Tool modules"""
import os
-import sys
import stat
+import sys
+
import Bcfg2.Client
import Bcfg2.Client.XML
+from Bcfg2.Client.Frame import matches_white_list, passes_black_list
from Bcfg2.Utils import Executor, ClassName
from Bcfg2.Compat import walk_packages # pylint: disable=W0622
@@ -141,6 +143,21 @@ class Tool(object):
raise ToolInstantiationError("%s: %s not executable" %
(self.name, filename))
+ def _install_allowed(self, entry):
+ """ Return true if the given entry is allowed to be installed by
+ the whitelist or blacklist """
+ if self.setup['decision'] == 'whitelist' and \
+ not matches_white_list(entry, self.setup['decision_list']):
+ self.logger.info("In whitelist mode: suppressing %s: %s" %
+ (entry.tag, entry.get('name')))
+ return False
+ if self.setup['decision'] == 'blacklist' and \
+ not passes_black_list(entry, self.setup['decision_list']):
+ self.logger.info("In blacklist mode: suppressing %s: %s" %
+ (entry.tag, entry.get('name')))
+ return False
+ return True
+
def BundleUpdated(self, bundle, states): # pylint: disable=W0613
""" Callback that is invoked when a bundle has been updated.
@@ -591,7 +608,8 @@ class SvcTool(Tool):
return
for entry in bundle:
- if not self.handlesEntry(entry):
+ if (not self.handlesEntry(entry)
+ or not self._install_allowed(entry)):
continue
estatus = entry.get('status')