From 1b9690aa84fc872a3c4f46846ef357d8e0878f57 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Thu, 19 Jul 2012 13:28:46 +0100 Subject: [PATCH] Handle offline nodes for "instance down" checks When offlining an instance because its primary node is down, we must be able to cope with the situation. Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- lib/cmdlib.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 306f63183..1111b1700 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1108,13 +1108,16 @@ def _CheckInstanceState(lu, instance, req_states, msg=None): if constants.ADMINST_UP not in req_states: pnode = instance.primary_node - ins_l = lu.rpc.call_instance_list([pnode], [instance.hypervisor])[pnode] - ins_l.Raise("Can't contact node %s for instance information" % pnode, - prereq=True, ecode=errors.ECODE_ENVIRON) - - if instance.name in ins_l.payload: - raise errors.OpPrereqError("Instance %s is running, %s" % - (instance.name, msg), errors.ECODE_STATE) + if not lu.cfg.GetNodeInfo(pnode).offline: + ins_l = lu.rpc.call_instance_list([pnode], [instance.hypervisor])[pnode] + ins_l.Raise("Can't contact node %s for instance information" % pnode, + prereq=True, ecode=errors.ECODE_ENVIRON) + if instance.name in ins_l.payload: + raise errors.OpPrereqError("Instance %s is running, %s" % + (instance.name, msg), errors.ECODE_STATE) + else: + lu.LogWarning("Primary node offline, ignoring check that instance" + " is down") def _ComputeMinMaxSpec(name, qualifier, ipolicy, value): -- GitLab