diff options
| author | Sandy Walsh <sandy.walsh@rackspace.com> | 2011-09-15 13:00:21 -0700 |
|---|---|---|
| committer | Sandy Walsh <sandy.walsh@rackspace.com> | 2011-09-15 13:00:21 -0700 |
| commit | 97f28ec95ce1c6a1d3cb9c896b4ac2b4b51589e2 (patch) | |
| tree | 29348f30ad84e666a6e4a8de602817be33f835a6 | |
| parent | 65e3f8201d88f231dfbd7934f5b920ae3b1d8e31 (diff) | |
| download | nova-97f28ec95ce1c6a1d3cb9c896b4ac2b4b51589e2.tar.gz nova-97f28ec95ce1c6a1d3cb9c896b4ac2b4b51589e2.tar.xz nova-97f28ec95ce1c6a1d3cb9c896b4ac2b4b51589e2.zip | |
exceptions properly passed around now
| -rw-r--r-- | nova/api/openstack/servers.py | 44 | ||||
| -rw-r--r-- | nova/scheduler/api.py | 14 |
2 files changed, 55 insertions, 3 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py index 5affd1f33..6dc168203 100644 --- a/nova/api/openstack/servers.py +++ b/nova/api/openstack/servers.py @@ -17,6 +17,7 @@ import base64 import os import traceback +from novaclient import exceptions as novaclient_exceptions from lxml import etree from webob import exc import webob @@ -45,6 +46,29 @@ LOG = logging.getLogger('nova.api.openstack.servers') FLAGS = flags.FLAGS +class ConvertedException(exc.WSGIHTTPException): + def __init__(self, code, title, explaination): + self.code = code + self.title = title + self.explaination = explaination + super(ConvertedException, self).__init__() + + +def novaclient_exception_converter(f): + """Convert novaclient ClientException HTTP codes to webob exceptions. + """ + def new_f(*args, **kwargs): + try: + LOG.debug("**** NOVACLIENT EXCEPTION CONVERTER >>>>") + ret = f(*args, **kwargs) + LOG.debug("**** NOVACLIENT EXCEPTION CONVERTER <<<<") + return ret + except novaclient_exceptions.ClientException, e: + LOG.debug("**** NOVACLIENT EXCEPTION CONVERTER- RERAISING") + raise ConvertedException(e.code, e.message, e.details) + return new_f + + class Controller(object): """ The Server API base controller class for the OpenStack API """ @@ -135,6 +159,7 @@ class Controller(object): return dict(servers=servers) + @novaclient_exception_converter @scheduler_api.redirect_handler def show(self, req, id): """ Returns server details by server id """ @@ -169,6 +194,7 @@ class Controller(object): server['server']['adminPass'] = extra_values['password'] return server + @novaclient_exception_converter @scheduler_api.redirect_handler def update(self, req, id, body): """Update server then pass on to version-specific controller""" @@ -204,6 +230,7 @@ class Controller(object): def _update(self, context, req, id, inst_dict): return exc.HTTPNotImplemented() + @novaclient_exception_converter @scheduler_api.redirect_handler def action(self, req, id, body): """Multi-purpose method used to take actions on a server""" @@ -342,6 +369,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def lock(self, req, id): """ @@ -358,6 +386,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def unlock(self, req, id): """ @@ -374,6 +403,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def get_lock(self, req, id): """ @@ -389,6 +419,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def reset_network(self, req, id): """ @@ -404,6 +435,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def inject_network_info(self, req, id): """ @@ -419,6 +451,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def pause(self, req, id): """ Permit Admins to Pause the server. """ @@ -431,6 +464,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def unpause(self, req, id): """ Permit Admins to Unpause the server. """ @@ -443,6 +477,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def suspend(self, req, id): """permit admins to suspend the server""" @@ -455,6 +490,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def resume(self, req, id): """permit admins to resume the server from suspend""" @@ -467,6 +503,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def migrate(self, req, id): try: @@ -476,6 +513,7 @@ class Controller(object): raise exc.HTTPBadRequest() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def rescue(self, req, id): """Permit users to rescue the server.""" @@ -488,6 +526,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def unrescue(self, req, id): """Permit users to unrescue the server.""" @@ -500,6 +539,7 @@ class Controller(object): raise exc.HTTPUnprocessableEntity() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def get_ajax_console(self, req, id): """Returns a url to an instance's ajaxterm console.""" @@ -510,6 +550,7 @@ class Controller(object): raise exc.HTTPNotFound() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def get_vnc_console(self, req, id): """Returns a url to an instance's ajaxterm console.""" @@ -520,6 +561,7 @@ class Controller(object): raise exc.HTTPNotFound() return webob.Response(status_int=202) + @novaclient_exception_converter @scheduler_api.redirect_handler def diagnostics(self, req, id): """Permit Admins to retrieve server diagnostics.""" @@ -562,6 +604,7 @@ class Controller(object): class ControllerV10(Controller): """v1.0 OpenStack API controller""" + @novaclient_exception_converter @scheduler_api.redirect_handler def delete(self, req, id): """ Destroys a server """ @@ -640,6 +683,7 @@ class ControllerV10(Controller): class ControllerV11(Controller): """v1.1 OpenStack API controller""" + @novaclient_exception_converter @scheduler_api.redirect_handler def delete(self, req, id): """ Destroys a server """ diff --git a/nova/scheduler/api.py b/nova/scheduler/api.py index d8315f007..2bf60cc70 100644 --- a/nova/scheduler/api.py +++ b/nova/scheduler/api.py @@ -17,6 +17,8 @@ Handles all requests relating to schedulers. """ +import webob + from novaclient import v1_1 as novaclient from novaclient import exceptions as novaclient_exceptions @@ -321,6 +323,7 @@ class reroute_compute(object): self.replace_uuid_with_id(args, kwargs, item_id) if attempt_reroute: + LOG.debug("***** REROUTING TO ASK CHILDREN") return self._route_to_child_zones(context, collection, item_uuid) else: @@ -391,16 +394,21 @@ class reroute_compute(object): LOG.debug("****** FOUND EXCEPTION %s" % found_exception) return found_exception LOG.debug("****** COULD NOT FIND INSTANCE") - return exception.InstanceNotFound(instance_id=self.item_uuid) + #return exception.InstanceNotFound(instance_id=self.item_uuid) + return None def redirect_handler(f): def new_f(*args, **kwargs): try: - return f(*args, **kwargs) + LOG.debug("****** REDIRECT HANDLER >>>>") + ret = f(*args, **kwargs) + LOG.debug("****** REDIRECT HANDLER <<<<") + return ret except RedirectResult, e: - LOG.debug("****** REDIRECT HANDLER %s" % e.results) + LOG.debug("****** REDIRECT HANDLER %s" % e.results.__class__) if isinstance(e.results, BaseException): + LOG.debug("****** REDIRECT HANDLER - RAISING %s" % e.results.__class__) raise e.results return e.results return new_f |
