Fix title by doing:
s/mulitiple/multiple/

On Tue, Jun 23, 2015 at 5:16 PM, 'Lisa Velden' via ganeti-devel <
[email protected]> wrote:

> Check if a nic name is already in the list of all nics before adding it.
> Expand the instance name before that check to ensure that we are always
> checking for the correct name.
>
> Signed-off-by: Lisa Velden <[email protected]>
> ---
>  lib/cmdlib/instance.py | 32 ++++++++++++++++++--------------
>  1 file changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py
> index d5b2c6b..e545445 100644
> --- a/lib/cmdlib/instance.py
> +++ b/lib/cmdlib/instance.py
> @@ -439,15 +439,28 @@ class LUInstanceCreate(LogicalUnit):
>        raise errors.OpPrereqError("Cannot do IP address check without a
> name"
>                                   " check", errors.ECODE_INVAL)
>
> +    # instance name verification
> +    if self.op.name_check:
> +      self.hostname = _CheckHostnameSane(self, self.op.instance_name)
> +      self.op.instance_name = self.hostname.name
> +      # used in CheckPrereq for ip ping check
> +      self.check_ip = self.hostname.ip
> +    else:
> +      self.check_ip = None
> +
>      # add NIC for instance communication
>      if self.op.instance_communication:
>        nic_name = _ComputeInstanceCommunicationNIC(self.op.instance_name)
>
> -      self.op.nics.append({constants.INIC_NAME: nic_name,
> -                           constants.INIC_MAC: constants.VALUE_GENERATE,
> -                           constants.INIC_IP: constants.NIC_IP_POOL,
> -                           constants.INIC_NETWORK:
> -                             self.cfg.GetInstanceCommunicationNetwork()})
> +      for nic in self.op.nics:
> +        if nic and nic[constants.INIC_NAME] == nic_name:
>

This will not work for most nics - they might have some specified entries
(bridge), but not a name.
I suggest:

nic.get(constants.INIC_NAME, None) == nic_name


> +          break
> +      else:
> +        self.op.nics.append({constants.INIC_NAME: nic_name,
> +                             constants.INIC_MAC: constants.VALUE_GENERATE,
> +                             constants.INIC_IP: constants.NIC_IP_POOL,
> +                             constants.INIC_NETWORK:
> +
>  self.cfg.GetInstanceCommunicationNetwork()})
>


>      # timeouts for unsafe OS installs
>      if self.op.helper_startup_timeout is None:
> @@ -467,15 +480,6 @@ class LUInstanceCreate(LogicalUnit):
>      self._CheckDiskArguments()
>      assert self.op.disk_template is not None
>
> -    # instance name verification
> -    if self.op.name_check:
> -      self.hostname = _CheckHostnameSane(self, self.op.instance_name)
> -      self.op.instance_name = self.hostname.name
> -      # used in CheckPrereq for ip ping check
> -      self.check_ip = self.hostname.ip
> -    else:
> -      self.check_ip = None
> -
>      # file storage checks
>      if (self.op.file_driver and
>          not self.op.file_driver in constants.FILE_DRIVER):
> --
> 2.4.3.573.g4eafbef
>
>
Hrvoje Ribicic
Ganeti Engineering
Google Germany GmbH
Dienerstr. 12, 80331, München

Geschäftsführer: Graham Law, Christine Elizabeth Flores
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg

Reply via email to