summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-06-27 16:15:47 +0000
committerGerrit Code Review <review@openstack.org>2013-06-27 16:15:47 +0000
commit1020137af149f3abc85e83964cdd863eb4f486a7 (patch)
treeba0632eb06791fdefd816825955f66c772c0b492 /nova
parent6d5e991d51b9e440ab4e22d67157b9492eb50599 (diff)
parentec66193e0363967d8e608606bcee8cdaff999745 (diff)
downloadnova-1020137af149f3abc85e83964cdd863eb4f486a7.tar.gz
nova-1020137af149f3abc85e83964cdd863eb4f486a7.tar.xz
nova-1020137af149f3abc85e83964cdd863eb4f486a7.zip
Merge "Port flavor_access extension to v3 API Part 2"
Diffstat (limited to 'nova')
-rw-r--r--nova/api/openstack/compute/plugins/v3/flavor_access.py34
-rw-r--r--nova/tests/api/openstack/compute/plugins/v3/test_flavor_access.py30
-rw-r--r--nova/tests/fake_policy.py1
3 files changed, 31 insertions, 34 deletions
diff --git a/nova/api/openstack/compute/plugins/v3/flavor_access.py b/nova/api/openstack/compute/plugins/v3/flavor_access.py
index bea92d883..459a4041b 100644
--- a/nova/api/openstack/compute/plugins/v3/flavor_access.py
+++ b/nova/api/openstack/compute/plugins/v3/flavor_access.py
@@ -25,13 +25,13 @@ from nova.api.openstack import xmlutil
from nova.compute import flavors
from nova import exception
-
-authorize = extensions.soft_extension_authorizer('compute', 'flavor_access')
+ALIAS = 'os-flavor-access'
+authorize = extensions.soft_extension_authorizer('compute', 'v3:' + ALIAS)
def make_flavor(elem):
- elem.set('{%s}is_public' % Flavor_access.namespace,
- '%s:is_public' % Flavor_access.alias)
+ elem.set('{%s}is_public' % FlavorAccess.namespace,
+ '%s:is_public' % FlavorAccess.alias)
def make_flavor_access(elem):
@@ -43,8 +43,8 @@ class FlavorTemplate(xmlutil.TemplateBuilder):
def construct(self):
root = xmlutil.TemplateElement('flavor', selector='flavor')
make_flavor(root)
- alias = Flavor_access.alias
- namespace = Flavor_access.namespace
+ alias = FlavorAccess.alias
+ namespace = FlavorAccess.namespace
return xmlutil.SlaveTemplate(root, 1, nsmap={alias: namespace})
@@ -53,8 +53,8 @@ class FlavorsTemplate(xmlutil.TemplateBuilder):
root = xmlutil.TemplateElement('flavors')
elem = xmlutil.SubTemplateElement(root, 'flavor', selector='flavors')
make_flavor(elem)
- alias = Flavor_access.alias
- namespace = Flavor_access.namespace
+ alias = FlavorAccess.alias
+ namespace = FlavorAccess.namespace
return xmlutil.SlaveTemplate(root, 1, nsmap={alias: namespace})
@@ -126,7 +126,7 @@ class FlavorActionController(wsgi.Controller):
return rval
def _extend_flavor(self, flavor_rval, flavor_ref):
- key = "%s:is_public" % (Flavor_access.alias)
+ key = "%s:is_public" % (FlavorAccess.alias)
flavor_rval[key] = flavor_ref['is_public']
@wsgi.extends
@@ -197,25 +197,21 @@ class FlavorActionController(wsgi.Controller):
return _marshall_flavor_access(id)
-class Flavor_access(extensions.ExtensionDescriptor):
+class FlavorAccess(extensions.V3APIExtensionBase):
"""Flavor access support."""
name = "FlavorAccess"
- alias = "os-flavor-access"
- namespace = ("http://docs.openstack.org/compute/ext/"
- "flavor_access/api/v2")
- updated = "2012-08-01T00:00:00+00:00"
+ alias = ALIAS
+ namespace = "http://docs.openstack.org/compute/ext/%s/api/v3" % ALIAS
+ version = 1
def get_resources(self):
- resources = []
-
res = extensions.ResourceExtension(
- 'os-flavor-access',
+ ALIAS,
controller=FlavorAccessController(),
parent=dict(member_name='flavor', collection_name='flavors'))
- resources.append(res)
- return resources
+ return [res]
def get_controller_extensions(self):
extension = extensions.ControllerExtension(
diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_flavor_access.py b/nova/tests/api/openstack/compute/plugins/v3/test_flavor_access.py
index d072e0784..7d9ec93df 100644
--- a/nova/tests/api/openstack/compute/plugins/v3/test_flavor_access.py
+++ b/nova/tests/api/openstack/compute/plugins/v3/test_flavor_access.py
@@ -18,7 +18,7 @@ import datetime
from lxml import etree
from webob import exc
-from nova.api.openstack.compute.contrib import flavor_access
+from nova.api.openstack.compute.plugins.v3 import flavor_access
from nova.api.openstack.compute import flavors as flavors_api
from nova.compute import flavors
from nova import context
@@ -136,7 +136,7 @@ class FlavorAccessTest(test.TestCase):
def test_list_flavor_access_public(self):
# query os-flavor-access on public flavor should return 404
- req = fakes.HTTPRequest.blank('/v2/fake/flavors/os-flavor-access',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors/os-flavor-access',
use_admin_context=True)
self.assertRaises(exc.HTTPNotFound,
self.flavor_access_controller.index,
@@ -151,7 +151,7 @@ class FlavorAccessTest(test.TestCase):
def test_list_flavor_with_admin_default_proj1(self):
expected = {'flavors': [{'id': '0'}, {'id': '1'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors',
use_admin_context=True)
req.environ['nova.context'].project_id = 'proj1'
result = self.flavor_controller.index(req)
@@ -159,7 +159,7 @@ class FlavorAccessTest(test.TestCase):
def test_list_flavor_with_admin_default_proj2(self):
expected = {'flavors': [{'id': '0'}, {'id': '1'}, {'id': '2'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors',
use_admin_context=True)
req.environ['nova.context'].project_id = 'proj2'
result = self.flavor_controller.index(req)
@@ -167,21 +167,21 @@ class FlavorAccessTest(test.TestCase):
def test_list_flavor_with_admin_ispublic_true(self):
expected = {'flavors': [{'id': '0'}, {'id': '1'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors?is_public=true',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors?is_public=true',
use_admin_context=True)
result = self.flavor_controller.index(req)
self._verify_flavor_list(result['flavors'], expected['flavors'])
def test_list_flavor_with_admin_ispublic_false(self):
expected = {'flavors': [{'id': '2'}, {'id': '3'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors?is_public=false',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors?is_public=false',
use_admin_context=True)
result = self.flavor_controller.index(req)
self._verify_flavor_list(result['flavors'], expected['flavors'])
def test_list_flavor_with_admin_ispublic_false_proj2(self):
expected = {'flavors': [{'id': '2'}, {'id': '3'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors?is_public=false',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors?is_public=false',
use_admin_context=True)
req.environ['nova.context'].project_id = 'proj2'
result = self.flavor_controller.index(req)
@@ -190,35 +190,35 @@ class FlavorAccessTest(test.TestCase):
def test_list_flavor_with_admin_ispublic_none(self):
expected = {'flavors': [{'id': '0'}, {'id': '1'}, {'id': '2'},
{'id': '3'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors?is_public=none',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors?is_public=none',
use_admin_context=True)
result = self.flavor_controller.index(req)
self._verify_flavor_list(result['flavors'], expected['flavors'])
def test_list_flavor_with_no_admin_default(self):
expected = {'flavors': [{'id': '0'}, {'id': '1'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors',
use_admin_context=False)
result = self.flavor_controller.index(req)
self._verify_flavor_list(result['flavors'], expected['flavors'])
def test_list_flavor_with_no_admin_ispublic_true(self):
expected = {'flavors': [{'id': '0'}, {'id': '1'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors?is_public=true',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors?is_public=true',
use_admin_context=False)
result = self.flavor_controller.index(req)
self._verify_flavor_list(result['flavors'], expected['flavors'])
def test_list_flavor_with_no_admin_ispublic_false(self):
expected = {'flavors': [{'id': '0'}, {'id': '1'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors?is_public=false',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors?is_public=false',
use_admin_context=False)
result = self.flavor_controller.index(req)
self._verify_flavor_list(result['flavors'], expected['flavors'])
def test_list_flavor_with_no_admin_ispublic_none(self):
expected = {'flavors': [{'id': '0'}, {'id': '1'}]}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors?is_public=none',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors?is_public=none',
use_admin_context=False)
result = self.flavor_controller.index(req)
self._verify_flavor_list(result['flavors'], expected['flavors'])
@@ -254,7 +254,7 @@ class FlavorAccessTest(test.TestCase):
expected = {'flavor_access':
[{'flavor_id': '3', 'tenant_id': 'proj3'}]}
body = {'addTenantAccess': {'tenant': 'proj2'}}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors/2/action',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors/2/action',
use_admin_context=True)
result = self.flavor_action_controller.\
_addTenantAccess(req, '3', body)
@@ -267,7 +267,7 @@ class FlavorAccessTest(test.TestCase):
self.stubs.Set(flavors, 'add_flavor_access',
stub_add_flavor_access)
body = {'addTenantAccess': {'tenant': 'proj2'}}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors/2/action',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors/2/action',
use_admin_context=True)
self.assertRaises(exc.HTTPConflict,
self.flavor_action_controller._addTenantAccess,
@@ -280,7 +280,7 @@ class FlavorAccessTest(test.TestCase):
self.stubs.Set(flavors, 'remove_flavor_access',
stub_remove_flavor_access)
body = {'removeTenantAccess': {'tenant': 'proj2'}}
- req = fakes.HTTPRequest.blank('/v2/fake/flavors/2/action',
+ req = fakes.HTTPRequest.blank('/v3/fake/flavors/2/action',
use_admin_context=True)
self.assertRaises(exc.HTTPNotFound,
self.flavor_action_controller._removeTenantAccess,
diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py
index 63589848b..bbde1787a 100644
--- a/nova/tests/fake_policy.py
+++ b/nova/tests/fake_policy.py
@@ -133,6 +133,7 @@ policy_data = """
"compute_extension:fixed_ips": "",
"compute_extension:v3:os-fixed-ips": "",
"compute_extension:flavor_access": "",
+ "compute_extension:v3:os-flavor-access": "",
"compute_extension:flavor_disabled": "",
"compute_extension:flavor_rxtx": "",
"compute_extension:flavor_swap": "",