diff options
| author | Zuul <zuul@review.openstack.org> | 2018-07-20 03:32:53 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2018-07-20 03:32:53 +0000 |
| commit | 9b1d6247be5b09b2c019fdfbb3091d253e395689 (patch) | |
| tree | b5d96c2cd51ed3da078df5f1477cad7b8ee735a5 /cinderclient/v3 | |
| parent | f69bfcbd7ffbdcd45e36768b760e53bd1c1c32d3 (diff) | |
| parent | a554faa6530fa0bb70430572869a6a2555783912 (diff) | |
| download | python-cinderclient-9b1d6247be5b09b2c019fdfbb3091d253e395689.tar.gz | |
Merge "Transfer snapshots with volumes"
Diffstat (limited to 'cinderclient/v3')
| -rw-r--r-- | cinderclient/v3/shell.py | 37 | ||||
| -rw-r--r-- | cinderclient/v3/volume_transfers.py | 68 |
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)) |
