> 
> Here we probably need `if not ...instance....forthcoming: FAIL`

commit 58dabf47e898d269414b11f76172eaa12f03b554
Author: Klaus Aehlig <[email protected]>
Date:   Wed Dec 3 17:03:35 2014 +0100

    Interdiff [PATCH master 06/10] Support committing instances

diff --git a/lib/cmdlib/instance_create.py b/lib/cmdlib/instance_create.py
index b5e37ce..5b7d32e 100644
--- a/lib/cmdlib/instance_create.py
+++ b/lib/cmdlib/instance_create.py
@@ -349,8 +349,9 @@ class LUInstanceCreate(LogicalUnit):
       self.op.instance_name = name
       if not self.cfg.GetInstanceInfo(uuid).forthcoming:
         raise errors.OpPrereqError("Instance %s (with uuid %s) not forthcoming"
-                                   % (name, uuid), errors.ECODE_STATE)
-      logging.debug("Verified that instance %s with uuid %s if forthcoming",
+                                   " but --commit was passed." % (name, uuid),
+                                   errors.ECODE_STATE)
+      logging.debug("Verified that instance %s with uuid %s is forthcoming",
                     name, uuid)
     else:
       # this is just a preventive check, but someone might still add this
@@ -718,9 +719,18 @@ class LUInstanceCreate(LogicalUnit):
     owned_nodes = frozenset(self.owned_locks(locking.LEVEL_NODE))
 
     if self.op.commit:
-      # Check that the instance is still on the cluster and
+      # Check that the instance is still on the cluster, forthcoming, and
       # still resides on the nodes we acquired.
-      (uuid, _) = self.cfg.ExpandInstanceName(self.op.instance_name)
+      (uuid, name) = self.cfg.ExpandInstanceName(self.op.instance_name)
+      if uuid is None:
+        raise errors.OpPrereqError("Instance %s disappeared from the cluster"
+                                   " while waiting for locks"
+                                   % (self.op.instance_name,),
+                                   errors.ECODE_STATE)
+      if not self.cfg.GetInstanceInfo(uuid).forthcoming:
+        raise errors.OpPrereqError("Instance %s (with uuid %s) is no longer"
+                                   " forthcoming" % (name, uuid),
+                                   errors.ECODE_STATE)
       required_nodes = self.cfg.GetInstanceNodes(uuid)
       if not owned_nodes.issuperset(required_nodes):
         raise errors.OpPrereqError("Forthcoming instance %s nodes changed"


-- 
Klaus Aehlig
Google Germany GmbH, Dienerstr. 12, 80331 Muenchen
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschaeftsfuehrer: Graham Law, Christine Elizabeth Flores

Reply via email to