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:
parent
158dbe124a
commit
3e9109bc7c
doc/source/command-objects
openstackclient
@ -13,7 +13,7 @@ Create new consistency group.
|
|||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
os consistency group create
|
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>]
|
[--description <description>]
|
||||||
[--availability-zone <availability-zone>]
|
[--availability-zone <availability-zone>]
|
||||||
[<name>]
|
[<name>]
|
||||||
@ -26,6 +26,10 @@ Create new consistency group.
|
|||||||
|
|
||||||
Existing consistency group (name or ID)
|
Existing consistency group (name or ID)
|
||||||
|
|
||||||
|
.. option:: --consistency-group-snapshot <consistency-group-snapshot>
|
||||||
|
|
||||||
|
Existing consistency group snapshot (name or ID)
|
||||||
|
|
||||||
.. option:: --description <description>
|
.. option:: --description <description>
|
||||||
|
|
||||||
Description of this consistency group
|
Description of this consistency group
|
||||||
|
@ -32,6 +32,10 @@ class TestConsistencyGroup(volume_fakes.TestVolume):
|
|||||||
self.app.client_manager.volume.consistencygroups)
|
self.app.client_manager.volume.consistencygroups)
|
||||||
self.consistencygroups_mock.reset_mock()
|
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 = self.app.client_manager.volume.volume_types
|
||||||
self.types_mock.reset_mock()
|
self.types_mock.reset_mock()
|
||||||
|
|
||||||
@ -41,6 +45,11 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
|
|||||||
volume_type = volume_fakes.FakeType.create_one_type()
|
volume_type = volume_fakes.FakeType.create_one_type()
|
||||||
new_consistency_group = (
|
new_consistency_group = (
|
||||||
volume_fakes.FakeConsistencyGroup.create_one_consistency_group())
|
volume_fakes.FakeConsistencyGroup.create_one_consistency_group())
|
||||||
|
consistency_group_snapshot = (
|
||||||
|
volume_fakes.
|
||||||
|
FakeConsistencyGroupSnapshot.
|
||||||
|
create_one_consistency_group_snapshot()
|
||||||
|
)
|
||||||
|
|
||||||
columns = (
|
columns = (
|
||||||
'availability_zone',
|
'availability_zone',
|
||||||
@ -70,6 +79,8 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
|
|||||||
self.consistencygroups_mock.get.return_value = (
|
self.consistencygroups_mock.get.return_value = (
|
||||||
self.new_consistency_group)
|
self.new_consistency_group)
|
||||||
self.types_mock.get.return_value = self.volume_type
|
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
|
# Get the command object to test
|
||||||
self.cmd = consistency_group.CreateConsistencyGroup(self.app, None)
|
self.cmd = consistency_group.CreateConsistencyGroup(self.app, None)
|
||||||
@ -164,6 +175,34 @@ class TestConsistencyGroupCreate(TestConsistencyGroup):
|
|||||||
self.assertEqual(self.columns, columns)
|
self.assertEqual(self.columns, columns)
|
||||||
self.assertEqual(self.data, data)
|
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):
|
class TestConsistencyGroupDelete(TestConsistencyGroup):
|
||||||
|
|
||||||
|
@ -94,6 +94,11 @@ class CreateConsistencyGroup(command.ShowOne):
|
|||||||
metavar="<consistency-group>",
|
metavar="<consistency-group>",
|
||||||
help=_("Existing consistency group (name or ID)")
|
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(
|
parser.add_argument(
|
||||||
"--description",
|
"--description",
|
||||||
metavar="<description>",
|
metavar="<description>",
|
||||||
@ -120,17 +125,23 @@ class CreateConsistencyGroup(command.ShowOne):
|
|||||||
description=parsed_args.description,
|
description=parsed_args.description,
|
||||||
availability_zone=parsed_args.availability_zone
|
availability_zone=parsed_args.availability_zone
|
||||||
)
|
)
|
||||||
elif parsed_args.consistency_group_source:
|
else:
|
||||||
if parsed_args.availability_zone:
|
if parsed_args.availability_zone:
|
||||||
msg = _("'--availability-zone' option will not work "
|
msg = _("'--availability-zone' option will not work "
|
||||||
"if creating consistency group from source")
|
"if creating consistency group from source")
|
||||||
LOG.warning(msg)
|
LOG.warning(msg)
|
||||||
consistency_group_id = utils.find_resource(
|
|
||||||
volume_client.consistencygroups,
|
consistency_group_id = None
|
||||||
parsed_args.consistency_group_source).id
|
|
||||||
consistency_group_snapshot = None
|
consistency_group_snapshot = None
|
||||||
# TODO(Huanxuan Ao): Support for creating from consistency group
|
if parsed_args.consistency_group_source:
|
||||||
# snapshot after adding "consistency_group_snapshot" resource
|
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 = (
|
consistency_group = (
|
||||||
volume_client.consistencygroups.create_from_src(
|
volume_client.consistencygroups.create_from_src(
|
||||||
consistency_group_snapshot,
|
consistency_group_snapshot,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user