summaryrefslogtreecommitdiff
path: root/openstackclient/volume
diff options
context:
space:
mode:
authorAmey Bhide <abhide@vmware.com>2015-05-27 12:31:59 -0700
committerAmey Bhide <abhide@vmware.com>2015-05-30 11:26:14 -0700
commit5361652d8f0a90b5a2ef296a9fb718ac3d397ea9 (patch)
tree5f4934bbc92b4f86eab54072e967f50a81e0e693 /openstackclient/volume
parent211c14c638b9bf393932be42d4f04a4dd12a84bc (diff)
downloadpython-openstackclient-5361652d8f0a90b5a2ef296a9fb718ac3d397ea9.tar.gz
Add support for volume v2 API
Added following commands for volume V2 API: volume show volume delete volume type show volume type delete snapshot show snapshot delete backup show backup delete Implements: blueprint volume-v2 Change-Id: I68bd303c194f304ad15f899d335b72a8bf3ebe10
Diffstat (limited to 'openstackclient/volume')
-rw-r--r--openstackclient/volume/client.py3
-rw-r--r--openstackclient/volume/v2/__init__.py0
-rw-r--r--openstackclient/volume/v2/backup.py70
-rw-r--r--openstackclient/volume/v2/snapshot.py71
-rw-r--r--openstackclient/volume/v2/volume.py83
-rw-r--r--openstackclient/volume/v2/volume_type.py68
6 files changed, 294 insertions, 1 deletions
diff --git a/openstackclient/volume/client.py b/openstackclient/volume/client.py
index a7b64def..1038c407 100644
--- a/openstackclient/volume/client.py
+++ b/openstackclient/volume/client.py
@@ -23,7 +23,8 @@ DEFAULT_VOLUME_API_VERSION = '1'
API_VERSION_OPTION = 'os_volume_api_version'
API_NAME = "volume"
API_VERSIONS = {
- "1": "cinderclient.v1.client.Client"
+ "1": "cinderclient.v1.client.Client",
+ "2": "cinderclient.v2.client.Client"
}
diff --git a/openstackclient/volume/v2/__init__.py b/openstackclient/volume/v2/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/openstackclient/volume/v2/__init__.py
diff --git a/openstackclient/volume/v2/backup.py b/openstackclient/volume/v2/backup.py
new file mode 100644
index 00000000..bf2ea3a6
--- /dev/null
+++ b/openstackclient/volume/v2/backup.py
@@ -0,0 +1,70 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""Volume v2 Backup action implementations"""
+
+import logging
+
+from cliff import command
+from cliff import show
+import six
+
+from openstackclient.common import utils
+
+
+class DeleteBackup(command.Command):
+ """Delete backup(s)"""
+
+ log = logging.getLogger(__name__ + ".DeleteBackup")
+
+ def get_parser(self, prog_name):
+ parser = super(DeleteBackup, self).get_parser(prog_name)
+ parser.add_argument(
+ "backups",
+ metavar="<backup>",
+ nargs="+",
+ help="Backup(s) to delete (name or ID)"
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action: (%s)", parsed_args)
+ volume_client = self.app.client_manager.volume
+ for backup in parsed_args.backups:
+ backup_id = utils.find_resource(
+ volume_client.backups, backup).id
+ volume_client.backups.delete(backup_id)
+ return
+
+
+class ShowBackup(show.ShowOne):
+ """Display backup details"""
+
+ log = logging.getLogger(__name__ + ".ShowBackup")
+
+ def get_parser(self, prog_name):
+ parser = super(ShowBackup, self).get_parser(prog_name)
+ parser.add_argument(
+ "backup",
+ metavar="<backup>",
+ help="Backup to display (name or ID)")
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action: (%s)", parsed_args)
+ volume_client = self.app.client_manager.volume
+ backup = utils.find_resource(volume_client.backups,
+ parsed_args.backup)
+ backup._info.pop("links", None)
+ return zip(*sorted(six.iteritems(backup._info)))
diff --git a/openstackclient/volume/v2/snapshot.py b/openstackclient/volume/v2/snapshot.py
new file mode 100644
index 00000000..a6b02b63
--- /dev/null
+++ b/openstackclient/volume/v2/snapshot.py
@@ -0,0 +1,71 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""Volume v2 snapshot action implementations"""
+
+import logging
+
+from cliff import command
+from cliff import show
+import six
+
+from openstackclient.common import utils
+
+
+class DeleteSnapshot(command.Command):
+ """Delete volume snapshot(s)"""
+
+ log = logging.getLogger(__name__ + ".DeleteSnapshot")
+
+ def get_parser(self, prog_name):
+ parser = super(DeleteSnapshot, self).get_parser(prog_name)
+ parser.add_argument(
+ "snapshots",
+ metavar="<snapshot>",
+ nargs="+",
+ help="Snapsho(s) to delete (name or ID)"
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action: (%s)", parsed_args)
+ volume_client = self.app.client_manager.volume
+ for snapshot in parsed_args.snapshots:
+ snapshot_id = utils.find_resource(
+ volume_client.volume_snapshots, snapshot).id
+ volume_client.volume_snapshots.delete(snapshot_id)
+ return
+
+
+class ShowSnapshot(show.ShowOne):
+ """Display snapshot details"""
+
+ log = logging.getLogger(__name__ + ".ShowSnapshot")
+
+ def get_parser(self, prog_name):
+ parser = super(ShowSnapshot, self).get_parser(prog_name)
+ parser.add_argument(
+ "snapshot",
+ metavar="<snapshot>",
+ help="Snapshot to display (name or ID)"
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action: (%s)", parsed_args)
+ volume_client = self.app.client_manager.volume
+ snapshot = utils.find_resource(
+ volume_client.volume_snapshots, parsed_args.snapshot)
+ snapshot = volume_client.volume_snapshots.get(snapshot.id)
+ return zip(*sorted(six.iteritems(snapshot._info)))
diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py
new file mode 100644
index 00000000..e50a6f0c
--- /dev/null
+++ b/openstackclient/volume/v2/volume.py
@@ -0,0 +1,83 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""Volume V2 Volume action implementations"""
+
+import logging
+
+from cliff import command
+from cliff import show
+import six
+
+from openstackclient.common import utils
+
+
+class DeleteVolume(command.Command):
+ """Delete volume(s)"""
+
+ log = logging.getLogger(__name__ + ".DeleteVolume")
+
+ def get_parser(self, prog_name):
+ parser = super(DeleteVolume, self).get_parser(prog_name)
+ parser.add_argument(
+ "volumes",
+ metavar="<volume>",
+ nargs="+",
+ help="Volume(s) to delete (name or ID)"
+ )
+ parser.add_argument(
+ "--force",
+ dest="force",
+ action="store_true",
+ default=False,
+ help="Attempt forced removal of volume(s), regardless of state "
+ "(defaults to False"
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action: (%s)", parsed_args)
+ volume_client = self.app.client_manager.volume
+ for volume in parsed_args.volumes:
+ volume_obj = utils.find_resource(
+ volume_client.volumes, volume)
+ if parsed_args.force:
+ volume_client.volumes.force_delete(volume_obj.id)
+ else:
+ volume_client.volumes.delete(volume_obj.id)
+ return
+
+
+class ShowVolume(show.ShowOne):
+ """Display volume details"""
+
+ log = logging.getLogger(__name__ + '.ShowVolume')
+
+ def get_parser(self, prog_name):
+ parser = super(ShowVolume, self).get_parser(prog_name)
+ parser.add_argument(
+ 'volume',
+ metavar="<volume-id>",
+ help="Volume to display (name or ID)"
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug('take_action(%s)', parsed_args)
+ volume_client = self.app.client_manager.volume
+ volume = utils.find_resource(volume_client.volumes, parsed_args.volume)
+
+ # Remove key links from being displayed
+ volume._info.pop("links", None)
+ return zip(*sorted(six.iteritems(volume._info)))
diff --git a/openstackclient/volume/v2/volume_type.py b/openstackclient/volume/v2/volume_type.py
new file mode 100644
index 00000000..ae5cc8b8
--- /dev/null
+++ b/openstackclient/volume/v2/volume_type.py
@@ -0,0 +1,68 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""Volume v2 Type action implementations"""
+
+import logging
+
+from cliff import command
+from cliff import show
+import six
+
+from openstackclient.common import utils
+
+
+class DeleteVolumeType(command.Command):
+ """Delete volume type"""
+
+ log = logging.getLogger(__name__ + ".DeleteVolumeType")
+
+ def get_parser(self, prog_name):
+ parser = super(DeleteVolumeType, self).get_parser(prog_name)
+ parser.add_argument(
+ "volume_type",
+ metavar="<volume-type>",
+ help="Volume type to delete (name or ID)"
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.info("take_action: (%s)", parsed_args)
+ volume_client = self.app.client_manager.volume
+ volume_type = utils.find_resource(
+ volume_client.volume_types, parsed_args.volume_type)
+ volume_client.volume_types.delete(volume_type.id)
+ return
+
+
+class ShowVolumeType(show.ShowOne):
+ """Display volume type details"""
+
+ log = logging.getLogger(__name__ + ".ShowVolumeType")
+
+ def get_parser(self, prog_name):
+ parser = super(ShowVolumeType, self).get_parser(prog_name)
+ parser.add_argument(
+ "volume_type",
+ metavar="<volume-type>",
+ help="Volume type to display (name or ID)"
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug("take_action: (%s)", parsed_args)
+ volume_client = self.app.client_manager.volume
+ volume_type = utils.find_resource(
+ volume_client.volume_types, parsed_args.volume_type)
+ return zip(*sorted(six.iteritems(volume_type._info)))