Add "consistency-group-snapshot" option to consistency group create

Add "consistency-group-snapshot" option to
"consistency group create" command to support
for creating consistency group from existing
consistency group snapshot

Implements: bp cinder-command-support
Partial-Bug: #1613964
Change-Id: I54c265d38299f4973945ba99e30042bcf47859c0
This commit is contained in:
Huanxuan Ao 2016-12-07 11:32:44 +08:00
parent 158dbe124a
commit 3e9109bc7c
3 changed files with 61 additions and 7 deletions
doc/source/command-objects
openstackclient

@ -13,7 +13,7 @@ Create new consistency group.
.. code:: bash
os consistency group create
--volume-type <volume-type> | --consistency-group-source <consistency-group>
--volume-type <volume-type> | --consistency-group-source <consistency-group> | --consistency-group-snapshot <consistency-group-snapshot>
[--description <description>]
[--availability-zone <availability-zone>]
[<name>]
@ -26,6 +26,10 @@ Create new consistency group.
Existing consistency group (name or ID)
.. option:: --consistency-group-snapshot <consistency-group-snapshot>
Existing consistency group snapshot (name or ID)
.. option:: --description <description>
Description of this consistency group

@ -32,6 +32,10 @@ class TestConsistencyGroup(volume_fakes.TestVolume):
self.app.client_manager.volume.consistencygroups)
self.consistencygroups_mock.reset_mock()
self.cgsnapshots_mock = (
self.app.client_manager.volume.cgsnapshots)
self.cgsnapshots_mock.reset_mock()
self.types_mock = self.app.client_manager.volume.volume_types
self.types_mock.reset_mock()
@ -41,6 +45,11 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
volume_type = volume_fakes.FakeType.create_one_type()
new_consistency_group = (
volume_fakes.FakeConsistencyGroup.create_one_consistency_group())
consistency_group_snapshot = (
volume_fakes.
FakeConsistencyGroupSnapshot.
create_one_consistency_group_snapshot()
)
columns = (
'availability_zone',
@ -70,6 +79,8 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
self.consistencygroups_mock.get.return_value = (
self.new_consistency_group)
self.types_mock.get.return_value = self.volume_type
self.cgsnapshots_mock.get.return_value = (
self.consistency_group_snapshot)
# Get the command object to test
self.cmd = consistency_group.CreateConsistencyGroup(self.app, None)
@ -164,6 +175,34 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
def test_consistency_group_create_from_snapshot(self):
arglist = [
'--consistency-group-snapshot', self.consistency_group_snapshot.id,
'--description', self.new_consistency_group.description,
self.new_consistency_group.name,
]
verifylist = [
('consistency_group_snapshot', self.consistency_group_snapshot.id),
('description', self.new_consistency_group.description),
('name', self.new_consistency_group.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.types_mock.get.assert_not_called()
self.cgsnapshots_mock.get.assert_called_once_with(
self.consistency_group_snapshot.id)
self.consistencygroups_mock.create_from_src.assert_called_with(
self.consistency_group_snapshot.id,
None,
name=self.new_consistency_group.name,
description=self.new_consistency_group.description,
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
class TestConsistencyGroupDelete(TestConsistencyGroup):

@ -94,6 +94,11 @@ class CreateConsistencyGroup(command.ShowOne):
metavar="<consistency-group>",
help=_("Existing consistency group (name or ID)")
)
exclusive_group.add_argument(
"--consistency-group-snapshot",
metavar="<consistency-group-snapshot>",
help=_("Existing consistency group snapshot (name or ID)")
)
parser.add_argument(
"--description",
metavar="<description>",
@ -120,17 +125,23 @@ class CreateConsistencyGroup(command.ShowOne):
description=parsed_args.description,
availability_zone=parsed_args.availability_zone
)
elif parsed_args.consistency_group_source:
else:
if parsed_args.availability_zone:
msg = _("'--availability-zone' option will not work "
"if creating consistency group from source")
LOG.warning(msg)
consistency_group_id = utils.find_resource(
volume_client.consistencygroups,
parsed_args.consistency_group_source).id
consistency_group_id = None
consistency_group_snapshot = None
# TODO(Huanxuan Ao): Support for creating from consistency group
# snapshot after adding "consistency_group_snapshot" resource
if parsed_args.consistency_group_source:
consistency_group_id = utils.find_resource(
volume_client.consistencygroups,
parsed_args.consistency_group_source).id
elif parsed_args.consistency_group_snapshot:
consistency_group_snapshot = utils.find_resource(
volume_client.cgsnapshots,
parsed_args.consistency_group_snapshot).id
consistency_group = (
volume_client.consistencygroups.create_from_src(
consistency_group_snapshot,