summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkd <mkd@.(none)>2011-08-16 09:16:36 -0500
committerSol Jerome <sol.jerome@gmail.com>2011-08-16 09:16:36 -0500
commit3fc2476a0188d28cd0a3544d18a43f04950c78ce (patch)
tree63a57056ee3e07bcebe085edf38a0a92394b8ff8
parent3a509d90c4518cced666c22f43257dfb678924fe (diff)
downloadbcfg2-3fc2476a0188d28cd0a3544d18a43f04950c78ce.tar.gz
bcfg2-3fc2476a0188d28cd0a3544d18a43f04950c78ce.tar.bz2
bcfg2-3fc2476a0188d28cd0a3544d18a43f04950c78ce.zip
Action: Fix decision mode installation (resolves #1029)
This fix is more complete than 8059a36 and also fixes issues relating to the use of wildcards in Decisions. Signed-off-by: Sol Jerome <sol.jerome@gmail.com>
-rw-r--r--src/lib/Client/Tools/Action.py26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/lib/Client/Tools/Action.py b/src/lib/Client/Tools/Action.py
index 4e85e3a72..c089cde1d 100644
--- a/src/lib/Client/Tools/Action.py
+++ b/src/lib/Client/Tools/Action.py
@@ -2,6 +2,7 @@
__revision__ = '$Revision$'
import Bcfg2.Client.Tools
+from Bcfg2.Client.Frame import matches_white_list, passes_black_list
"""
<Action timing='pre|post|both'
@@ -25,6 +26,19 @@ class Action(Bcfg2.Client.Tools.Tool):
__req__ = {'PostInstall': ['name'],
'Action': ['name', 'timing', 'when', 'command', 'status']}
+ def _action_allowed(self, action):
+ if self.setup['decision'] == 'whitelist' and \
+ not matches_white_list(action, self.setup['decision_list']):
+ self.logger.info("In whitelist mode: suppressing Action:" + \
+ action.get('name'))
+ return False
+ if self.setup['decision'] == 'blacklist' and \
+ not passes_black_list(action, self.setup['decision_list']):
+ self.logger.info("In blacklist mode: suppressing Action:" + \
+ action.get('name'))
+ return False
+ return True
+
def RunAction(self, entry):
"""This method handles command execution and status return."""
if not self.setup['dryrun']:
@@ -75,9 +89,13 @@ class Action(Bcfg2.Client.Tools.Tool):
def BundleUpdated(self, bundle, states):
"""Run postinstalls when bundles have been updated."""
for postinst in bundle.findall("PostInstall"):
+ if not self._action_allowed(postinst):
+ continue
self.cmd.run(postinst.get('name'))
for action in bundle.findall("Action"):
if action.get('timing') in ['post', 'both']:
+ if not self._action_allowed(action):
+ continue
states[action] = self.RunAction(action)
def BundleNotUpdated(self, bundle, states):
@@ -85,8 +103,6 @@ class Action(Bcfg2.Client.Tools.Tool):
for action in bundle.findall("Action"):
if action.get('timing') in ['post', 'both'] and \
action.get('when') != 'modified':
- if self.setup['decision'] == 'whitelist':
- if action in self.setup['decision_list']:
- states[action] = self.RunAction(action)
- else:
- states[action] = self.RunAction(action)
+ if not self._action_allowed(action):
+ continue
+ states[action] = self.RunAction(action)