hv_kvm: Original error message, keyword parameter
[ganeti-local] / lib / masterd / instance.py
index 5ede274..d99f4d8 100644 (file)
@@ -33,6 +33,7 @@ from ganeti import compat
 from ganeti import utils
 from ganeti import objects
 from ganeti import netutils
+from ganeti import pathutils
 
 
 class _ImportExportError(Exception):
@@ -530,7 +531,7 @@ class DiskImport(_DiskImportExportBase):
     """
     return self._lu.rpc.call_import_start(self.node_name, self._opts,
                                           self._instance, self._component,
-                                          self._dest, self._dest_args)
+                                          (self._dest, self._dest_args))
 
   def CheckListening(self):
     """Checks whether the daemon is listening.
@@ -616,7 +617,7 @@ class DiskExport(_DiskImportExportBase):
     return self._lu.rpc.call_export_start(self.node_name, self._opts,
                                           self._dest_host, self._dest_port,
                                           self._instance, self._component,
-                                          self._source, self._source_args)
+                                          (self._source, self._source_args))
 
   def CheckListening(self):
     """Checks whether the daemon is listening.
@@ -1164,7 +1165,7 @@ class ExportInstanceHelper:
 
       # result.payload will be a snapshot of an lvm leaf of the one we
       # passed
-      result = self._lu.rpc.call_blockdev_snapshot(src_node, disk)
+      result = self._lu.rpc.call_blockdev_snapshot(src_node, (disk, instance))
       new_dev = False
       msg = result.fail_msg
       if msg:
@@ -1176,9 +1177,11 @@ class ExportInstanceHelper:
                             " result '%s'", idx, src_node, result.payload)
       else:
         disk_id = tuple(result.payload)
+        disk_params = constants.DISK_LD_DEFAULTS[constants.LD_LV].copy()
         new_dev = objects.Disk(dev_type=constants.LD_LV, size=disk.size,
                                logical_id=disk_id, physical_id=disk_id,
-                               iv_name=disk.iv_name)
+                               iv_name=disk.iv_name,
+                               params=disk_params)
 
       self._snap_disks.append(new_dev)
 
@@ -1225,7 +1228,7 @@ class ExportInstanceHelper:
         transfers.append(None)
         continue
 
-      path = utils.PathJoin(constants.EXPORT_DIR, "%s.new" % instance.name,
+      path = utils.PathJoin(pathutils.EXPORT_DIR, "%s.new" % instance.name,
                             dev.physical_id[1])
 
       finished_fn = compat.partial(self._TransferFinished, idx)
@@ -1603,3 +1606,35 @@ def ComputeRemoteImportDiskInfo(cds, salt, disk_index, host, port, magic):
   msg = _GetRieDiskInfoMessage(disk_index, host, port, magic)
   hmac_digest = utils.Sha1Hmac(cds, msg, salt=salt)
   return (host, port, magic, hmac_digest, salt)
+
+
+def CalculateGroupIPolicy(cluster, group):
+  """Calculate instance policy for group.
+
+  """
+  return cluster.SimpleFillIPolicy(group.ipolicy)
+
+
+def ComputeDiskSize(disk_template, disks):
+  """Compute disk size requirements according to disk template
+
+  """
+  # Required free disk space as a function of disk and swap space
+  req_size_dict = {
+    constants.DT_DISKLESS: None,
+    constants.DT_PLAIN: sum(d[constants.IDISK_SIZE] for d in disks),
+    # 128 MB are added for drbd metadata for each disk
+    constants.DT_DRBD8:
+      sum(d[constants.IDISK_SIZE] + constants.DRBD_META_SIZE for d in disks),
+    constants.DT_FILE: sum(d[constants.IDISK_SIZE] for d in disks),
+    constants.DT_SHARED_FILE: sum(d[constants.IDISK_SIZE] for d in disks),
+    constants.DT_BLOCK: 0,
+    constants.DT_RBD: sum(d[constants.IDISK_SIZE] for d in disks),
+    constants.DT_EXT: sum(d[constants.IDISK_SIZE] for d in disks),
+  }
+
+  if disk_template not in req_size_dict:
+    raise errors.ProgrammerError("Disk template '%s' size requirement"
+                                 " is unknown" % disk_template)
+
+  return req_size_dict[disk_template]