Implement "volume transfer request create" command
Add "volume transfer request create" command in volume v1 and v2. Also add the unit tests, docs, release note and functional tests Change-Id: If362df1acf214efdf6ba129cd917d33eb54e1030 Implements: bp cinder-command-support Co-Authored-By: Sheel Rana <ranasheel2000@gmail.com>
This commit is contained in:
parent
30afdb9684
commit
6f4acc45c6
@ -4,6 +4,27 @@ volume transfer request
|
||||
|
||||
Block Storage v1, v2
|
||||
|
||||
volume transfer request create
|
||||
------------------------------
|
||||
|
||||
Create volume transfer request
|
||||
|
||||
.. program:: volume transfer request create
|
||||
.. code:: bash
|
||||
|
||||
os volume transfer request create
|
||||
[--name <name>]
|
||||
<volume>
|
||||
|
||||
.. option:: --name <name>
|
||||
|
||||
New transfer request name (default to None)
|
||||
|
||||
.. _volume_transfer_request_create-volume:
|
||||
.. describe:: <volume>
|
||||
|
||||
Volume to transfer (name or ID)
|
||||
|
||||
volume transfer request list
|
||||
----------------------------
|
||||
|
||||
@ -18,4 +39,4 @@ Lists all volume transfer requests.
|
||||
.. option:: --all-projects
|
||||
|
||||
Shows detail for all projects. Admin only.
|
||||
(defaults to False)
|
||||
(defaults to False)
|
||||
|
@ -146,9 +146,12 @@ class FakeTransfer(object):
|
||||
"""
|
||||
# Set default attribute
|
||||
transfer_info = {
|
||||
'volume_id': 'ce26708d-a7f8-4b4b-9861-4a80256615a7',
|
||||
'auth_key': 'key-' + uuid.uuid4().hex,
|
||||
'created_at': 'time-' + uuid.uuid4().hex,
|
||||
'volume_id': 'volume-id-' + uuid.uuid4().hex,
|
||||
'name': 'fake_transfer_name',
|
||||
'id': '731a7f53-aa92-4fbd-9de3-6f7d729c926b'
|
||||
'id': 'id-' + uuid.uuid4().hex,
|
||||
'links': 'links-' + uuid.uuid4().hex,
|
||||
}
|
||||
|
||||
# Overwrite default attributes if there are some attributes set
|
||||
|
@ -12,7 +12,6 @@
|
||||
# under the License.
|
||||
#
|
||||
|
||||
|
||||
from openstackclient.tests.unit.volume.v1 import fakes as transfer_fakes
|
||||
from openstackclient.volume.v1 import volume_transfer_request
|
||||
|
||||
@ -26,6 +25,77 @@ class TestTransfer(transfer_fakes.TestVolumev1):
|
||||
self.transfer_mock = self.app.client_manager.volume.transfers
|
||||
self.transfer_mock.reset_mock()
|
||||
|
||||
# Get a shortcut to the VolumeManager Mock
|
||||
self.volumes_mock = self.app.client_manager.volume.volumes
|
||||
self.volumes_mock.reset_mock()
|
||||
|
||||
|
||||
class TestTransferCreate(TestTransfer):
|
||||
|
||||
volume = transfer_fakes.FakeVolume.create_one_volume()
|
||||
|
||||
columns = (
|
||||
'auth_key',
|
||||
'created_at',
|
||||
'id',
|
||||
'name',
|
||||
'volume_id',
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(TestTransferCreate, self).setUp()
|
||||
|
||||
self.volume_transfer = transfer_fakes.FakeTransfer.create_one_transfer(
|
||||
attrs={'volume_id': self.volume.id})
|
||||
self.data = (
|
||||
self.volume_transfer.auth_key,
|
||||
self.volume_transfer.created_at,
|
||||
self.volume_transfer.id,
|
||||
self.volume_transfer.name,
|
||||
self.volume_transfer.volume_id,
|
||||
)
|
||||
|
||||
self.transfer_mock.create.return_value = self.volume_transfer
|
||||
self.volumes_mock.get.return_value = self.volume
|
||||
|
||||
# Get the command object to test
|
||||
self.cmd = volume_transfer_request.CreateTransferRequest(
|
||||
self.app, None)
|
||||
|
||||
def test_transfer_create_without_name(self):
|
||||
arglist = [
|
||||
self.volume.id,
|
||||
]
|
||||
verifylist = [
|
||||
('volume', self.volume.id),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.transfer_mock.create.assert_called_once_with(
|
||||
self.volume.id, None)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, data)
|
||||
|
||||
def test_transfer_create_with_name(self):
|
||||
arglist = [
|
||||
'--name', self.volume_transfer.name,
|
||||
self.volume.id,
|
||||
]
|
||||
verifylist = [
|
||||
('name', self.volume_transfer.name),
|
||||
('volume', self.volume.id),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.transfer_mock.create.assert_called_once_with(
|
||||
self.volume.id, self.volume_transfer.name,)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, data)
|
||||
|
||||
|
||||
class TestTransferList(TestTransfer):
|
||||
|
||||
|
@ -39,9 +39,12 @@ class FakeTransfer(object):
|
||||
"""
|
||||
# Set default attribute
|
||||
transfer_info = {
|
||||
'volume_id': 'ce26708d-a7f8-4b4b-9861-4a80256615a7',
|
||||
'auth_key': 'key-' + uuid.uuid4().hex,
|
||||
'created_at': 'time-' + uuid.uuid4().hex,
|
||||
'volume_id': 'volume-id-' + uuid.uuid4().hex,
|
||||
'name': 'fake_transfer_name',
|
||||
'id': '731a7f53-aa92-4fbd-9de3-6f7d729c926b'
|
||||
'id': 'id-' + uuid.uuid4().hex,
|
||||
'links': 'links-' + uuid.uuid4().hex,
|
||||
}
|
||||
|
||||
# Overwrite default attributes if there are some attributes set
|
||||
|
@ -12,7 +12,6 @@
|
||||
# under the License.
|
||||
#
|
||||
|
||||
|
||||
from openstackclient.tests.unit.volume.v2 import fakes as transfer_fakes
|
||||
from openstackclient.volume.v2 import volume_transfer_request
|
||||
|
||||
@ -26,6 +25,77 @@ class TestTransfer(transfer_fakes.TestVolume):
|
||||
self.transfer_mock = self.app.client_manager.volume.transfers
|
||||
self.transfer_mock.reset_mock()
|
||||
|
||||
# Get a shortcut to the VolumeManager Mock
|
||||
self.volumes_mock = self.app.client_manager.volume.volumes
|
||||
self.volumes_mock.reset_mock()
|
||||
|
||||
|
||||
class TestTransferCreate(TestTransfer):
|
||||
|
||||
volume = transfer_fakes.FakeVolume.create_one_volume()
|
||||
|
||||
columns = (
|
||||
'auth_key',
|
||||
'created_at',
|
||||
'id',
|
||||
'name',
|
||||
'volume_id',
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(TestTransferCreate, self).setUp()
|
||||
|
||||
self.volume_transfer = transfer_fakes.FakeTransfer.create_one_transfer(
|
||||
attrs={'volume_id': self.volume.id})
|
||||
self.data = (
|
||||
self.volume_transfer.auth_key,
|
||||
self.volume_transfer.created_at,
|
||||
self.volume_transfer.id,
|
||||
self.volume_transfer.name,
|
||||
self.volume_transfer.volume_id,
|
||||
)
|
||||
|
||||
self.transfer_mock.create.return_value = self.volume_transfer
|
||||
self.volumes_mock.get.return_value = self.volume
|
||||
|
||||
# Get the command object to test
|
||||
self.cmd = volume_transfer_request.CreateTransferRequest(
|
||||
self.app, None)
|
||||
|
||||
def test_transfer_create_without_name(self):
|
||||
arglist = [
|
||||
self.volume.id,
|
||||
]
|
||||
verifylist = [
|
||||
('volume', self.volume.id),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.transfer_mock.create.assert_called_once_with(
|
||||
self.volume.id, None)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, data)
|
||||
|
||||
def test_transfer_create_with_name(self):
|
||||
arglist = [
|
||||
'--name', self.volume_transfer.name,
|
||||
self.volume.id,
|
||||
]
|
||||
verifylist = [
|
||||
('name', self.volume_transfer.name),
|
||||
('volume', self.volume.id),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.transfer_mock.create.assert_called_once_with(
|
||||
self.volume.id, self.volume_transfer.name,)
|
||||
self.assertEqual(self.columns, columns)
|
||||
self.assertEqual(self.data, data)
|
||||
|
||||
|
||||
class TestTransferList(TestTransfer):
|
||||
|
||||
|
@ -12,14 +12,44 @@
|
||||
# under the License.
|
||||
#
|
||||
|
||||
"""Volume v2 transfer action implementations"""
|
||||
"""Volume v1 transfer action implementations"""
|
||||
|
||||
from osc_lib.command import command
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
class CreateTransferRequest(command.ShowOne):
|
||||
"""Create volume transfer request."""
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(CreateTransferRequest, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'--name',
|
||||
metavar="<name>",
|
||||
help=_('New transfer request name (default to None)')
|
||||
)
|
||||
parser.add_argument(
|
||||
'volume',
|
||||
metavar="<volume>",
|
||||
help=_('Volume to transfer (name or ID)')
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
volume_client = self.app.client_manager.volume
|
||||
volume_id = utils.find_resource(
|
||||
volume_client.volumes, parsed_args.volume).id
|
||||
volume_transfer_request = volume_client.transfers.create(
|
||||
volume_id, parsed_args.name,
|
||||
)
|
||||
volume_transfer_request._info.pop("links", None)
|
||||
|
||||
return zip(*sorted(six.iteritems(volume_transfer_request._info)))
|
||||
|
||||
|
||||
class ListTransferRequests(command.Lister):
|
||||
"""Lists all volume transfer requests."""
|
||||
|
||||
|
@ -16,10 +16,40 @@
|
||||
|
||||
from osc_lib.command import command
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
class CreateTransferRequest(command.ShowOne):
|
||||
"""Create volume transfer request."""
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(CreateTransferRequest, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'--name',
|
||||
metavar="<name>",
|
||||
help=_('New transfer request name (default to None)'),
|
||||
)
|
||||
parser.add_argument(
|
||||
'volume',
|
||||
metavar="<volume>",
|
||||
help=_('Volume to transfer (name or ID)'),
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
volume_client = self.app.client_manager.volume
|
||||
volume_id = utils.find_resource(
|
||||
volume_client.volumes, parsed_args.volume).id
|
||||
volume_transfer_request = volume_client.transfers.create(
|
||||
volume_id, parsed_args.name,
|
||||
)
|
||||
volume_transfer_request._info.pop("links", None)
|
||||
|
||||
return zip(*sorted(six.iteritems(volume_transfer_request._info)))
|
||||
|
||||
|
||||
class ListTransferRequests(command.Lister):
|
||||
"""Lists all volume transfer requests."""
|
||||
|
||||
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- Add ``volume transfer request create`` command in volume v1 and v2
|
||||
[Blueprint `cinder-command-support <https://blueprints.launchpad.net/python-openstackclient/+spec/cinder-command-support>`_]
|
@ -483,6 +483,7 @@ openstack.volume.v1 =
|
||||
volume_service_list = openstackclient.volume.v1.service:ListService
|
||||
volume_service_set = openstackclient.volume.v1.service:SetService
|
||||
|
||||
volume_transfer_request_create = openstackclient.volume.v1.volume_transfer_request:CreateTransferRequest
|
||||
volume_transfer_request_list = openstackclient.volume.v1.volume_transfer_request:ListTransferRequests
|
||||
|
||||
openstack.volume.v2 =
|
||||
@ -531,6 +532,7 @@ openstack.volume.v2 =
|
||||
volume_service_list = openstackclient.volume.v2.service:ListService
|
||||
volume_service_set = openstackclient.volume.v2.service:SetService
|
||||
|
||||
volume_transfer_request_create = openstackclient.volume.v2.volume_transfer_request:CreateTransferRequest
|
||||
volume_transfer_request_list = openstackclient.volume.v2.volume_transfer_request:ListTransferRequests
|
||||
|
||||
[build_sphinx]
|
||||
|
Loading…
x
Reference in New Issue
Block a user