From 9a395a76da57bb4c62616c977415e2998f6f91f7 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Thu, 11 Oct 2007 15:00:16 +0000 Subject: [PATCH] Move hook execution decision to HooksMaster Currently, the HooksMaster creation and execution decision is in the Processor class. This is not optimal, so we change to always create a hooks master and instead make the decision inside that class, by creating empty node lists for both pre and post if the lu doesn't support hooks. This way, hooks decisions are moved to HooksMaster (where they belong). Reviewed-by: imsnah --- lib/mcpu.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/mcpu.py b/lib/mcpu.py index 1875741d0..874658a8e 100644 --- a/lib/mcpu.py +++ b/lib/mcpu.py @@ -114,13 +114,10 @@ class Processor(object): self.sstore = ssconf.SimpleStore() lu = lu_class(self, op, self.cfg, self.sstore) lu.CheckPrereq() - do_hooks = lu_class.HPATH is not None - if do_hooks: - hm = HooksMaster(rpc.call_hooks_runner, lu) - hm.RunPhase(constants.HOOKS_PHASE_PRE) + hm = HooksMaster(rpc.call_hooks_runner, lu) + hm.RunPhase(constants.HOOKS_PHASE_PRE) result = lu.Exec(feedback_fn) - if do_hooks: - hm.RunPhase(constants.HOOKS_PHASE_POST) + hm.RunPhase(constants.HOOKS_PHASE_POST) return result def ChainOpCode(self, op, feedback_fn): @@ -193,10 +190,13 @@ class HooksMaster(object): "GANETI_OBJECT_TYPE": self.lu.HTYPE, } - lu_env, lu_nodes_pre, lu_nodes_post = self.lu.BuildHooksEnv() - if lu_env: - for key in lu_env: - env["GANETI_" + key] = lu_env[key] + if self.lu.HPATH is not None: + lu_env, lu_nodes_pre, lu_nodes_post = self.lu.BuildHooksEnv() + if lu_env: + for key in lu_env: + env["GANETI_" + key] = lu_env[key] + else: + lu_nodes_pre = lu_nodes_post = [] if self.lu.sstore is not None: env["GANETI_CLUSTER"] = self.lu.sstore.GetClusterName() @@ -215,9 +215,9 @@ class HooksMaster(object): """ if not self.node_list[phase]: - # empty node list, we should not attempt to run this - # as most probably we're in the cluster init phase and the rpc client - # part can't even attempt to run + # empty node list, we should not attempt to run this as either + # we're in the cluster init phase and the rpc client part can't + # even attempt to run, or this LU doesn't do hooks at all return self.env["GANETI_HOOKS_PHASE"] = str(phase) results = self.callfn(self.node_list[phase], self.hpath, phase, self.env) -- GitLab