Xen: remove two end-of-line semicolons
[ganeti-local] / lib / objects.py
index 3d78b57..522162a 100644 (file)
@@ -277,13 +277,11 @@ class Disk(ConfigObject):
 
   def CreateOnSecondary(self):
     """Test if this device needs to be created on a secondary node."""
 
   def CreateOnSecondary(self):
     """Test if this device needs to be created on a secondary node."""
-    return self.dev_type in (constants.LD_DRBD7, constants.LD_DRBD8,
-                             constants.LD_LV)
+    return self.dev_type in (constants.LD_DRBD8, constants.LD_LV)
 
   def AssembleOnSecondary(self):
     """Test if this device needs to be assembled on a secondary node."""
 
   def AssembleOnSecondary(self):
     """Test if this device needs to be assembled on a secondary node."""
-    return self.dev_type in (constants.LD_DRBD7, constants.LD_DRBD8,
-                             constants.LD_LV)
+    return self.dev_type in (constants.LD_DRBD8, constants.LD_LV)
 
   def OpenOnSecondary(self):
     """Test if this device needs to be opened on a secondary node."""
 
   def OpenOnSecondary(self):
     """Test if this device needs to be opened on a secondary node."""
@@ -326,8 +324,7 @@ class Disk(ConfigObject):
     devices needs to (or can) be assembled.
 
     """
     devices needs to (or can) be assembled.
 
     """
-    if self.dev_type in [constants.LD_LV, constants.LD_MD_R1,
-                         constants.LD_FILE]:
+    if self.dev_type in [constants.LD_LV, constants.LD_FILE]:
       result = [node]
     elif self.dev_type in constants.LDS_DRBD:
       result = [self.logical_id[0], self.logical_id[1]]
       result = [node]
     elif self.dev_type in constants.LDS_DRBD:
       result = [self.logical_id[0], self.logical_id[1]]
@@ -342,12 +339,9 @@ class Disk(ConfigObject):
 
     This method, given the node on which the parent disk lives, will
     return the list of all (node, disk) pairs which describe the disk
 
     This method, given the node on which the parent disk lives, will
     return the list of all (node, disk) pairs which describe the disk
-    tree in the most compact way. For example, a md/drbd/lvm stack
-    will be returned as (primary_node, md) and (secondary_node, drbd)
-    which represents all the top-level devices on the nodes. This
-    means that on the primary node we need to activate the the md (and
-    recursively all its children) and on the secondary node we need to
-    activate the drbd device (and its children, the two lvm volumes).
+    tree in the most compact way. For example, a drbd/lvm stack
+    will be returned as (primary_node, drbd) and (secondary_node, drbd)
+    which represents all the top-level devices on the nodes.
 
     """
     my_nodes = self.GetNodes(parent_node)
 
     """
     my_nodes = self.GetNodes(parent_node)
@@ -375,6 +369,68 @@ class Disk(ConfigObject):
             # be different)
     return result
 
             # be different)
     return result
 
+  def RecordGrow(self, amount):
+    """Update the size of this disk after growth.
+
+    This method recurses over the disks's children and updates their
+    size correspondigly. The method needs to be kept in sync with the
+    actual algorithms from bdev.
+
+    """
+    if self.dev_type == constants.LD_LV:
+      self.size += amount
+    elif self.dev_type == constants.LD_DRBD8:
+      if self.children:
+        self.children[0].RecordGrow(amount)
+      self.size += amount
+    else:
+      raise errors.ProgrammerError("Disk.RecordGrow called for unsupported"
+                                   " disk type %s" % self.dev_type)
+
+  def SetPhysicalID(self, target_node, nodes_ip):
+    """Convert the logical ID to the physical ID.
+
+    This is used only for drbd, which needs ip/port configuration.
+
+    The routine descends down and updates its children also, because
+    this helps when the only the top device is passed to the remote
+    node.
+
+    Arguments:
+      - target_node: the node we wish to configure for
+      - nodes_ip: a mapping of node name to ip
+
+    The target_node must exist in in nodes_ip, and must be one of the
+    nodes in the logical ID for each of the DRBD devices encountered
+    in the disk tree.
+
+    """
+    if self.children:
+      for child in self.children:
+        child.SetPhysicalID(target_node, nodes_ip)
+
+    if self.logical_id is None and self.physical_id is not None:
+      return
+    if self.dev_type in constants.LDS_DRBD:
+      pnode, snode, port = self.logical_id
+      if target_node not in (pnode, snode):
+        raise errors.ConfigurationError("DRBD device not knowing node %s" %
+                                        target_node)
+      pnode_ip = nodes_ip.get(pnode, None)
+      snode_ip = nodes_ip.get(snode, None)
+      if pnode_ip is None or snode_ip is None:
+        raise errors.ConfigurationError("Can't find primary or secondary node"
+                                        " for %s" % str(self))
+      if pnode == target_node:
+        self.physical_id = (pnode_ip, port,
+                            snode_ip, port)
+      else: # it must be secondary, we tested above
+        self.physical_id = (snode_ip, port,
+                            pnode_ip, port)
+    else:
+      self.physical_id = self.logical_id
+    return
+
   def ToDict(self):
     """Disk-specific conversion to standard python types.
 
   def ToDict(self):
     """Disk-specific conversion to standard python types.
 
@@ -411,10 +467,7 @@ class Disk(ConfigObject):
     if self.dev_type == constants.LD_LV:
       val =  "<LogicalVolume(/dev/%s/%s" % self.logical_id
     elif self.dev_type in constants.LDS_DRBD:
     if self.dev_type == constants.LD_LV:
       val =  "<LogicalVolume(/dev/%s/%s" % self.logical_id
     elif self.dev_type in constants.LDS_DRBD:
-      if self.dev_type == constants.LD_DRBD7:
-        val = "<DRBD7("
-      else:
-        val = "<DRBD8("
+      val = "<DRBD8("
       if self.physical_id is None:
         phy = "unconfigured"
       else:
       if self.physical_id is None:
         phy = "unconfigured"
       else:
@@ -429,8 +482,6 @@ class Disk(ConfigObject):
         val += "backend=%s, metadev=%s" % (self.children[0], self.children[1])
       else:
         val += "no local storage"
         val += "backend=%s, metadev=%s" % (self.children[0], self.children[1])
       else:
         val += "no local storage"
-    elif self.dev_type == constants.LD_MD_R1:
-      val = "<MD_R1(uuid=%s, children=%s" % (self.physical_id, self.children)
     else:
       val = ("<Disk(type=%s, logical_id=%s, physical_id=%s, children=%s" %
              (self.dev_type, self.logical_id, self.physical_id, self.children))
     else:
       val = ("<Disk(type=%s, logical_id=%s, physical_id=%s, children=%s" %
              (self.dev_type, self.logical_id, self.physical_id, self.children))
@@ -629,7 +680,6 @@ class Node(TaggableObject):
 class Cluster(TaggableObject):
   """Config object representing the cluster."""
   __slots__ = TaggableObject.__slots__ + [
 class Cluster(TaggableObject):
   """Config object representing the cluster."""
   __slots__ = TaggableObject.__slots__ + [
-    "config_version",
     "serial_no",
     "rsahostkeypub",
     "highest_used_port",
     "serial_no",
     "rsahostkeypub",
     "highest_used_port",