summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/nova/policy.json3
-rw-r--r--nova/api/openstack/compute/plugins/v3/quota_sets.py23
-rw-r--r--nova/tests/api/openstack/compute/plugins/v3/test_quota_sets.py34
-rw-r--r--nova/tests/fake_policy.py3
-rw-r--r--setup.cfg1
5 files changed, 39 insertions, 25 deletions
diff --git a/etc/nova/policy.json b/etc/nova/policy.json
index 4b2f5b09d..7f27e2d5d 100644
--- a/etc/nova/policy.json
+++ b/etc/nova/policy.json
@@ -91,6 +91,9 @@
"compute_extension:quotas:show": "",
"compute_extension:quotas:update": "rule:admin_api",
"compute_extension:quotas:delete": "rule:admin_api",
+ "compute_extension:v3:os-quota-sets:show": "",
+ "compute_extension:v3:os-quota-sets:update": "rule:admin_api",
+ "compute_extension:v3:os-quota-sets:delete": "rule:admin_api",
"compute_extension:quota_classes": "",
"compute_extension:rescue": "",
"compute_extension:v3:os-rescue": "",
diff --git a/nova/api/openstack/compute/plugins/v3/quota_sets.py b/nova/api/openstack/compute/plugins/v3/quota_sets.py
index a0740ebe5..67af5d127 100644
--- a/nova/api/openstack/compute/plugins/v3/quota_sets.py
+++ b/nova/api/openstack/compute/plugins/v3/quota_sets.py
@@ -28,14 +28,18 @@ from nova.openstack.common import strutils
from nova import quota
+ALIAS = "os-quota-sets"
QUOTAS = quota.QUOTAS
LOG = logging.getLogger(__name__)
NON_QUOTA_KEYS = ['tenant_id', 'id', 'force']
-authorize_update = extensions.extension_authorizer('compute', 'quotas:update')
-authorize_show = extensions.extension_authorizer('compute', 'quotas:show')
-authorize_delete = extensions.extension_authorizer('compute', 'quotas:delete')
+authorize_update = extensions.extension_authorizer('compute',
+ 'v3:%s:update' % ALIAS)
+authorize_show = extensions.extension_authorizer('compute',
+ 'v3:%s:show' % ALIAS)
+authorize_delete = extensions.extension_authorizer('compute',
+ 'v3:%s:delete' % ALIAS)
class QuotaTemplate(xmlutil.TemplateBuilder):
@@ -188,20 +192,23 @@ class QuotaSetsController(object):
raise webob.exc.HTTPNotFound()
-class Quotas(extensions.ExtensionDescriptor):
+class QuotaSets(extensions.V3APIExtensionBase):
"""Quotas management support."""
name = "Quotas"
- alias = "os-quota-sets"
- namespace = "http://docs.openstack.org/compute/ext/quotas-sets/api/v1.1"
- updated = "2011-08-08T00:00:00+00:00"
+ alias = ALIAS
+ namespace = "http://docs.openstack.org/compute/ext/os-quotas-sets/api/v3"
+ version = 1
def get_resources(self):
resources = []
- res = extensions.ResourceExtension('os-quota-sets',
+ res = extensions.ResourceExtension(ALIAS,
QuotaSetsController(self.ext_mgr),
member_actions={'defaults': 'GET'})
resources.append(res)
return resources
+
+ def get_controller_extensions(self):
+ return []
diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_quota_sets.py b/nova/tests/api/openstack/compute/plugins/v3/test_quota_sets.py
index 979ab3363..6eea01cff 100644
--- a/nova/tests/api/openstack/compute/plugins/v3/test_quota_sets.py
+++ b/nova/tests/api/openstack/compute/plugins/v3/test_quota_sets.py
@@ -19,7 +19,7 @@
from lxml import etree
import webob
-from nova.api.openstack.compute.contrib import quotas
+from nova.api.openstack.compute.plugins.v3 import quota_sets as quotas
from nova.api.openstack import extensions
from nova.api.openstack import wsgi
from nova import context as context_maker
@@ -77,9 +77,9 @@ class QuotaSetsTest(test.TestCase):
self.assertEqual(qs['key_pairs'], 100)
def test_quotas_defaults(self):
- uri = '/v2/fake_tenant/os-quota-sets/fake_tenant/defaults'
+ uri = '/os-quota-sets/fake_tenant/defaults'
- req = fakes.HTTPRequest.blank(uri)
+ req = fakes.HTTPRequestV3.blank(uri)
res_dict = self.controller.defaults(req, 'fake_tenant')
expected = {'quota_set': {
@@ -100,14 +100,14 @@ class QuotaSetsTest(test.TestCase):
self.assertEqual(res_dict, expected)
def test_quotas_show_as_admin(self):
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/1234',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/1234',
use_admin_context=True)
res_dict = self.controller.show(req, 1234)
self.assertEqual(res_dict, quota_set('1234'))
def test_quotas_show_as_unauthorized_user(self):
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/1234')
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/1234')
self.assertRaises(webob.exc.HTTPForbidden, self.controller.show,
req, 1234)
@@ -124,7 +124,7 @@ class QuotaSetsTest(test.TestCase):
'security_group_rules': 20,
'key_pairs': 100, 'fixed_ips': -1}}
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me',
use_admin_context=True)
res_dict = self.controller.update(req, 'update_me', body)
@@ -142,7 +142,7 @@ class QuotaSetsTest(test.TestCase):
'security_group_rules': 20,
'key_pairs': 100}}
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me')
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me')
self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
req, 'update_me', body)
@@ -154,7 +154,7 @@ class QuotaSetsTest(test.TestCase):
'metadata_items': -2, 'injected_files': -2,
'injected_file_content_bytes': -2}}
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me',
use_admin_context=True)
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
req, 'update_me', body)
@@ -167,7 +167,7 @@ class QuotaSetsTest(test.TestCase):
'metadata_items': -2, 'injected_files': -2,
'injected_file_content_bytes': -2}}
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me',
use_admin_context=True)
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
req, 'update_me', body)
@@ -194,7 +194,7 @@ class QuotaSetsTest(test.TestCase):
'security_groups': 10,
'security_group_rules': 20,
'key_pairs': 100}}
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me',
use_admin_context=True)
self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(True)
self.mox.ReplayAll()
@@ -222,7 +222,7 @@ class QuotaSetsTest(test.TestCase):
'security_groups': 10,
'security_group_rules': 20,
'key_pairs': 100}}
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me',
use_admin_context=True)
self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(True)
self.mox.ReplayAll()
@@ -240,7 +240,7 @@ class QuotaSetsTest(test.TestCase):
'security_groups': 10,
'security_group_rules': 20,
'key_pairs': 100}}
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me',
use_admin_context=True)
self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(True)
self.mox.ReplayAll()
@@ -250,20 +250,20 @@ class QuotaSetsTest(test.TestCase):
def test_delete_quotas_when_extension_not_loaded(self):
self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(False)
self.mox.ReplayAll()
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/1234')
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/1234')
self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,
req, 1234)
def test_quotas_delete_as_unauthorized_user(self):
self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(True)
self.mox.ReplayAll()
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/1234')
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/1234')
self.assertRaises(webob.exc.HTTPForbidden, self.controller.delete,
req, 1234)
def test_quotas_delete_as_admin(self):
context = context_maker.get_admin_context()
- self.req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/1234')
+ self.req = fakes.HTTPRequestV3.blank('/os-quota-sets/1234')
self.req.environ['nova.context'] = context
self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(True)
self.mox.StubOutWithMock(quota.QUOTAS,
@@ -371,7 +371,7 @@ class ExtendedQuotasTest(test.TestCase):
self.stubs.Set(quotas.QuotaSetsController, '_get_quotas',
fake_get_quotas)
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me',
use_admin_context=True)
self.ext_mgr.is_loaded('os-extended-quotas').AndReturn(True)
self.mox.ReplayAll()
@@ -382,7 +382,7 @@ class ExtendedQuotasTest(test.TestCase):
def test_quotas_force_update_exceed_in_used(self):
self.stubs.Set(quotas.QuotaSetsController, '_get_quotas',
fake_get_quotas)
- req = fakes.HTTPRequest.blank('/v2/fake4/os-quota-sets/update_me',
+ req = fakes.HTTPRequestV3.blank('/os-quota-sets/update_me',
use_admin_context=True)
expected = {'quota_set': {'ram': 25600, 'instances': 200, 'cores': 10}}
body = {'quota_set': {'ram': 25600,
diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py
index d4264153c..63589848b 100644
--- a/nova/tests/fake_policy.py
+++ b/nova/tests/fake_policy.py
@@ -166,6 +166,9 @@ policy_data = """
"compute_extension:quotas:show": "",
"compute_extension:quotas:update": "",
"compute_extension:quotas:delete": "",
+ "compute_extension:v3:os-quota-sets:show": "",
+ "compute_extension:v3:os-quota-sets:update": "",
+ "compute_extension:v3:os-quota-sets:delete": "",
"compute_extension:quota_classes": "",
"compute_extension:rescue": "",
"compute_extension:v3:os-rescue": "",
diff --git a/setup.cfg b/setup.cfg
index 85c9514f0..e4eb73b48 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -61,6 +61,7 @@ nova.api.v3.extensions =
fixed_ips = nova.api.openstack.compute.plugins.v3.fixed_ips:FixedIPs
ips = nova.api.openstack.compute.plugins.v3.ips:IPs
keypairs = nova.api.openstack.compute.plugins.v3.keypairs:Keypairs
+ quota_sets = nova.api.openstack.compute.plugins.v3.quota_sets:QuotaSets
rescue = nova.api.openstack.compute.plugins.v3.rescue:Rescue
servers = nova.api.openstack.compute.plugins.v3.servers:Servers