diff options
-rw-r--r-- | etc/nova/policy.json | 3 | ||||
-rw-r--r-- | nova/api/openstack/compute/plugins/v3/quota_sets.py | 23 | ||||
-rw-r--r-- | nova/tests/api/openstack/compute/plugins/v3/test_quota_sets.py | 34 | ||||
-rw-r--r-- | nova/tests/fake_policy.py | 3 | ||||
-rw-r--r-- | setup.cfg | 1 |
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": "", @@ -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 |