diff --git a/lib/cli.py b/lib/cli.py index d1b6925ecd0f8bef8d7a2f041e7cfbc31a01b752..780e002e433c86674e28cff5155ad90113de148d 100644 --- a/lib/cli.py +++ b/lib/cli.py @@ -346,11 +346,11 @@ def SubmitOpCode(op, proc=None, feedback_fn=None): interaction functions. """ - if proc is None: - proc = mcpu.Processor() if feedback_fn is None: feedback_fn = logger.ToStdout - return proc.ExecOpCode(op, feedback_fn) + if proc is None: + proc = mcpu.Processor(feedback=feedback_fn) + return proc.ExecOpCode(op) def FormatError(err): diff --git a/lib/cmdlib.py b/lib/cmdlib.py index e273ee23989553ea2b83954b709d727c702cd811..2c9a20693c2139d8ae31a2e1d67d19994ba81633 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -4027,7 +4027,7 @@ class LUExportInstance(LogicalUnit): # shutdown the instance, unless requested not to do so if self.op.shutdown: op = opcodes.OpShutdownInstance(instance_name=instance.name) - self.processor.ChainOpCode(op, feedback_fn) + self.processor.ChainOpCode(op) vgname = self.cfg.GetVGName() @@ -4053,7 +4053,7 @@ class LUExportInstance(LogicalUnit): if self.op.shutdown: op = opcodes.OpStartupInstance(instance_name=instance.name, force=False) - self.processor.ChainOpCode(op, feedback_fn) + self.processor.ChainOpCode(op) # TODO: check for size @@ -4079,7 +4079,7 @@ class LUExportInstance(LogicalUnit): # substitutes an empty list with the full cluster node list. if nodelist: op = opcodes.OpQueryExports(nodes=nodelist) - exportlist = self.processor.ChainOpCode(op, feedback_fn) + exportlist = self.processor.ChainOpCode(op) for node in exportlist: if instance.name in exportlist[node]: if not rpc.call_export_remove(node, instance.name): diff --git a/lib/mcpu.py b/lib/mcpu.py index 2f89842fbb4a54cda4d364c00e718f2733b47770..139a3bd6887eaffadf0c89c22ee661795fe4ad8d 100644 --- a/lib/mcpu.py +++ b/lib/mcpu.py @@ -84,22 +84,23 @@ class Processor(object): opcodes.OpDelTags: cmdlib.LUDelTags, } - - def __init__(self): + def __init__(self, feedback=None): """Constructor for Processor + Args: + - feedback_fn: the feedback function (taking one string) to be run when + interesting events are happening """ self.cfg = None self.sstore = None + self._feedback_fn = feedback - def ExecOpCode(self, op, feedback_fn): + def ExecOpCode(self, op): """Execute an opcode. Args: - cfg: the configuration in which we execute this opcode - opcode: the opcode to be executed - - feedback_fn: the feedback function (taking one string) to be run when - interesting events are happening """ if not isinstance(op, opcodes.OpCode): @@ -121,7 +122,7 @@ class Processor(object): lu.CheckPrereq() hm = HooksMaster(rpc.call_hooks_runner, lu) hm.RunPhase(constants.HOOKS_PHASE_PRE) - result = lu.Exec(feedback_fn) + result = lu.Exec(self._feedback_fn) hm.RunPhase(constants.HOOKS_PHASE_POST) if lu.cfg is not None: # we use lu.cfg and not self.cfg as for init cluster, self.cfg @@ -132,15 +133,13 @@ class Processor(object): return result - def ChainOpCode(self, op, feedback_fn): + def ChainOpCode(self, op): """Chain and execute an opcode. This is used by LUs when they need to execute a child LU. Args: - opcode: the opcode to be executed - - feedback_fn: the feedback function (taking one string) to be run when - interesting events are happening """ if not isinstance(op, opcodes.OpCode): @@ -160,7 +159,7 @@ class Processor(object): #if do_hooks: # hm = HooksMaster(rpc.call_hooks_runner, lu) # hm.RunPhase(constants.HOOKS_PHASE_PRE) - result = lu.Exec(feedback_fn) + result = lu.Exec(self._feedback_fn) #if do_hooks: # hm.RunPhase(constants.HOOKS_PHASE_POST) return result diff --git a/tools/burnin b/tools/burnin index 440c2fbc70f84b3c4129de5abbd6c6c91edc45b9..85916cc8ffda107171fca875c628ed186dbe7cf0 100755 --- a/tools/burnin +++ b/tools/burnin @@ -81,14 +81,14 @@ def BurninCluster(opts, args): """ logger.SetupLogging(debug=True, program="ganeti/burnin") - proc = mcpu.Processor() + proc = mcpu.Processor(feedback=Feedback) result = proc.ExecOpCode(opcodes.OpQueryNodes(output_fields=["name"], - names=[]), Feedback) + names=[])) nodelist = [data[0] for data in result] Feedback("- Testing global parameters") - result = proc.ExecOpCode(opcodes.OpDiagnoseOS(), Feedback) + result = proc.ExecOpCode(opcodes.OpDiagnoseOS()) if not result: Feedback("Can't get the OS list") @@ -135,7 +135,7 @@ def BurninCluster(opts, args): ip_check=True, wait_for_sync=True) Feedback("- Add instance %s on node %s" % (instance_name, pnode)) - result = proc.ExecOpCode(op, Feedback) + result = proc.ExecOpCode(op) to_remove.append(instance_name) idx = next_idx @@ -148,7 +148,7 @@ def BurninCluster(opts, args): remote_node=None) Feedback("- Replace disks for instance %s" % (instance_name)) - result = proc.ExecOpCode(op, Feedback) + result = proc.ExecOpCode(op) else: Feedback("- Can't run replace1, not enough nodes") @@ -160,7 +160,7 @@ def BurninCluster(opts, args): ignore_consistency=True) Feedback("- Failover instance %s" % (instance_name)) - result = proc.ExecOpCode(op, Feedback) + result = proc.ExecOpCode(op) else: Feedback("- Can't run failovers, not enough nodes") @@ -168,17 +168,17 @@ def BurninCluster(opts, args): for instance_name in args: op = opcodes.OpShutdownInstance(instance_name=instance_name) Feedback("- Shutdown instance %s" % instance_name) - result = proc.ExecOpCode(op, Feedback) + result = proc.ExecOpCode(op) op = opcodes.OpStartupInstance(instance_name=instance_name, force=False) Feedback("- Start instance %s" % instance_name) - result = proc.ExecOpCode(op, Feedback) + result = proc.ExecOpCode(op) finally: # remove for instance_name in to_remove: op = opcodes.OpRemoveInstance(instance_name=instance_name) Feedback("- Remove instance %s" % instance_name) - result = proc.ExecOpCode(op, Feedback) + result = proc.ExecOpCode(op) return 0