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:
Chris Yeoh
2013年06月14日 15:21:20 +09:30
parent 1515fa7bc3
commit c5aa6070e9

View File

@@ -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",

View File

@@ -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 []

View File

@@ -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)

View File

@@ -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": "",

View File

@@ -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
openstack/nova
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.

The note is not visible to the blocked user.