Skip to content

Commit 6f4acc4

Browse files
Huanxuan Aoranasheel2000
andcommitted
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>
1 parent 30afdb9 commit 6f4acc4

9 files changed

Lines changed: 241 additions & 8 deletions

File tree

doc/source/command-objects/volume-transfer-request.rst

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,27 @@ volume transfer request
44

55
Block Storage v1, v2
66

7+
volume transfer request create
8+
------------------------------
9+
10+
Create volume transfer request
11+
12+
.. program:: volume transfer request create
13+
.. code:: bash
14+
15+
os volume transfer request create
16+
[--name <name>]
17+
<volume>
18+
19+
.. option:: --name <name>
20+
21+
New transfer request name (default to None)
22+
23+
.. _volume_transfer_request_create-volume:
24+
.. describe:: <volume>
25+
26+
Volume to transfer (name or ID)
27+
728
volume transfer request list
829
----------------------------
930

@@ -18,4 +39,4 @@ Lists all volume transfer requests.
1839
.. option:: --all-projects
1940

2041
Shows detail for all projects. Admin only.
21-
(defaults to False)
42+
(defaults to False)

openstackclient/tests/unit/volume/v1/fakes.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,12 @@ def create_one_transfer(attrs=None):
146146
"""
147147
# Set default attribute
148148
transfer_info = {
149-
'volume_id': 'ce26708d-a7f8-4b4b-9861-4a80256615a7',
149+
'auth_key': 'key-' + uuid.uuid4().hex,
150+
'created_at': 'time-' + uuid.uuid4().hex,
151+
'volume_id': 'volume-id-' + uuid.uuid4().hex,
150152
'name': 'fake_transfer_name',
151-
'id': '731a7f53-aa92-4fbd-9de3-6f7d729c926b'
153+
'id': 'id-' + uuid.uuid4().hex,
154+
'links': 'links-' + uuid.uuid4().hex,
152155
}
153156

154157
# Overwrite default attributes if there are some attributes set

openstackclient/tests/unit/volume/v1/test_transfer_request.py

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
# under the License.
1313
#
1414

15-
1615
from openstackclient.tests.unit.volume.v1 import fakes as transfer_fakes
1716
from openstackclient.volume.v1 import volume_transfer_request
1817

@@ -26,6 +25,77 @@ def setUp(self):
2625
self.transfer_mock = self.app.client_manager.volume.transfers
2726
self.transfer_mock.reset_mock()
2827

28+
# Get a shortcut to the VolumeManager Mock
29+
self.volumes_mock = self.app.client_manager.volume.volumes
30+
self.volumes_mock.reset_mock()
31+
32+
33+
class TestTransferCreate(TestTransfer):
34+
35+
volume = transfer_fakes.FakeVolume.create_one_volume()
36+
37+
columns = (
38+
'auth_key',
39+
'created_at',
40+
'id',
41+
'name',
42+
'volume_id',
43+
)
44+
45+
def setUp(self):
46+
super(TestTransferCreate, self).setUp()
47+
48+
self.volume_transfer = transfer_fakes.FakeTransfer.create_one_transfer(
49+
attrs={'volume_id': self.volume.id})
50+
self.data = (
51+
self.volume_transfer.auth_key,
52+
self.volume_transfer.created_at,
53+
self.volume_transfer.id,
54+
self.volume_transfer.name,
55+
self.volume_transfer.volume_id,
56+
)
57+
58+
self.transfer_mock.create.return_value = self.volume_transfer
59+
self.volumes_mock.get.return_value = self.volume
60+
61+
# Get the command object to test
62+
self.cmd = volume_transfer_request.CreateTransferRequest(
63+
self.app, None)
64+
65+
def test_transfer_create_without_name(self):
66+
arglist = [
67+
self.volume.id,
68+
]
69+
verifylist = [
70+
('volume', self.volume.id),
71+
]
72+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
73+
74+
columns, data = self.cmd.take_action(parsed_args)
75+
76+
self.transfer_mock.create.assert_called_once_with(
77+
self.volume.id, None)
78+
self.assertEqual(self.columns, columns)
79+
self.assertEqual(self.data, data)
80+
81+
def test_transfer_create_with_name(self):
82+
arglist = [
83+
'--name', self.volume_transfer.name,
84+
self.volume.id,
85+
]
86+
verifylist = [
87+
('name', self.volume_transfer.name),
88+
('volume', self.volume.id),
89+
]
90+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
91+
92+
columns, data = self.cmd.take_action(parsed_args)
93+
94+
self.transfer_mock.create.assert_called_once_with(
95+
self.volume.id, self.volume_transfer.name,)
96+
self.assertEqual(self.columns, columns)
97+
self.assertEqual(self.data, data)
98+
2999

30100
class TestTransferList(TestTransfer):
31101

openstackclient/tests/unit/volume/v2/fakes.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,12 @@ def create_one_transfer(attrs=None):
3939
"""
4040
# Set default attribute
4141
transfer_info = {
42-
'volume_id': 'ce26708d-a7f8-4b4b-9861-4a80256615a7',
42+
'auth_key': 'key-' + uuid.uuid4().hex,
43+
'created_at': 'time-' + uuid.uuid4().hex,
44+
'volume_id': 'volume-id-' + uuid.uuid4().hex,
4345
'name': 'fake_transfer_name',
44-
'id': '731a7f53-aa92-4fbd-9de3-6f7d729c926b'
46+
'id': 'id-' + uuid.uuid4().hex,
47+
'links': 'links-' + uuid.uuid4().hex,
4548
}
4649

4750
# Overwrite default attributes if there are some attributes set

openstackclient/tests/unit/volume/v2/test_transfer_request.py

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
# under the License.
1313
#
1414

15-
1615
from openstackclient.tests.unit.volume.v2 import fakes as transfer_fakes
1716
from openstackclient.volume.v2 import volume_transfer_request
1817

@@ -26,6 +25,77 @@ def setUp(self):
2625
self.transfer_mock = self.app.client_manager.volume.transfers
2726
self.transfer_mock.reset_mock()
2827

28+
# Get a shortcut to the VolumeManager Mock
29+
self.volumes_mock = self.app.client_manager.volume.volumes
30+
self.volumes_mock.reset_mock()
31+
32+
33+
class TestTransferCreate(TestTransfer):
34+
35+
volume = transfer_fakes.FakeVolume.create_one_volume()
36+
37+
columns = (
38+
'auth_key',
39+
'created_at',
40+
'id',
41+
'name',
42+
'volume_id',
43+
)
44+
45+
def setUp(self):
46+
super(TestTransferCreate, self).setUp()
47+
48+
self.volume_transfer = transfer_fakes.FakeTransfer.create_one_transfer(
49+
attrs={'volume_id': self.volume.id})
50+
self.data = (
51+
self.volume_transfer.auth_key,
52+
self.volume_transfer.created_at,
53+
self.volume_transfer.id,
54+
self.volume_transfer.name,
55+
self.volume_transfer.volume_id,
56+
)
57+
58+
self.transfer_mock.create.return_value = self.volume_transfer
59+
self.volumes_mock.get.return_value = self.volume
60+
61+
# Get the command object to test
62+
self.cmd = volume_transfer_request.CreateTransferRequest(
63+
self.app, None)
64+
65+
def test_transfer_create_without_name(self):
66+
arglist = [
67+
self.volume.id,
68+
]
69+
verifylist = [
70+
('volume', self.volume.id),
71+
]
72+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
73+
74+
columns, data = self.cmd.take_action(parsed_args)
75+
76+
self.transfer_mock.create.assert_called_once_with(
77+
self.volume.id, None)
78+
self.assertEqual(self.columns, columns)
79+
self.assertEqual(self.data, data)
80+
81+
def test_transfer_create_with_name(self):
82+
arglist = [
83+
'--name', self.volume_transfer.name,
84+
self.volume.id,
85+
]
86+
verifylist = [
87+
('name', self.volume_transfer.name),
88+
('volume', self.volume.id),
89+
]
90+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
91+
92+
columns, data = self.cmd.take_action(parsed_args)
93+
94+
self.transfer_mock.create.assert_called_once_with(
95+
self.volume.id, self.volume_transfer.name,)
96+
self.assertEqual(self.columns, columns)
97+
self.assertEqual(self.data, data)
98+
2999

30100
class TestTransferList(TestTransfer):
31101

openstackclient/volume/v1/volume_transfer_request.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,44 @@
1212
# under the License.
1313
#
1414

15-
"""Volume v2 transfer action implementations"""
15+
"""Volume v1 transfer action implementations"""
1616

1717
from osc_lib.command import command
1818
from osc_lib import utils
19+
import six
1920

2021
from openstackclient.i18n import _
2122

2223

24+
class CreateTransferRequest(command.ShowOne):
25+
"""Create volume transfer request."""
26+
27+
def get_parser(self, prog_name):
28+
parser = super(CreateTransferRequest, self).get_parser(prog_name)
29+
parser.add_argument(
30+
'--name',
31+
metavar="<name>",
32+
help=_('New transfer request name (default to None)')
33+
)
34+
parser.add_argument(
35+
'volume',
36+
metavar="<volume>",
37+
help=_('Volume to transfer (name or ID)')
38+
)
39+
return parser
40+
41+
def take_action(self, parsed_args):
42+
volume_client = self.app.client_manager.volume
43+
volume_id = utils.find_resource(
44+
volume_client.volumes, parsed_args.volume).id
45+
volume_transfer_request = volume_client.transfers.create(
46+
volume_id, parsed_args.name,
47+
)
48+
volume_transfer_request._info.pop("links", None)
49+
50+
return zip(*sorted(six.iteritems(volume_transfer_request._info)))
51+
52+
2353
class ListTransferRequests(command.Lister):
2454
"""Lists all volume transfer requests."""
2555

openstackclient/volume/v2/volume_transfer_request.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,40 @@
1616

1717
from osc_lib.command import command
1818
from osc_lib import utils
19+
import six
1920

2021
from openstackclient.i18n import _
2122

2223

24+
class CreateTransferRequest(command.ShowOne):
25+
"""Create volume transfer request."""
26+
27+
def get_parser(self, prog_name):
28+
parser = super(CreateTransferRequest, self).get_parser(prog_name)
29+
parser.add_argument(
30+
'--name',
31+
metavar="<name>",
32+
help=_('New transfer request name (default to None)'),
33+
)
34+
parser.add_argument(
35+
'volume',
36+
metavar="<volume>",
37+
help=_('Volume to transfer (name or ID)'),
38+
)
39+
return parser
40+
41+
def take_action(self, parsed_args):
42+
volume_client = self.app.client_manager.volume
43+
volume_id = utils.find_resource(
44+
volume_client.volumes, parsed_args.volume).id
45+
volume_transfer_request = volume_client.transfers.create(
46+
volume_id, parsed_args.name,
47+
)
48+
volume_transfer_request._info.pop("links", None)
49+
50+
return zip(*sorted(six.iteritems(volume_transfer_request._info)))
51+
52+
2353
class ListTransferRequests(command.Lister):
2454
"""Lists all volume transfer requests."""
2555

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- Add ``volume transfer request create`` command in volume v1 and v2
4+
[Blueprint `cinder-command-support <https://blueprints.launchpad.net/python-openstackclient/+spec/cinder-command-support>`_]

setup.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ openstack.volume.v1 =
483483
volume_service_list = openstackclient.volume.v1.service:ListService
484484
volume_service_set = openstackclient.volume.v1.service:SetService
485485

486+
volume_transfer_request_create = openstackclient.volume.v1.volume_transfer_request:CreateTransferRequest
486487
volume_transfer_request_list = openstackclient.volume.v1.volume_transfer_request:ListTransferRequests
487488

488489
openstack.volume.v2 =
@@ -531,6 +532,7 @@ openstack.volume.v2 =
531532
volume_service_list = openstackclient.volume.v2.service:ListService
532533
volume_service_set = openstackclient.volume.v2.service:SetService
533534

535+
volume_transfer_request_create = openstackclient.volume.v2.volume_transfer_request:CreateTransferRequest
534536
volume_transfer_request_list = openstackclient.volume.v2.volume_transfer_request:ListTransferRequests
535537

536538
[build_sphinx]

0 commit comments

Comments
 (0)