Port quota classes extension to v3 API Part 2
Ports the quota classes extensions and the corresponding unittests to the v3 framework. Adds quota class id to data returned by update which makes it consistent with the behaviour of show. Partially implements blueprint nova-v3-api Change-Id: I7ca95e332933872ff20d719bf07dd10364510cbe
This commit is contained in:
5 changed files with 25 additions and 26 deletions
@@ -99,6 +99,7 @@
"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:v3:os-quota-class-sets": "",
"compute_extension:rescue": "",
"compute_extension:v3:os-rescue": "",
"compute_extension:security_group_default_rules": "rule:admin_api",
@@ -26,8 +26,8 @@ from nova import quota
QUOTAS = quota.QUOTAS
authorize = extensions.extension_authorizer('compute', 'quota_classes')
ALIAS = "os-quota-class-sets"
authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS)
class QuotaClassTemplate(xmlutil.TemplateBuilder):
@@ -80,24 +80,24 @@ class QuotaClassSetsController(object):
db.quota_class_create(context, quota_class, key, value)
except exception.AdminRequired:
raise webob.exc.HTTPForbidden()
return {'quota_class_set': QUOTAS.get_class_quotas(context,
quota_class)}
return self._format_quota_set(
quota_class,
QUOTAS.get_class_quotas(context, quota_class))
class Quota_classes(extensions.ExtensionDescriptor):
class QuotaClasses(extensions.V3APIExtensionBase):
"""Quota classes management support."""
name = "QuotaClasses"
alias = "os-quota-class-sets"
alias = ALIAS
namespace = ("http://docs.openstack.org/compute/ext/"
"quota-classes-sets/api/v1.1")
updated = "2012年03月12日T00:00:00+00:00"
"quota-class-sets/api/v3")
version = 1
def get_resources(self):
resources = []
res = extensions.ResourceExtension('os-quota-class-sets',
QuotaClassSetsController())
resources.append(res)
resources = [
extensions.ResourceExtension(ALIAS, QuotaClassSetsController())]
return resources
def get_controller_extensions(self):
return []
@@ -16,7 +16,7 @@
from lxml import etree
import webob
from nova.api.openstack.compute.contrib import quota_classes
from nova.api.openstack.compute.plugins.v3 import quota_classes
from nova.api.openstack import wsgi
from nova import test
from nova.tests.api.openstack import fakes
@@ -74,16 +74,14 @@ class QuotaClassSetsTest(test.TestCase):
self.assertEqual(qs['key_pairs'], 100)
def test_quotas_show_as_admin(self):
req = fakes.HTTPRequest.blank(
'/v2/fake4/os-quota-class-sets/test_class',
use_admin_context=True)
req = fakes.HTTPRequestV3.blank('/os-quota-class-sets/test_class',
use_admin_context=True)
res_dict = self.controller.show(req, 'test_class')
self.assertEqual(res_dict, quota_set('test_class'))
def test_quotas_show_as_unauthorized_user(self):
req = fakes.HTTPRequest.blank(
'/v2/fake4/os-quota-class-sets/test_class')
req = fakes.HTTPRequestV3.blank('/os-quota-class-sets/test_class')
self.assertRaises(webob.exc.HTTPForbidden, self.controller.show,
req, 'test_class')
@@ -91,16 +89,15 @@ class QuotaClassSetsTest(test.TestCase):
body = {'quota_class_set': {'instances': 50, 'cores': 50,
'ram': 51200, 'floating_ips': 10,
'fixed_ips': -1, 'metadata_items': 128,
'injected_files': 5,
'injected_files': 5, 'id': 'test_class',
'injected_file_content_bytes': 10240,
'injected_file_path_bytes': 255,
'security_groups': 10,
'security_group_rules': 20,
'key_pairs': 100}}
req = fakes.HTTPRequest.blank(
'/v2/fake4/os-quota-class-sets/test_class',
use_admin_context=True)
req = fakes.HTTPRequestV3.blank('/os-quota-class-sets/test_class',
use_admin_context=True)
res_dict = self.controller.update(req, 'test_class', body)
self.assertEqual(res_dict, body)
@@ -116,8 +113,7 @@ class QuotaClassSetsTest(test.TestCase):
'key_pairs': 100,
}}
req = fakes.HTTPRequest.blank(
'/v2/fake4/os-quota-class-sets/test_class')
req = fakes.HTTPRequestV3.blank('/os-quota-class-sets/test_class')
self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
req, 'test_class', body)
@@ -174,6 +174,7 @@ policy_data = """
"compute_extension:v3:os-quota-sets:update": "",
"compute_extension:v3:os-quota-sets:delete": "",
"compute_extension:quota_classes": "",
"compute_extension:v3:os-quota-class-sets": "",
"compute_extension:rescue": "",
"compute_extension:v3:os-rescue": "",
"compute_extension:security_group_default_rules": "",
@@ -66,6 +66,7 @@ nova.api.v3.extensions =
images = nova.api.openstack.compute.plugins.v3.images:Images
ips = nova.api.openstack.compute.plugins.v3.ips:IPs
keypairs = nova.api.openstack.compute.plugins.v3.keypairs:Keypairs
quota_classes = nova.api.openstack.compute.plugins.v3.quota_classes:QuotaClasses
quota_sets = nova.api.openstack.compute.plugins.v3.quota_sets:QuotaSets
rescue = nova.api.openstack.compute.plugins.v3.rescue:Rescue
server_diagnostics = nova.api.openstack.compute.plugins.v3.server_diagnostics:ServerDiagnostics
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.