Allow disk attachment with external storage
authorLisa Velden <velden@google.com>
Wed, 16 Dec 2015 13:57:43 +0000 (14:57 +0100)
committerLisa Velden <velden@google.com>
Thu, 17 Dec 2015 13:45:33 +0000 (14:45 +0100)
As external storage is not associated with a node, we have to make an
exception for that before raising an error.

Signed-off-by: Lisa Velden <velden@google.com>
Reviewed-by: Hrvoje Ribicic <riba@google.com>

lib/cmdlib/instance_set_params.py

index 911203e..b402483 100644 (file)
@@ -399,7 +399,11 @@ class LUInstanceSetParams(LogicalUnit):
                                  errors.ECODE_INVAL)
 
     instance_nodes = self.cfg.GetInstanceNodes(self.instance.uuid)
-    if not set(instance_nodes).issubset(set(disk.nodes)):
+    # Make sure we do not attach disks to instances on wrong nodes. If the
+    # instance is diskless, that instance is associated only to the primary
+    # node, whereas the disk can be associated to two nodes in the case of DRBD,
+    # hence, we have a subset check here.
+    if disk.nodes and not set(instance_nodes).issubset(set(disk.nodes)):
       raise errors.OpPrereqError("Disk nodes are %s while the instance's nodes"
                                  " are %s" %
                                  (disk.nodes, instance_nodes),