summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-06-29 23:38:53 +0000
committerGerrit Code Review <review@openstack.org>2013-06-29 23:38:53 +0000
commit43849d18fd2fa8a298840a73b7756f3a346f2e6c (patch)
tree1155f881345a40f562a4d1015006d2ff7765a5d8
parent94aad08cfbefb19ec0bb995cac8c8f30e974e214 (diff)
parent124fbf3990b4595da912f8f3a1e939ae728a106b (diff)
downloadnova-43849d18fd2fa8a298840a73b7756f3a346f2e6c.tar.gz
nova-43849d18fd2fa8a298840a73b7756f3a346f2e6c.tar.xz
nova-43849d18fd2fa8a298840a73b7756f3a346f2e6c.zip
Merge "Port cells extension to v3 API Part 2"
-rw-r--r--etc/nova/policy.json1
-rw-r--r--nova/api/openstack/compute/plugins/v3/cells.py28
-rw-r--r--nova/tests/api/openstack/compute/plugins/v3/test_cells.py11
-rw-r--r--nova/tests/fake_policy.py1
-rw-r--r--setup.cfg1
5 files changed, 20 insertions, 22 deletions
diff --git a/etc/nova/policy.json b/etc/nova/policy.json
index 7c563b936..2d1ac7d25 100644
--- a/etc/nova/policy.json
+++ b/etc/nova/policy.json
@@ -33,6 +33,7 @@
"compute_extension:attach_interfaces": "",
"compute_extension:baremetal_nodes": "rule:admin_api",
"compute_extension:cells": "rule:admin_api",
+ "compute_extension:v3:os-cells": "rule:admin_api",
"compute_extension:certificates": "",
"compute_extension:v3:os-certificates": "",
"compute_extension:cloudpipe": "rule:admin_api",
diff --git a/nova/api/openstack/compute/plugins/v3/cells.py b/nova/api/openstack/compute/plugins/v3/cells.py
index 4e809d70e..e07792018 100644
--- a/nova/api/openstack/compute/plugins/v3/cells.py
+++ b/nova/api/openstack/compute/plugins/v3/cells.py
@@ -37,7 +37,8 @@ CONF = cfg.CONF
CONF.import_opt('name', 'nova.cells.opts', group='cells')
CONF.import_opt('capabilities', 'nova.cells.opts', group='cells')
-authorize = extensions.extension_authorizer('compute', 'cells')
+ALIAS = "os-cells"
+authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS)
def make_cell(elem):
@@ -145,13 +146,12 @@ def _scrub_cell(cell, detail=False):
return cell_info
-class Controller(object):
+class CellsController(object):
"""Controller for Cell resources."""
- def __init__(self, ext_mgr):
+ def __init__(self):
self.compute_api = compute.API()
self.cells_rpcapi = cells_rpcapi.CellsAPI()
- self.ext_mgr = ext_mgr
def _get_cells(self, ctxt, req, detail=False):
"""Return all cells."""
@@ -198,9 +198,6 @@ class Controller(object):
"""Return capacities for a given cell or all cells."""
# TODO(kaushikc): return capacities as a part of cell info and
# cells detail calls in v3, along with capabilities
- if not self.ext_mgr.is_loaded('os-cell-capacities'):
- raise exc.HTTPNotFound()
-
context = req.environ['nova.context']
authorize(context)
try:
@@ -320,15 +317,15 @@ class Controller(object):
updated_since=updated_since, deleted=deleted)
-class Cells(extensions.ExtensionDescriptor):
+class Cells(extensions.V3APIExtensionBase):
"""Enables cells-related functionality such as adding neighbor cells,
listing neighbor cells, and getting the capabilities of the local cell.
"""
name = "Cells"
- alias = "os-cells"
- namespace = "http://docs.openstack.org/compute/ext/cells/api/v1.1"
- updated = "2013-05-14T00:00:00+00:00"
+ alias = ALIAS
+ namespace = "http://docs.openstack.org/compute/ext/cells/api/v3"
+ version = 1
def get_resources(self):
coll_actions = {
@@ -341,7 +338,10 @@ class Cells(extensions.ExtensionDescriptor):
'capacities': 'GET',
}
- res = extensions.ResourceExtension('os-cells',
- Controller(self.ext_mgr), collection_actions=coll_actions,
- member_actions=memb_actions)
+ res = extensions.ResourceExtension(ALIAS, CellsController(),
+ collection_actions=coll_actions,
+ member_actions=memb_actions)
return [res]
+
+ def get_controller_extensions(self):
+ return []
diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_cells.py b/nova/tests/api/openstack/compute/plugins/v3/test_cells.py
index a9e77693e..f369c06e3 100644
--- a/nova/tests/api/openstack/compute/plugins/v3/test_cells.py
+++ b/nova/tests/api/openstack/compute/plugins/v3/test_cells.py
@@ -18,7 +18,7 @@ import copy
from lxml import etree
from webob import exc
-from nova.api.openstack.compute.contrib import cells as cells_ext
+from nova.api.openstack.compute.plugins.v3 import cells as cells_ext
from nova.api.openstack import extensions
from nova.api.openstack import xmlutil
from nova.cells import rpcapi as cells_rpcapi
@@ -88,12 +88,11 @@ class CellsTest(test.TestCase):
self.stubs.Set(cells_rpcapi.CellsAPI, 'get_cell_info_for_neighbors',
fake_cells_api_get_all_cell_info)
- self.ext_mgr = self.mox.CreateMock(extensions.ExtensionManager)
- self.controller = cells_ext.Controller(self.ext_mgr)
+ self.controller = cells_ext.CellsController()
self.context = context.get_admin_context()
def _get_request(self, resource):
- return fakes.HTTPRequest.blank('/v2/fake/' + resource)
+ return fakes.HTTPRequestV3.blank('/' + resource)
def test_index(self):
req = self._get_request("cells")
@@ -284,7 +283,6 @@ class CellsTest(test.TestCase):
self.assertEqual(cell_caps['cap2'], 'c;d')
def test_show_capacities(self):
- self.ext_mgr.is_loaded('os-cell-capacities').AndReturn(True)
self.mox.StubOutWithMock(self.controller.cells_rpcapi,
'get_capacities')
response = {"ram_free":
@@ -305,7 +303,6 @@ class CellsTest(test.TestCase):
self.assertEqual(response, res_dict['cell']['capacities'])
def test_show_capacity_fails_with_non_admin_context(self):
- self.ext_mgr.is_loaded('os-cell-capacities').AndReturn(True)
rules = {"compute_extension:cells": "is_admin:true"}
self.policy.set_rules(rules)
@@ -317,7 +314,6 @@ class CellsTest(test.TestCase):
self.controller.capacities, req)
def test_show_capacities_for_invalid_cell(self):
- self.ext_mgr.is_loaded('os-cell-capacities').AndReturn(True)
self.mox.StubOutWithMock(self.controller.cells_rpcapi,
'get_capacities')
self.controller.cells_rpcapi. \
@@ -330,7 +326,6 @@ class CellsTest(test.TestCase):
self.controller.capacities, req, "invalid_cell")
def test_show_capacities_for_cell(self):
- self.ext_mgr.is_loaded('os-cell-capacities').AndReturn(True)
self.mox.StubOutWithMock(self.controller.cells_rpcapi,
'get_capacities')
response = {"ram_free":
diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py
index da43115d0..490ef5bc5 100644
--- a/nova/tests/fake_policy.py
+++ b/nova/tests/fake_policy.py
@@ -111,6 +111,7 @@ policy_data = """
"compute_extension:attach_interfaces": "",
"compute_extension:baremetal_nodes": "",
"compute_extension:cells": "",
+ "compute_extension:v3:os-cells": "",
"compute_extension:certificates": "",
"compute_extension:v3:os-certificates": "",
"compute_extension:cloudpipe": "",
diff --git a/setup.cfg b/setup.cfg
index 3d90a8a44..865f7a5fc 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -54,6 +54,7 @@ console_scripts =
nova-xvpvncproxy = nova.cmd.xvpvncproxy:main
nova.api.v3.extensions =
+ cells = nova.api.openstack.compute.plugins.v3.cells:Cells
certificates = nova.api.openstack.compute.plugins.v3.certificates:Certificates
consoles = nova.api.openstack.compute.plugins.v3.consoles:Consoles
evacuate = nova.api.openstack.compute.plugins.v3.evacuate:Evacuate