summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorMark Washenberger <mark.washenberger@rackspace.com>2011-05-20 00:24:35 -0400
committerMark Washenberger <mark.washenberger@rackspace.com>2011-05-20 00:24:35 -0400
commit1c485a515b299551c44bd4411d82be1cccf5f4bd (patch)
tree870b348d047a7e3fb91cbb0f638d60af7128370a /nova
parent44d90bd1f77f9b2297879263f74567c502944ba4 (diff)
add absolute limits support to 1.0 api as well
Diffstat (limited to 'nova')
-rw-r--r--nova/api/openstack/views/limits.py44
-rw-r--r--nova/tests/api/openstack/test_limits.py31
2 files changed, 43 insertions, 32 deletions
diff --git a/nova/api/openstack/views/limits.py b/nova/api/openstack/views/limits.py
index dd7681db4..33be12c0c 100644
--- a/nova/api/openstack/views/limits.py
+++ b/nova/api/openstack/views/limits.py
@@ -46,7 +46,26 @@ class ViewBuilder(object):
return output
def _build_absolute_limits(self, absolute_limits):
- raise NotImplementedError()
+ """Builder for absolute limits
+
+ absolute_limits should be given as a dict of limits.
+ For example: {"ram": 512, "gigabytes": 1024}.
+
+ """
+ limit_names = {
+ "ram": ["maxTotalRAMSize"],
+ "instances": ["maxTotalInstances"],
+ "cores": ["maxTotalCores"],
+ "metadata_items": ["maxServerMeta", "maxImageMeta"],
+ "injected_files": ["maxPersonality"],
+ "injected_file_content_bytes": ["maxPersonalitySize"],
+ }
+ limits = {}
+ for name, value in absolute_limits.iteritems():
+ if name in limit_names and value is not None:
+ for name in limit_names[name]:
+ limits[name] = value
+ return limits
def _build_rate_limits(self, rate_limits):
raise NotImplementedError()
@@ -72,9 +91,6 @@ class ViewBuilderV10(ViewBuilder):
"resetTime": rate_limit["resetTime"],
}
- def _build_absolute_limits(self, absolute_limit):
- return {}
-
class ViewBuilderV11(ViewBuilder):
"""Openstack API v1.1 limits view builder."""
@@ -113,23 +129,3 @@ class ViewBuilderV11(ViewBuilder):
"unit": rate_limit["unit"],
"next-available": rate_limit["resetTime"],
}
-
- def _build_absolute_limits(self, absolute_limits):
- """Builder for absolute limits
-
- absolute_limits should be given as a dict of limits.
- For example: {"ram": 512, "gigabytes": 1024}.
-
- """
- limit_names = {
- "ram": ["maxTotalRAMSize"],
- "instances": ["maxTotalInstances"],
- "cores": ["maxTotalCores"],
- "metadata_items": ["maxServerMeta", "maxImageMeta"],
- }
- limits = {}
- for name, value in absolute_limits.iteritems():
- if name in limit_names and value is not None:
- for name in limit_names[name]:
- limits[name] = value
- return limits
diff --git a/nova/tests/api/openstack/test_limits.py b/nova/tests/api/openstack/test_limits.py
index 5e5ee1420..dde4451b4 100644
--- a/nova/tests/api/openstack/test_limits.py
+++ b/nova/tests/api/openstack/test_limits.py
@@ -48,6 +48,13 @@ class BaseLimitTestSuite(unittest.TestCase):
self.time = 0.0
self.stubs = stubout.StubOutForTesting()
self.stubs.Set(limits.Limit, "_get_time", self._get_time)
+ self.absolute_limits = {}
+
+ def stub_get_project_quotas(context, project_id):
+ return self.absolute_limits
+
+ self.stubs.Set(nova.quota, "get_project_quotas",
+ stub_get_project_quotas)
def tearDown(self):
"""Run after each test."""
@@ -106,6 +113,7 @@ class LimitsControllerV10Test(BaseLimitTestSuite):
"""Test getting limit details in JSON."""
request = self._get_index_request()
request = self._populate_limits(request)
+ self.absolute_limits = {'ram': 51200, 'instances': 20}
response = request.get_response(self.controller)
expected = {
"limits": {
@@ -127,7 +135,10 @@ class LimitsControllerV10Test(BaseLimitTestSuite):
"remaining": 5,
"unit": "HOUR",
}],
- "absolute": {},
+ "absolute": {
+ "maxTotalRAMSize": 51200,
+ "maxTotalInstances": 20,
+ },
},
}
body = json.loads(response.body)
@@ -182,13 +193,6 @@ class LimitsControllerV11Test(BaseLimitTestSuite):
"""Run before each test."""
BaseLimitTestSuite.setUp(self)
self.controller = limits.LimitsControllerV11()
- self.absolute_limits = {}
-
- def stub_get_project_quotas(context, project_id):
- return self.absolute_limits
-
- self.stubs.Set(nova.quota, "get_project_quotas",
- stub_get_project_quotas)
def _get_index_request(self, accept_header="application/json"):
"""Helper to set routing arguments."""
@@ -316,6 +320,17 @@ class LimitsControllerV11Test(BaseLimitTestSuite):
}
self._test_index_absolute_limits_json(expected)
+ def test_index_absolute_injected_files(self):
+ self.absolute_limits = {
+ 'injected_files': 17,
+ 'injected_file_content_bytes': 86753,
+ }
+ expected = {
+ 'maxPersonality': 17,
+ 'maxPersonalitySize': 86753,
+ }
+ self._test_index_absolute_limits_json(expected)
+
class LimitMiddlewareTest(BaseLimitTestSuite):
"""