diff options
| author | matt.dietz@rackspace.com <> | 2011-08-02 23:31:14 +0000 |
|---|---|---|
| committer | Tarmac <> | 2011-08-02 23:31:14 +0000 |
| commit | e2770a4558c95aa4b6e276ebe18dc580a82e6d67 (patch) | |
| tree | 6f18a84409b616c122c1c128f9177540500a1ddf | |
| parent | 01f313433e6b2da9c9bd81f3a122c45504d534e0 (diff) | |
| parent | a788cf381d6d37dc32e08d8887ca1d15ee176c58 (diff) | |
Fixes lp819523
OS API Migrate is now an admin-only method
| -rw-r--r-- | nova/api/openstack/__init__.py | 1 | ||||
| -rw-r--r-- | nova/api/openstack/servers.py | 18 | ||||
| -rw-r--r-- | nova/tests/api/openstack/test_servers.py | 11 |
3 files changed, 20 insertions, 10 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py index 96a2f20e0..9ab8aeb58 100644 --- a/nova/api/openstack/__init__.py +++ b/nova/api/openstack/__init__.py @@ -97,6 +97,7 @@ class APIRouter(base_wsgi.Router): server_members['suspend'] = 'POST' server_members['resume'] = 'POST' server_members['rescue'] = 'POST' + server_members['migrate'] = 'POST' server_members['unrescue'] = 'POST' server_members['reset_network'] = 'POST' server_members['inject_network_info'] = 'POST' diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py index 7b757143d..002b47edb 100644 --- a/nova/api/openstack/servers.py +++ b/nova/api/openstack/servers.py @@ -164,7 +164,6 @@ class Controller(object): 'confirmResize': self._action_confirm_resize, 'revertResize': self._action_revert_resize, 'rebuild': self._action_rebuild, - 'migrate': self._action_migrate, 'createImage': self._action_create_image, } @@ -281,14 +280,6 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) - def _action_migrate(self, input_dict, req, id): - try: - self.compute_api.resize(req.environ['nova.context'], id) - except Exception, e: - LOG.exception(_("Error in migrate %s"), e) - raise exc.HTTPBadRequest() - return webob.Response(status_int=202) - @scheduler_api.redirect_handler def lock(self, req, id): """ @@ -415,6 +406,15 @@ class Controller(object): return webob.Response(status_int=202) @scheduler_api.redirect_handler + def migrate(self, req, id): + try: + self.compute_api.resize(req.environ['nova.context'], id) + except Exception, e: + LOG.exception(_("Error in migrate %s"), e) + raise exc.HTTPBadRequest() + return webob.Response(status_int=202) + + @scheduler_api.redirect_handler def rescue(self, req, id): """Permit users to rescue the server.""" context = req.environ["nova.context"] diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index 2e35ddd7a..4d42972c1 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -2327,8 +2327,9 @@ class ServersTest(test.TestCase): """This is basically the same as resize, only we provide the `migrate` attribute in the body's dict. """ - req = self.webreq('/1/action', 'POST', dict(migrate=None)) + req = self.webreq('/1/migrate', 'POST') + FLAGS.allow_admin_api = True self.resize_called = False def resize_mock(*args): @@ -2340,6 +2341,14 @@ class ServersTest(test.TestCase): self.assertEqual(res.status_int, 202) self.assertEqual(self.resize_called, True) + def test_migrate_server_no_admin_api_fails(self): + req = self.webreq('/1/migrate', 'POST') + + FLAGS.allow_admin_api = False + + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 404) + def test_shutdown_status(self): new_server = return_server_with_power_state(power_state.SHUTDOWN) self.stubs.Set(nova.db.api, 'instance_get', new_server) |
