On Tue, Feb 4, 2014 at 2:16 PM, Jose A. Lopes <[email protected]> wrote:
> On Tue, Feb 04, 2014 at 01:20:10PM +0100, Michele Tartara wrote:
>> On Fri, Jan 31, 2014 at 11:46 AM, Jose A. Lopes <[email protected]> wrote:
>> > * Add command-line interface flag to enable instance communication
>> > * Add instance communication parameter to the opcode that creates an
>> > instance
>> >
>> > Signed-off-by: Jose A. Lopes <[email protected]>
>> > ---
>> > lib/cli.py | 68
>> > +++++++++++++++++++++++++-----------------
>> > lib/client/gnt_instance.py | 3 +-
>> > src/Ganeti/Constants.hs | 6 +++-
>> > src/Ganeti/OpCodes.hs | 3 +-
>> > src/Ganeti/OpParams.hs | 8 ++++-
>> > test/hs/Test/Ganeti/OpCodes.hs | 3 +-
>> > 6 files changed, 58 insertions(+), 33 deletions(-)
>> >
>> > diff --git a/lib/cli.py b/lib/cli.py
>> > index ad6c5bc..21407ac 100644
>> > --- a/lib/cli.py
>> > +++ b/lib/cli.py
>> > @@ -1,7 +1,7 @@
>> > #
>> > #
>> >
>> > -# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Google Inc.
>> > +# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
>> > Google Inc.
>> > #
>> > # This program is free software; you can redistribute it and/or modify
>> > # it under the terms of the GNU General Public License as published by
>> > @@ -115,6 +115,7 @@ __all__ = [
>> > "IGNORE_SIZE_OPT",
>> > "INCLUDEDEFAULTS_OPT",
>> > "INTERVAL_OPT",
>> > + "INSTANCE_COMMUNICATION_OPT",
>> > "MAC_PREFIX_OPT",
>> > "MAINTAIN_NODE_HEALTH_OPT",
>> > "MASTER_NETDEV_OPT",
>> > @@ -1686,6 +1687,13 @@ HOTPLUG_IF_POSSIBLE_OPT =
>> > cli_option("--hotplug-if-possible",
>> > help="Hotplug devices in case"
>> > " hotplug is supported")
>> >
>> > +INSTANCE_COMMUNICATION_OPT = \
>> > + cli_option("-c", "--communication",
>> > + default=False,
>> > + dest="instance_communication",
>> > + help=constants.INSTANCE_COMMUNICATION_DOC,
>> > + type="bool")
>> > +
>> > #: Options provided by all commands
>> > COMMON_OPTS = [DEBUG_OPT, REASON_OPT]
>> >
>> > @@ -2727,6 +2735,7 @@ def GenericInstanceCreate(mode, opts, args):
>> > no_install = opts.no_install
>> > identify_defaults = False
>> > compress = constants.IEC_NONE
>> > + instance_communication = opts.instance_communication
>> > elif mode == constants.INSTANCE_IMPORT:
>> > start = False
>> > os_type = None
>> > @@ -2736,36 +2745,39 @@ def GenericInstanceCreate(mode, opts, args):
>> > no_install = None
>> > identify_defaults = opts.identify_defaults
>> > compress = opts.compress
>> > + instance_communication = False
>> > else:
>> > raise errors.ProgrammerError("Invalid creation mode %s" % mode)
>> >
>> > - op = opcodes.OpInstanceCreate(instance_name=instance,
>> > - disks=disks,
>> > - disk_template=opts.disk_template,
>> > - nics=nics,
>> > - conflicts_check=opts.conflicts_check,
>> > - pnode=pnode, snode=snode,
>> > - ip_check=opts.ip_check,
>> > - name_check=opts.name_check,
>> > - wait_for_sync=opts.wait_for_sync,
>> > - file_storage_dir=opts.file_storage_dir,
>> > - file_driver=opts.file_driver,
>> > - iallocator=opts.iallocator,
>> > - hypervisor=hypervisor,
>> > - hvparams=hvparams,
>> > - beparams=opts.beparams,
>> > - osparams=opts.osparams,
>> > - mode=mode,
>> > - start=start,
>> > - os_type=os_type,
>> > - force_variant=force_variant,
>> > - src_node=src_node,
>> > - src_path=src_path,
>> > - compress=compress,
>> > - tags=tags,
>> > - no_install=no_install,
>> > - identify_defaults=identify_defaults,
>> > - ignore_ipolicy=opts.ignore_ipolicy)
>> > + op = opcodes.OpInstanceCreate(
>> > + instance_name=instance,
>> > + disks=disks,
>> > + disk_template=opts.disk_template,
>> > + nics=nics,
>> > + conflicts_check=opts.conflicts_check,
>> > + pnode=pnode, snode=snode,
>> > + ip_check=opts.ip_check,
>> > + name_check=opts.name_check,
>> > + wait_for_sync=opts.wait_for_sync,
>> > + file_storage_dir=opts.file_storage_dir,
>> > + file_driver=opts.file_driver,
>> > + iallocator=opts.iallocator,
>> > + hypervisor=hypervisor,
>> > + hvparams=hvparams,
>> > + beparams=opts.beparams,
>> > + osparams=opts.osparams,
>> > + mode=mode,
>> > + start=start,
>> > + os_type=os_type,
>> > + force_variant=force_variant,
>> > + src_node=src_node,
>> > + src_path=src_path,
>> > + compress=compress,
>> > + tags=tags,
>> > + no_install=no_install,
>> > + identify_defaults=identify_defaults,
>> > + ignore_ipolicy=opts.ignore_ipolicy,
>> > + instance_communication=instance_communication)
>>
>> Usually, our style guide states that in python we should indent on the
>> same level as the open parenthesis.
>> I guess (I'm not counting it) that the line that is being added is too
>> long to be aligned in such a way.
>>
>> Provided this is the reason of the change, I agree with rewriting this
>> block of code this way, as long as it doesn't trigger lint errors.
>
> I will put it back as before as it turns out it does fit.
Even better!
LGTM, thanks.
Michele
>
> diff --git a/lib/cli.py b/lib/cli.py
> index 21407ac..cb28c09 100644
> --- a/lib/cli.py
> +++ b/lib/cli.py
> @@ -2749,35 +2749,34 @@ def GenericInstanceCreate(mode, opts, args):
> else:
> raise errors.ProgrammerError("Invalid creation mode %s" % mode)
>
> - op = opcodes.OpInstanceCreate(
> - instance_name=instance,
> - disks=disks,
> - disk_template=opts.disk_template,
> - nics=nics,
> - conflicts_check=opts.conflicts_check,
> - pnode=pnode, snode=snode,
> - ip_check=opts.ip_check,
> - name_check=opts.name_check,
> - wait_for_sync=opts.wait_for_sync,
> - file_storage_dir=opts.file_storage_dir,
> - file_driver=opts.file_driver,
> - iallocator=opts.iallocator,
> - hypervisor=hypervisor,
> - hvparams=hvparams,
> - beparams=opts.beparams,
> - osparams=opts.osparams,
> - mode=mode,
> - start=start,
> - os_type=os_type,
> - force_variant=force_variant,
> - src_node=src_node,
> - src_path=src_path,
> - compress=compress,
> - tags=tags,
> - no_install=no_install,
> - identify_defaults=identify_defaults,
> - ignore_ipolicy=opts.ignore_ipolicy,
> - instance_communication=instance_communication)
> + op = opcodes.OpInstanceCreate(instance_name=instance,
> + disks=disks,
> + disk_template=opts.disk_template,
> + nics=nics,
> + conflicts_check=opts.conflicts_check,
> + pnode=pnode, snode=snode,
> + ip_check=opts.ip_check,
> + name_check=opts.name_check,
> + wait_for_sync=opts.wait_for_sync,
> + file_storage_dir=opts.file_storage_dir,
> + file_driver=opts.file_driver,
> + iallocator=opts.iallocator,
> + hypervisor=hypervisor,
> + hvparams=hvparams,
> + beparams=opts.beparams,
> + osparams=opts.osparams,
> + mode=mode,
> + start=start,
> + os_type=os_type,
> + force_variant=force_variant,
> + src_node=src_node,
> + src_path=src_path,
> + compress=compress,
> + tags=tags,
> + no_install=no_install,
> + identify_defaults=identify_defaults,
> + ignore_ipolicy=opts.ignore_ipolicy,
> +
> instance_communication=instance_communication)
>
>
>> >
>> > SubmitOrSend(op, opts)
>> > return 0
>> > diff --git a/lib/client/gnt_instance.py b/lib/client/gnt_instance.py
>> > index e761a9a..f6d270b 100644
>> > --- a/lib/client/gnt_instance.py
>> > +++ b/lib/client/gnt_instance.py
>> > @@ -1,7 +1,7 @@
>> > #
>> > #
>> >
>> > -# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Google Inc.
>> > +# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014 Google Inc.
>> > #
>> > # This program is free software; you can redistribute it and/or modify
>> > # it under the terms of the GNU General Public License as published by
>> > @@ -1479,6 +1479,7 @@ add_opts = [
>> > FORCE_VARIANT_OPT,
>> > NO_INSTALL_OPT,
>> > IGNORE_IPOLICY_OPT,
>> > + INSTANCE_COMMUNICATION_OPT,
>> > ]
>> >
>> > commands = {
>> > diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
>> > index 533ec6a..9e008fe 100644
>> > --- a/src/Ganeti/Constants.hs
>> > +++ b/src/Ganeti/Constants.hs
>> > @@ -16,7 +16,7 @@ imported.
>> >
>> > {-
>> >
>> > -Copyright (C) 2013 Google Inc.
>> > +Copyright (C) 2013, 2014 Google Inc.
>>
>> Thanks for updating the copyright dates in the files you touched. :-)
>>
>> >
>> > This program is free software; you can redistribute it and/or modify
>> > it under the terms of the GNU General Public License as published by
>> > @@ -4764,6 +4764,10 @@ glusterPortDefault = 24007
>> >
>> > -- * Instance communication
>> >
>> > +instanceCommunicationDoc :: String
>> > +instanceCommunicationDoc =
>> > + "Enable or disable the communication mechanism for an instance"
>> > +
>> > instanceCommunicationNetwork :: String
>> > instanceCommunicationNetwork = "ganeti:network:communication"
>> >
>> > diff --git a/src/Ganeti/OpCodes.hs b/src/Ganeti/OpCodes.hs
>> > index 9c9d736..bee6449 100644
>> > --- a/src/Ganeti/OpCodes.hs
>> > +++ b/src/Ganeti/OpCodes.hs
>> > @@ -7,7 +7,7 @@
>> >
>> > {-
>> >
>> > -Copyright (C) 2009, 2010, 2011, 2012, 2013 Google Inc.
>> > +Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Google Inc.
>> >
>> > This program is free software; you can redistribute it and/or modify
>> > it under the terms of the GNU General Public License as published by
>> > @@ -452,6 +452,7 @@ $(genOpCode "OpCode"
>> > , pBackupCompress
>> > , pStartInstance
>> > , pInstTags
>> > + , pInstanceCommunication
>> > ],
>> > "instance_name")
>> > , ("OpInstanceMultiAlloc",
>> > diff --git a/src/Ganeti/OpParams.hs b/src/Ganeti/OpParams.hs
>> > index 11d62f6..127c5d6 100644
>> > --- a/src/Ganeti/OpParams.hs
>> > +++ b/src/Ganeti/OpParams.hs
>> > @@ -12,7 +12,7 @@ module.
>> >
>> > {-
>> >
>> > -Copyright (C) 2012 Google Inc.
>> > +Copyright (C) 2012, 2014 Google Inc.
>> >
>> > This program is free software; you can redistribute it and/or modify
>> > it under the terms of the GNU General Public License as published by
>> > @@ -44,6 +44,7 @@ module Ganeti.OpParams
>> > , SetParamsMods(..)
>> > , ExportTarget(..)
>> > , pInstanceName
>> > + , pInstanceCommunication
>> > , pInstanceUuid
>> > , pInstances
>> > , pName
>> > @@ -984,6 +985,11 @@ pInstanceName =
>> > withDoc "A required instance name (for single-instance LUs)" $
>> > simpleField "instance_name" [t| String |]
>> >
>> > +pInstanceCommunication :: Field
>> > +pInstanceCommunication =
>> > + withDoc C.instanceCommunicationDoc $
>> > + defaultFalse "instance_communication"
>> > +
>> > pForceVariant :: Field
>> > pForceVariant =
>> > withDoc "Whether to force an unknown OS variant" $
>> > diff --git a/test/hs/Test/Ganeti/OpCodes.hs
>> > b/test/hs/Test/Ganeti/OpCodes.hs
>> > index 5157801..90bc091 100644
>> > --- a/test/hs/Test/Ganeti/OpCodes.hs
>> > +++ b/test/hs/Test/Ganeti/OpCodes.hs
>> > @@ -241,7 +241,8 @@ instance Arbitrary OpCodes.OpCode where
>> > genMaybe genNodeNameNE <*> return Nothing <*> genMaybe (pure
>> > []) <*>
>> > genMaybe genNodeNameNE <*> arbitrary <*> genMaybe genNodeNameNE
>> > <*>
>> > return Nothing <*> genMaybe genNodeNameNE <*> genMaybe
>> > genNameNE <*>
>> > - arbitrary <*> arbitrary <*> (genTags >>= mapM mkNonEmpty)
>> > + arbitrary <*> arbitrary <*> (genTags >>= mapM mkNonEmpty) <*>
>> > + arbitrary
>> > "OP_INSTANCE_MULTI_ALLOC" ->
>> > OpCodes.OpInstanceMultiAlloc <$> arbitrary <*> genMaybe genNameNE
>> > <*>
>> > pure []
>> > --
>> > 1.8.5.3
>> >
>>
>> LGTM, thanks.
>> Michele
>>
>> --
>> 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
>
> --
> 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
--
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