diff options
| -rw-r--r-- | cinderclient/tests/unit/v3/test_shell.py | 7 | ||||
| -rw-r--r-- | cinderclient/tests/unit/v3/test_volume_transfers.py | 24 | ||||
| -rw-r--r-- | cinderclient/v3/volume_transfers.py | 56 | ||||
| -rw-r--r-- | releasenotes/notes/volume-transfer-bug-23c760efb9f98a4d.yaml | 8 |
4 files changed, 32 insertions, 63 deletions
diff --git a/cinderclient/tests/unit/v3/test_shell.py b/cinderclient/tests/unit/v3/test_shell.py index e06dedc..c9f7760 100644 --- a/cinderclient/tests/unit/v3/test_shell.py +++ b/cinderclient/tests/unit/v3/test_shell.py @@ -1334,6 +1334,13 @@ class ShellTest(utils.TestCase): self.assert_called('POST', '/workers/cleanup', body=expected) def test_create_transfer(self): + self.run_command('transfer-create 1234') + expected = {'transfer': {'volume_id': 1234, + 'name': None, + }} + self.assert_called('POST', '/volume-transfers', body=expected) + + def test_create_transfer_no_snaps(self): self.run_command('--os-volume-api-version 3.55 transfer-create ' '--no-snapshots 1234') expected = {'transfer': {'volume_id': 1234, diff --git a/cinderclient/tests/unit/v3/test_volume_transfers.py b/cinderclient/tests/unit/v3/test_volume_transfers.py index 4eab0b2..7fc79af 100644 --- a/cinderclient/tests/unit/v3/test_volume_transfers.py +++ b/cinderclient/tests/unit/v3/test_volume_transfers.py @@ -13,25 +13,29 @@ # License for the specific language governing permissions and limitations # under the License. +from cinderclient import api_versions from cinderclient.tests.unit import utils from cinderclient.tests.unit.v3 import fakes +# Create calls need the right version of faked client +v3cs = fakes.FakeClient(api_versions.APIVersion('3.55')) +# Other calls fall back to default behavior cs = fakes.FakeClient() class VolumeTransfersTest(utils.TestCase): def test_create(self): - vol = cs.transfers.create('1234') - cs.assert_called('POST', '/volume-transfers', + vol = v3cs.transfers.create('1234') + v3cs.assert_called('POST', '/volume-transfers', body={'transfer': {'volume_id': '1234', 'name': None, 'no_snapshots': False}}) self._assert_request_id(vol) def test_create_without_snapshots(self): - vol = cs.transfers.create('1234', no_snapshots=True) - cs.assert_called('POST', '/volume-transfers', + vol = v3cs.transfers.create('1234', no_snapshots=True) + v3cs.assert_called('POST', '/volume-transfers', body={'transfer': {'volume_id': '1234', 'name': None, 'no_snapshots': True}}) self._assert_request_id(vol) @@ -39,29 +43,29 @@ class VolumeTransfersTest(utils.TestCase): def test_get(self): transfer_id = '5678' vol = cs.transfers.get(transfer_id) - cs.assert_called('GET', '/volume-transfers/%s' % transfer_id) + cs.assert_called('GET', '/os-volume-transfer/%s' % transfer_id) self._assert_request_id(vol) def test_list(self): lst = cs.transfers.list() - cs.assert_called('GET', '/volume-transfers/detail') + cs.assert_called('GET', '/os-volume-transfer/detail') self._assert_request_id(lst) def test_delete(self): b = cs.transfers.list()[0] vol = b.delete() - cs.assert_called('DELETE', '/volume-transfers/5678') + cs.assert_called('DELETE', '/os-volume-transfer/5678') self._assert_request_id(vol) vol = cs.transfers.delete('5678') self._assert_request_id(vol) - cs.assert_called('DELETE', '/volume-transfers/5678') + cs.assert_called('DELETE', '/os-volume-transfer/5678') vol = cs.transfers.delete(b) - cs.assert_called('DELETE', '/volume-transfers/5678') + cs.assert_called('DELETE', '/os-volume-transfer/5678') self._assert_request_id(vol) def test_accept(self): transfer_id = '5678' auth_key = '12345' vol = cs.transfers.accept(transfer_id, auth_key) - cs.assert_called('POST', '/volume-transfers/%s/accept' % transfer_id) + cs.assert_called('POST', '/os-volume-transfer/%s/accept' % transfer_id) self._assert_request_id(vol) diff --git a/cinderclient/v3/volume_transfers.py b/cinderclient/v3/volume_transfers.py index 4e80d20..aa33082 100644 --- a/cinderclient/v3/volume_transfers.py +++ b/cinderclient/v3/volume_transfers.py @@ -17,17 +17,10 @@ Volume transfer interface (v3 extension). """ -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. @@ -37,50 +30,7 @@ class VolumeTransferManager(volume_transfers.VolumeTransferManager): :rtype: :class:`VolumeTransfer` """ body = {'transfer': {'volume_id': volume_id, - 'name': name, - 'no_snapshots': no_snapshots}} + 'name': name}} + if self.api_version.matches('3.55'): + body['transfer']['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)) diff --git a/releasenotes/notes/volume-transfer-bug-23c760efb9f98a4d.yaml b/releasenotes/notes/volume-transfer-bug-23c760efb9f98a4d.yaml new file mode 100644 index 0000000..a22dd66 --- /dev/null +++ b/releasenotes/notes/volume-transfer-bug-23c760efb9f98a4d.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + An issue was discovered with the way API microversions were handled for the + new volume-transfer with snapshot handling with microversion 3.55. This + release includes a fix to keep backwards compatibility with earlier + releases. See `bug #1784703 + <https://bugs.launchpad.net/cinder/+bug/1784703>`_ for more details. |
