Modify the 'CreateDisks' method to accept the disk template of an
instance as an extra parameter.

This method will be also used by the conversion mechanism to create the
new disks of the instance. Since the disk template of the instance will
not have been modified at the time we create the new disks and
consequently calling this function, we pass the new disk template of the
instance as an extra argument. In case we do not specify the disk
template parameter, the instance's disk template will be used.

Signed-off-by: Dimitris Bliablias <[email protected]>
---
 lib/cmdlib/instance_storage.py |   17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/lib/cmdlib/instance_storage.py b/lib/cmdlib/instance_storage.py
index 8282932..2f63c33 100644
--- a/lib/cmdlib/instance_storage.py
+++ b/lib/cmdlib/instance_storage.py
@@ -202,7 +202,8 @@ def _UndoCreateDisks(lu, disks_created, instance):
                 (disk, lu.cfg.GetNodeName(node_uuid)), logging.warning)
 
 
-def CreateDisks(lu, instance, to_skip=None, target_node_uuid=None, disks=None):
+def CreateDisks(lu, instance, disk_template=None,
+                to_skip=None, target_node_uuid=None, disks=None):
   """Create all disks for an instance.
 
   This abstracts away some work from AddInstance.
@@ -211,10 +212,17 @@ def CreateDisks(lu, instance, to_skip=None, 
target_node_uuid=None, disks=None):
   function can not query the config file for the instance's disks; in that
   case they need to be passed as an argument.
 
+  This function is also used by the disk template conversion mechanism to
+  create the new disks of the instance. Since the instance will have the
+  old template at the time we create the new disks, the new template must
+  be passed as an extra argument.
+
   @type lu: L{LogicalUnit}
   @param lu: the logical unit on whose behalf we execute
   @type instance: L{objects.Instance}
   @param instance: the instance whose disks we should create
+  @type disk_template: string
+  @param disk_template: if provided, overrides the instance's disk_template
   @type to_skip: list
   @param to_skip: list of indices to skip
   @type target_node_uuid: string
@@ -248,9 +256,12 @@ def CreateDisks(lu, instance, to_skip=None, 
target_node_uuid=None, disks=None):
     pnode_uuid = target_node_uuid
     all_node_uuids = [pnode_uuid]
 
-  CheckDiskTemplateEnabled(lu.cfg.GetClusterInfo(), instance.disk_template)
+  if disk_template is None:
+    disk_template = instance.disk_template
+
+  CheckDiskTemplateEnabled(lu.cfg.GetClusterInfo(), disk_template)
 
-  if instance.disk_template in constants.DTS_FILEBASED:
+  if disk_template in constants.DTS_FILEBASED:
     file_storage_dir = os.path.dirname(disks[0].logical_id[1])
     result = lu.rpc.call_file_storage_dir_create(pnode_uuid, file_storage_dir)
 
-- 
1.7.10.4

Reply via email to