Files
python-cinderclient/cinderclient/v3/volume_transfers.py
Sean McGinnis b3f3cafd1e Fix backwards compat for volume transfer < 3.55
All volume transfer v3 calls were being sent to the endpoint introduced
with microversion 3.55. This fixes backwards compatibility by routing
calls less than 3.55 to the original API extension endpoint.

Change-Id: I7205033ddd5be126b8614372a9fc82a2bc555f48
Closes-bug: #1785330
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
2018-08-04 12:24:35 -05:00

96 lines
3.5 KiB
Python

# Copyright (C) 2013 Hewlett-Packard Development Company, L.P.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Volume transfer interface (v3 extension)."""
from cinderclient import base
from cinderclient import utils
from cinderclient.v2 import volume_transfers
class VolumeTransferManager(volume_transfers.VolumeTransferManager):
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}}
if self.api_version.matches('3.55'):
body['transfer']['no_snapshots'] = no_snapshots
return self._create('/volume-transfers', body, 'transfer')
return self._create('/os-volume-transfer', body, 'transfer')
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}}
if self.api_version.matches('3.55'):
return self._create('/volume-transfers/%s/accept' % transfer_id,
body, 'transfer')
return self._create('/os-volume-transfer/%s/accept' % transfer_id,
body, 'transfer')
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`
"""
if self.api_version.matches('3.55'):
return self._get("/volume-transfers/%s" % transfer_id, "transfer")
return self._get("/os-volume-transfer/%s" % transfer_id, "transfer")
def list(self, detailed=True, search_opts=None):
"""Get a list of all volume transfer.
:param detailed: Get detailed object information.
:param search_opts: Filtering options.
:rtype: list of :class:`VolumeTransfer`
"""
query_string = utils.build_query_param(search_opts)
detail = ""
if detailed:
detail = "/detail"
if self.api_version.matches('3.55'):
return self._list("/volume-transfers%s%s" % (detail, query_string),
"transfers")
return self._list("/os-volume-transfer%s%s" % (detail, query_string),
"transfers")
def delete(self, transfer_id):
"""Delete a volume transfer.
:param transfer_id: The :class:`VolumeTransfer` to delete.
"""
if self.api_version.matches('3.55'):
return self._delete(
"/volume-transfers/%s" % base.getid(transfer_id))
return self._delete("/os-volume-transfer/%s" % base.getid(transfer_id))