summaryrefslogtreecommitdiff
path: root/openstackclient/volume
diff options
context:
space:
mode:
authorzhiyong.dai <zhiyong.dai@easystack.cn>2016-12-06 19:08:49 +0800
committerzhiyong.dai <zhiyong.dai@easystack.cn>2016-12-13 15:32:04 +0800
commit2f2603d90896d0765e1bb2bb1cfb223fdba75835 (patch)
treefc0d629b2355479898e557b6c1f0558e7d27ad91 /openstackclient/volume
parent29587eaa6661493b7df9357ad818bf058e820730 (diff)
downloadpython-openstackclient-2f2603d90896d0765e1bb2bb1cfb223fdba75835.tar.gz
Add two consistency group commands
Add commands: consistency group add volume consistency group remove volume in volume v2 (v2 only) Change-Id: I70ff287d3b5df78196b8f4b9e50402c471aef284 Implements: bp cinder-command-support Closes-Bug: #1613964
Diffstat (limited to 'openstackclient/volume')
-rw-r--r--openstackclient/volume/v2/consistency_group.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/openstackclient/volume/v2/consistency_group.py b/openstackclient/volume/v2/consistency_group.py
index 2f4f3c95..0a932f84 100644
--- a/openstackclient/volume/v2/consistency_group.py
+++ b/openstackclient/volume/v2/consistency_group.py
@@ -27,6 +27,60 @@ from openstackclient.i18n import _
LOG = logging.getLogger(__name__)
+def _find_volumes(parsed_args_volumes, volume_client):
+ result = 0
+ uuid = ''
+ for volume in parsed_args_volumes:
+ try:
+ volume_id = utils.find_resource(
+ volume_client.volumes, volume).id
+ uuid += volume_id + ','
+ except Exception as e:
+ result += 1
+ LOG.error(_("Failed to find volume with "
+ "name or ID '%(volume)s':%(e)s")
+ % {'volume': volume, 'e': e})
+
+ return result, uuid
+
+
+class AddVolumeToConsistencyGroup(command.Command):
+ _description = _("Add volume(s) to consistency group")
+
+ def get_parser(self, prog_name):
+ parser = super(AddVolumeToConsistencyGroup, self).get_parser(prog_name)
+ parser.add_argument(
+ 'consistency_group',
+ metavar="<consistency-group>",
+ help=_('Consistency group to contain <volume> (name or ID)'),
+ )
+ parser.add_argument(
+ 'volumes',
+ metavar='<volume>',
+ nargs='+',
+ help=_('Volume(s) to add to <consistency-group> (name or ID) '
+ '(repeat option to add multiple volumes)'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ volume_client = self.app.client_manager.volume
+ result, add_uuid = _find_volumes(parsed_args.volumes, volume_client)
+
+ if result > 0:
+ total = len(parsed_args.volumes)
+ LOG.error(_("%(result)s of %(total)s volumes failed "
+ "to add.") % {'result': result, 'total': total})
+
+ if add_uuid:
+ add_uuid = add_uuid.rstrip(',')
+ consistency_group_id = utils.find_resource(
+ volume_client.consistencygroups,
+ parsed_args.consistency_group).id
+ volume_client.consistencygroups.update(
+ consistency_group_id, add_volumes=add_uuid)
+
+
class CreateConsistencyGroup(command.ShowOne):
_description = _("Create new consistency group.")
@@ -188,6 +242,44 @@ class ListConsistencyGroup(command.Lister):
for s in consistency_groups))
+class RemoveVolumeFromConsistencyGroup(command.Command):
+ _description = _("Remove volume(s) from consistency group")
+
+ def get_parser(self, prog_name):
+ parser = \
+ super(RemoveVolumeFromConsistencyGroup, self).get_parser(prog_name)
+ parser.add_argument(
+ 'consistency_group',
+ metavar="<consistency-group>",
+ help=_('Consistency group containing <volume> (name or ID)'),
+ )
+ parser.add_argument(
+ 'volumes',
+ metavar='<volume>',
+ nargs='+',
+ help=_('Volume(s) to remove from <consistency-group> (name or ID) '
+ '(repeat option to remove multiple volumes)'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ volume_client = self.app.client_manager.volume
+ result, remove_uuid = _find_volumes(parsed_args.volumes, volume_client)
+
+ if result > 0:
+ total = len(parsed_args.volumes)
+ LOG.error(_("%(result)s of %(total)s volumes failed "
+ "to remove.") % {'result': result, 'total': total})
+
+ if remove_uuid:
+ remove_uuid = remove_uuid.rstrip(',')
+ consistency_group_id = utils.find_resource(
+ volume_client.consistencygroups,
+ parsed_args.consistency_group).id
+ volume_client.consistencygroups.update(
+ consistency_group_id, remove_volumes=remove_uuid)
+
+
class SetConsistencyGroup(command.Command):
_description = _("Set consistency group properties")