summaryrefslogtreecommitdiff
path: root/cinderclient/v3
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2018-07-20 03:32:53 +0000
committerGerrit Code Review <review@openstack.org>2018-07-20 03:32:53 +0000
commit9b1d6247be5b09b2c019fdfbb3091d253e395689 (patch)
treeb5d96c2cd51ed3da078df5f1477cad7b8ee735a5 /cinderclient/v3
parentf69bfcbd7ffbdcd45e36768b760e53bd1c1c32d3 (diff)
parenta554faa6530fa0bb70430572869a6a2555783912 (diff)
downloadpython-cinderclient-9b1d6247be5b09b2c019fdfbb3091d253e395689.tar.gz
Merge "Transfer snapshots with volumes"
Diffstat (limited to 'cinderclient/v3')
-rw-r--r--cinderclient/v3/shell.py37
-rw-r--r--cinderclient/v3/volume_transfers.py68
2 files changed, 103 insertions, 2 deletions
diff --git a/cinderclient/v3/shell.py b/cinderclient/v3/shell.py
index d5114e1..1d4e18a 100644
--- a/cinderclient/v3/shell.py
+++ b/cinderclient/v3/shell.py
@@ -2385,7 +2385,7 @@ def do_backup_create(cs, args):
kwargs = {}
if getattr(args, 'metadata', None):
- kwargs['metadata'] = shell_utils.extract_metadata(args)
+ kwargs['metadata'] = shell_utils.extract_metadata(args)
az = getattr(args, 'availability_zone', None)
if az:
kwargs['availability_zone'] = az
@@ -2406,3 +2406,38 @@ def do_backup_create(cs, args):
info.pop('links')
utils.print_dict(info)
+
+
+@utils.arg('volume', metavar='<volume>',
+ help='Name or ID of volume to transfer.')
+@utils.arg('--name',
+ metavar='<name>',
+ default=None,
+ help='Transfer name. Default=None.')
+@utils.arg('--display-name',
+ help=argparse.SUPPRESS)
+@utils.arg('--no-snapshots',
+ action='store_true',
+ help='Allows or disallows transfer volumes without snapshots. '
+ 'Default=False.',
+ start_version='3.55',
+ default=False)
+def do_transfer_create(cs, args):
+ """Creates a volume transfer."""
+ if args.display_name is not None:
+ args.name = args.display_name
+
+ kwargs = {}
+ no_snapshots = getattr(args, 'no_snapshots', None)
+ if no_snapshots is not None:
+ kwargs['no_snapshots'] = no_snapshots
+
+ volume = utils.find_volume(cs, args.volume)
+ transfer = cs.transfers.create(volume.id,
+ args.name,
+ **kwargs)
+ info = dict()
+ info.update(transfer._info)
+
+ info.pop('links', None)
+ utils.print_dict(info)
diff --git a/cinderclient/v3/volume_transfers.py b/cinderclient/v3/volume_transfers.py
index f565761..4e80d20 100644
--- a/cinderclient/v3/volume_transfers.py
+++ b/cinderclient/v3/volume_transfers.py
@@ -17,4 +17,70 @@
Volume transfer interface (v3 extension).
"""
-from cinderclient.v2.volume_transfers import * # flake8: noqa
+from cinderclient import api_versions
+from cinderclient import base
+from cinderclient import utils
+from cinderclient.v2 import volume_transfers
+
+
+VolumeTransfer = volume_transfers.VolumeTransfer
+
+
+class VolumeTransferManager(volume_transfers.VolumeTransferManager):
+ @api_versions.wraps("3.55")
+ def create(self, volume_id, name=None, no_snapshots=False):
+ """Creates a volume transfer.
+
+ :param volume_id: The ID of the volume to transfer.
+ :param name: The name of the transfer.
+ :param no_snapshots: Transfer volumes without snapshots.
+ :rtype: :class:`VolumeTransfer`
+ """
+ body = {'transfer': {'volume_id': volume_id,
+ 'name': name,
+ 'no_snapshots': no_snapshots}}
+ return self._create('/volume-transfers', body, 'transfer')
+
+ @api_versions.wraps("3.55")
+ def accept(self, transfer_id, auth_key):
+ """Accept a volume transfer.
+
+ :param transfer_id: The ID of the transfer to accept.
+ :param auth_key: The auth_key of the transfer.
+ :rtype: :class:`VolumeTransfer`
+ """
+ body = {'accept': {'auth_key': auth_key}}
+ return self._create('/volume-transfers/%s/accept' % transfer_id,
+ body, 'transfer')
+
+ @api_versions.wraps("3.55")
+ def get(self, transfer_id):
+ """Show details of a volume transfer.
+
+ :param transfer_id: The ID of the volume transfer to display.
+ :rtype: :class:`VolumeTransfer`
+ """
+ return self._get("/volume-transfers/%s" % transfer_id, "transfer")
+
+ @api_versions.wraps("3.55")
+ def list(self, detailed=True, search_opts=None):
+ """Get a list of all volume transfer.
+
+ :rtype: list of :class:`VolumeTransfer`
+ """
+ query_string = utils.build_query_param(search_opts)
+
+ detail = ""
+ if detailed:
+ detail = "/detail"
+
+ return self._list("/volume-transfers%s%s" % (detail, query_string),
+ "transfers")
+
+ @api_versions.wraps("3.55")
+ def delete(self, transfer_id):
+ """Delete a volume transfer.
+
+ :param transfer_id: The :class:`VolumeTransfer` to delete.
+ """
+ return self._delete("/volume-transfers/%s" % base.getid(transfer_id))