LGTM.

Thanks,
Jose

On Apr 16 15:19, Ilias Tsitsimpis wrote:
> Modify 'CreateDisks' function to accept the disks of an instance as an
> extra parameter. Since the instance may not have been saved to the
> config file yet, 'CreateDisks' can not query the config file for the
> instance's disks; so they need to be passed as an argument.
> 
> Signed-off-by: Ilias Tsitsimpis <[email protected]>
> ---
>  lib/cmdlib/instance.py         |  2 +-
>  lib/cmdlib/instance_storage.py | 20 +++++++++++++++-----
>  2 files changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py
> index 04f71e1..95b40e3 100644
> --- a/lib/cmdlib/instance.py
> +++ b/lib/cmdlib/instance.py
> @@ -1442,7 +1442,7 @@ class LUInstanceCreate(LogicalUnit):
>      else:
>        feedback_fn("* creating instance disks...")
>        try:
> -        CreateDisks(self, iobj)
> +        CreateDisks(self, iobj, instance_disks=iobj.disks)
>        except errors.OpExecError:
>          self.LogWarning("Device creation failed")
>          self.cfg.ReleaseDRBDMinors(self.op.instance_name)
> diff --git a/lib/cmdlib/instance_storage.py b/lib/cmdlib/instance_storage.py
> index 91372c7..3cf9447 100644
> --- a/lib/cmdlib/instance_storage.py
> +++ b/lib/cmdlib/instance_storage.py
> @@ -202,15 +202,23 @@ 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, instance_disks=None,
> +                to_skip=None, target_node_uuid=None, disks=None):
>    """Create all disks for an instance.
>  
>    This abstracts away some work from AddInstance.
>  
> +  Since the instance may not have been saved to the config file yet, this
> +  function can not query the config file for the instance's disks; in that
> +  case they need to be passed as an 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 instance_disks: list of L{objects.Disk}
> +  @param instance_disks: the disks that belong to the instance; if not
> +      specified, retrieve them from config file
>    @type to_skip: list
>    @param to_skip: list of indices to skip
>    @type target_node_uuid: string
> @@ -224,29 +232,31 @@ def CreateDisks(lu, instance, to_skip=None, 
> target_node_uuid=None, disks=None):
>  
>    """
>    info = GetInstanceInfoText(instance)
> +  if instance_disks is None:
> +    instance_disks = instance.disks
>    if target_node_uuid is None:
>      pnode_uuid = instance.primary_node
>      # We cannot use config's 'GetInstanceNodes' here as 'CreateDisks'
>      # is used by 'LUInstanceCreate' and the instance object is not
>      # stored in the config yet.
>      all_node_uuids = []
> -    for disk in instance.disks:
> +    for disk in instance_disks:
>        all_node_uuids.extend(disk.all_nodes)
>      all_node_uuids = set(all_node_uuids)
>      # ensure that primary node is always the first
> -    all_node_uuids.discard(instance.primary_node)
> +    all_node_uuids.discard(pnode_uuid)
>      all_node_uuids = [pnode_uuid] + list(all_node_uuids)
>    else:
>      pnode_uuid = target_node_uuid
>      all_node_uuids = [pnode_uuid]
>  
>    if disks is None:
> -    disks = instance.disks
> +    disks = instance_disks
>  
>    CheckDiskTemplateEnabled(lu.cfg.GetClusterInfo(), instance.disk_template)
>  
>    if instance.disk_template in constants.DTS_FILEBASED:
> -    file_storage_dir = os.path.dirname(instance.disks[0].logical_id[1])
> +    file_storage_dir = os.path.dirname(instance_disks[0].logical_id[1])
>      result = lu.rpc.call_file_storage_dir_create(pnode_uuid, 
> file_storage_dir)
>  
>      result.Raise("Failed to create directory '%s' on"
> -- 
> 1.9.1
> 

-- 
Jose Antonio Lopes
Ganeti Engineering
Google Germany GmbH
Dienerstr. 12, 80331, München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores
Steuernummer: 48/725/00206
Umsatzsteueridentifikationsnummer: DE813741370

Reply via email to