diff options
author | mkd <mkd@.(none)> | 2011-08-16 09:16:36 -0500 |
---|---|---|
committer | Sol Jerome <sol.jerome@gmail.com> | 2011-08-16 09:16:36 -0500 |
commit | 3fc2476a0188d28cd0a3544d18a43f04950c78ce (patch) | |
tree | 63a57056ee3e07bcebe085edf38a0a92394b8ff8 /src/lib/Client | |
parent | 3a509d90c4518cced666c22f43257dfb678924fe (diff) | |
download | bcfg2-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>
Diffstat (limited to 'src/lib/Client')
-rw-r--r-- | src/lib/Client/Tools/Action.py | 26 |
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) |