On Mon, Oct 6, 2014 at 4:42 PM, 'Aaron Karper' via ganeti-devel
<[email protected]> wrote:
> This makes exactly file, shared file, plain, rbd, and gluster storage
> movable. Previously gluster and shared file were supposedly supported,
> but actually would throw an error if moving them would be tried. RBD
> wasn't supported.
>
> Signed-off-by: Aaron Karper <[email protected]>
> ---
>  lib/cmdlib/instance.py              | 17 ++++++-----------
>  src/Ganeti/Constants.hs             |  7 +++++++
>  test/py/cmdlib/instance_unittest.py |  5 +++--
>  3 files changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py
> index 0ad343d..8eb6e93 100644
> --- a/lib/cmdlib/instance.py
> +++ b/lib/cmdlib/instance.py
> @@ -2111,10 +2111,12 @@ class LUInstanceMove(LogicalUnit):
>      assert self.instance is not None, \
>        "Cannot retrieve locked instance %s" % self.op.instance_name
>
> -    if self.instance.disk_template not in constants.DTS_COPYABLE:
> -      raise errors.OpPrereqError("Disk template %s not suitable for copying" 
> %
> -                                 self.instance.disk_template,
> -                                 errors.ECODE_STATE)
> +    disks = self.cfg.GetInstanceDisks(self.instance.uuid)
> +    for idx, dsk in enumerate(disks):
> +      if dsk.dev_type not in constants.DTS_MOVABLE_INSTANCE:
> +        raise errors.OpPrereqError("Instance disk %d has layout %s and is 
> not"
> +                                   " suitable for moving instances"
> +                                   % (idx, dsk.dev_type), errors.ECODE_STATE)
>
>      target_node = self.cfg.GetNodeInfo(self.op.target_node_uuid)
>      assert target_node is not None, \
> @@ -2129,13 +2131,6 @@ class LUInstanceMove(LogicalUnit):
>      cluster = self.cfg.GetClusterInfo()
>      bep = cluster.FillBE(self.instance)
>
> -    disks = self.cfg.GetInstanceDisks(self.instance.uuid)
> -    for idx, dsk in enumerate(disks):
> -      if dsk.dev_type not in (constants.DT_PLAIN, constants.DT_FILE,
> -                              constants.DT_SHARED_FILE, 
> constants.DT_GLUSTER):
> -        raise errors.OpPrereqError("Instance disk %d has a complex layout,"
> -                                   " cannot copy" % idx, errors.ECODE_STATE)
> -
>      CheckNodeOnline(self, target_node.uuid)
>      CheckNodeNotDrained(self, target_node.uuid)
>      CheckNodeVmCapable(self, target_node.uuid)
> diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
> index c54c75e..93a0a0f 100644
> --- a/src/Ganeti/Constants.hs
> +++ b/src/Ganeti/Constants.hs
> @@ -1008,12 +1008,19 @@ dtsNotConvertibleFrom =
>    ConstantUtils.mkSet $
>    map Types.diskTemplateToRaw [DTDiskless]
>
> +--
>  -- | The set of disk templates that cannot convert to
>  dtsNotConvertibleTo :: FrozenSet String
>  dtsNotConvertibleTo =
>    ConstantUtils.mkSet $
>    map Types.diskTemplateToRaw [DTDiskless, DTBlock]
>
> +-- | The set of disk templates that supports moving instances
> +dtsMovableInstance :: FrozenSet String
> +dtsMovableInstance =
> +  ConstantUtils.mkSet $
> +  map Types.diskTemplateToRaw [DTPlain, DTFile, DTSharedFile, DTGluster, 
> DTRbd]
> +
>  -- * Drbd
>
>  drbdHmacAlg :: String
> diff --git a/test/py/cmdlib/instance_unittest.py 
> b/test/py/cmdlib/instance_unittest.py
> index ac2f082..4406be9 100644
> --- a/test/py/cmdlib/instance_unittest.py
> +++ b/test/py/cmdlib/instance_unittest.py
> @@ -1562,11 +1562,12 @@ class TestLUInstanceMove(CmdlibTestCase):
>      self.ExecOpCodeExpectOpPrereqError(op, "Instance 'missing.inst' not 
> known")
>
>    def testUncopyableDiskTemplate(self):
> -    inst = self.cfg.AddNewInstance(disk_template=constants.DT_SHARED_FILE)
> +    inst = self.cfg.AddNewInstance(disk_template=constants.DT_BLOCK)
>      op = opcodes.OpInstanceMove(instance_name=inst.name,
>                                  target_node=self.node.name)
>      self.ExecOpCodeExpectOpPrereqError(
> -      op, "Disk template sharedfile not suitable for copying")
> +      op, "Instance disk 0 has layout blockdev and is"
> +      " not suitable for moving instances")
>
>    def testAlreadyOnTargetNode(self):
>      inst = self.cfg.AddNewInstance()
> --
> 2.1.0.rc2.206.gedb03e5
>

Is this exactly the same as the patch sent a few days ago without the
rest of the patch series (in which case, please, look at the comments
there) or are there changes and should I review it again?

Cheers,
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

Reply via email to