diff options
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/servers.py | 67 |
1 files changed, 41 insertions, 26 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py index e0681e597..22a9c632c 100644 --- a/nova/api/openstack/servers.py +++ b/nova/api/openstack/servers.py @@ -294,47 +294,61 @@ class Controller(common.OpenstackController): 'revertResize': self._action_revert_resize, 'rebuild': self._action_rebuild, } + input_dict = self._deserialize(req.body, req.get_content_type()) for key in actions.keys(): if key in input_dict: - try: - context = req.environ['nova.context'] - return actions[key](context, input_dict, id) - except Exception, e: - LOG.exception(_("Error in action %(key)s: %(e)s") % - locals()) - return faults.Fault(exc.HTTPBadRequest()) + return actions[key](input_dict, req, id) return faults.Fault(exc.HTTPNotImplemented()) - def _action_change_password(self, context, input_dict, id): + def _action_change_password(self, input_dict, req, id): return exc.HTTPNotImplemented() - def _action_confirm_resize(self, context, input_dict, id): - self.compute_api.confirm_resize(context, id) + def _action_confirm_resize(self, input_dict, req, id): + try: + self.compute_api.confirm_resize(req.environ['nova.context'], id) + except Exception, e: + LOG.exception(_("Error in confirm-resize %s"), e) + return faults.Fault(exc.HTTPBadRequest()) return exc.HTTPNoContent() - def _action_revert_resize(self, context, input_dict, id): - self.compute_api.revert_resize(context, id) + def _action_revert_resize(self, input_dict, req, id): + try: + self.compute_api.revert_resize(req.environ['nova.context'], id) + except Exception, e: + LOG.exception(_("Error in revert-resize %s"), e) + return faults.Fault(exc.HTTPBadRequest()) return exc.HTTPAccepted() - def _action_rebuild(self, context, input_dict, id): + def _action_rebuild(self, input_dict, req, id): return faults.Fault(exc.HTTPNotImplemented()) - def _action_resize(self, context, input_dict, id): + def _action_resize(self, input_dict, req, id): """ Resizes a given instance to the flavor size requested """ - if 'resize' in input_dict and 'flavorId' in input_dict['resize']: - flavor_id = input_dict['resize']['flavorId'] - self.compute_api.resize(context, id, flavor_id) - else: - LOG.exception(_("Missing arguments for resize")) - return faults.Fault(exc.HTTPUnprocessableEntity()) + try: + if 'resize' in input_dict and 'flavorId' in input_dict['resize']: + flavor_id = input_dict['resize']['flavorId'] + self.compute_api.resize(req.environ['nova.context'], id, + flavor_id) + else: + LOG.exception(_("Missing arguments for resize")) + return faults.Fault(exc.HTTPUnprocessableEntity()) + except Exception, e: + LOG.exception(_("Error in resize %s"), e) + return faults.Fault(exc.HTTPBadRequest()) return faults.Fault(exc.HTTPAccepted()) - def _action_reboot(self, context, input_dict, id): - reboot_type = input_dict['reboot']['type'] - # TODO(gundlach): pass reboot_type, support soft reboot in - # virt driver - self.compute_api.reboot(context, id) + def _action_reboot(self, input_dict, req, id): + try: + reboot_type = input_dict['reboot']['type'] + except Exception: + raise faults.Fault(exc.HTTPNotImplemented()) + try: + # TODO(gundlach): pass reboot_type, support soft reboot in + # virt driver + self.compute_api.reboot(req.environ['nova.context'], id) + except: + return faults.Fault(exc.HTTPUnprocessableEntity()) return exc.HTTPAccepted() @scheduler_api.redirect_handler @@ -618,7 +632,8 @@ class ControllerV11(Controller): def _get_addresses_view_builder(self, req): return nova.api.openstack.views.addresses.ViewBuilderV11(req) - def _action_change_password(self, context, input_dict, id): + def _action_change_password(self, input_dict, req, id): + context = req.environ['nova.context'] if (not 'changePassword' in input_dict or not 'adminPass' in input_dict['changePassword']): msg = _("No adminPass was specified") |
