From ed809e059a85f70e8f89d1a59e533064b9e9143e Mon Sep 17 00:00:00 2001
From: Steve Martinelli <stevemar@ca.ibm.com>
Date: Sun, 3 Mar 2013 00:42:42 -0600
Subject: [PATCH] Add quota v1 support for volume

added dhellmann's suggestions
created entry points in setup.py
added show/set/list quotas for v1 volume

Change-Id: I8ed6a9518007b31cafeaa70a54d5bf54a549195b
---
 openstackclient/volume/v1/quota.py | 113 +++++++++++++++++++++++++++++
 setup.py                           |   3 +
 2 files changed, 116 insertions(+)
 create mode 100644 openstackclient/volume/v1/quota.py

diff --git a/openstackclient/volume/v1/quota.py b/openstackclient/volume/v1/quota.py
new file mode 100644
index 0000000000..ae6c50f5e3
--- /dev/null
+++ b/openstackclient/volume/v1/quota.py
@@ -0,0 +1,113 @@
+#   Copyright 2012-2013 OpenStack, LLC.
+#
+#   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 v1 Quota action implementations"""
+
+import logging
+
+from cliff import command
+from cliff import show
+
+from openstackclient.common import utils
+
+
+class ListQuota(show.ShowOne):
+    """List quota command"""
+
+    api = 'volume'
+    log = logging.getLogger(__name__ + '.ListQuota')
+
+    def get_parser(self, prog_name):
+        parser = super(ListQuota, self).get_parser(prog_name)
+        parser.add_argument(
+            'tenant',
+            metavar='<tenant>',
+            help='ID of tenant to list the default quotas for')
+        return parser
+
+    def take_action(self, parsed_args):
+        self.log.debug('take_action(%s)' % parsed_args)
+        volume_client = self.app.client_manager.volume
+        defaults = volume_client.quotas.defaults(parsed_args.tenant)
+
+        return zip(*sorted(defaults._info.iteritems()))
+
+
+class SetQuota(command.Command):
+    """Set quota command"""
+
+    api = 'volume'
+    log = logging.getLogger(__name__ + '.SetQuota')
+
+    def get_parser(self, prog_name):
+        parser = super(SetQuota, self).get_parser(prog_name)
+        parser.add_argument(
+            'tenant',
+            metavar='<tenant>',
+            help='ID of tenant to set the quotas for')
+        parser.add_argument(
+            '--volumes',
+            metavar='<new-volumes>',
+            type=int,
+            help='New value for the volumes quota')
+        parser.add_argument(
+            '--gigabytes',
+            metavar='<new-gigabytes>',
+            type=int,
+            help='New value for the gigabytes quota')
+        return parser
+
+    def take_action(self, parsed_args):
+        self.log.debug('take_action(%s)' % parsed_args)
+
+        kwargs = {}
+        if parsed_args.volumes:
+            kwargs['volumes'] = parsed_args.volumes
+        if parsed_args.gigabytes:
+            kwargs['gigabytes'] = parsed_args.gigabytes
+
+        if kwargs == {}:
+            stdout.write("Quota not updated, no arguments present")
+            return
+
+        volume_client = self.app.client_manager.volume
+        volume_client.quotas.update(parsed_args.tenant,
+                                    parsed_args.volumes,
+                                    parsed_args.gigabytes)
+
+        return
+
+
+class ShowQuota(show.ShowOne):
+    """Show quota command"""
+
+    api = 'volume'
+    log = logging.getLogger(__name__ + '.ShowQuota')
+
+    def get_parser(self, prog_name):
+        parser = super(ShowQuota, self).get_parser(prog_name)
+        parser.add_argument(
+            'tenant',
+            metavar='<tenant>',
+            help='ID of tenant to list the quotas for')
+        return parser
+
+    def take_action(self, parsed_args):
+        self.log.debug('take_action(%s)' % parsed_args)
+        volume_client = self.app.client_manager.volume
+        quota = utils.find_resource(volume_client.quotas,
+                                    parsed_args.tenant)
+
+        return zip(*sorted(quota._info.iteritems()))
diff --git a/setup.py b/setup.py
index 3ad427f5bc..6f3e407931 100644
--- a/setup.py
+++ b/setup.py
@@ -147,6 +147,9 @@ setuptools.setup(
             'create_type=openstackclient.volume.v1.type:CreateType',
             'delete_type=openstackclient.volume.v1.type:DeleteType',
             'list_type=openstackclient.volume.v1.type:ListType',
+            'show_quota=openstackclient.volume.v1.quota:ShowQuota',
+            'list_quota=openstackclient.volume.v1.quota:ListQuota',
+            'set_quota=openstackclient.volume.v1.quota:SetQuota',
         ]
     }
 )