diff --git a/nova/api/openstack/compute/plugins/v3/server_diagnostics.py b/nova/api/openstack/compute/plugins/v3/server_diagnostics.py index 42f16dce612a..4ca26fa3a77b 100644 --- a/nova/api/openstack/compute/plugins/v3/server_diagnostics.py +++ b/nova/api/openstack/compute/plugins/v3/server_diagnostics.py @@ -19,6 +19,7 @@ from nova.api.openstack import common from nova.api.openstack import extensions from nova import compute from nova import exception +from nova.i18n import _ ALIAS = "os-server-diagnostics" @@ -26,7 +27,7 @@ authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS) class ServerDiagnosticsController(object): - @extensions.expected_errors((404, 409)) + @extensions.expected_errors((404, 409, 501)) def index(self, req, server_id): context = req.environ["nova.context"] authorize(context) @@ -41,6 +42,9 @@ class ServerDiagnosticsController(object): except exception.InstanceInvalidState as state_error: common.raise_http_conflict_for_instance_invalid_state(state_error, 'get_diagnostics') + except NotImplementedError: + msg = _("Unable to get diagnostics, functionality not implemented") + raise webob.exc.HTTPNotImplemented(explanation=msg) class ServerDiagnostics(extensions.V3APIExtensionBase): diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_server_diagnostics.py b/nova/tests/api/openstack/compute/plugins/v3/test_server_diagnostics.py index e4da0c6790c2..4e840419e4fb 100644 --- a/nova/tests/api/openstack/compute/plugins/v3/test_server_diagnostics.py +++ b/nova/tests/api/openstack/compute/plugins/v3/test_server_diagnostics.py @@ -109,3 +109,13 @@ class ServerDiagnosticsTest(test.NoDBTestCase): '/servers/%s/os-server-diagnostics' % UUID) res = req.get_response(self.router) self.assertEqual(409, res.status_int) + + @mock.patch.object(compute_api.API, 'get_instance_diagnostics', + side_effect=NotImplementedError) + @mock.patch.object(compute_api.API, 'get', fake_instance_get) + def test_get_diagnostics_raise_no_notimplementederror(self, + mock_get_diagnostics): + req = fakes.HTTPRequestV3.blank( + '/servers/%s/os-server-diagnostics' % UUID) + res = req.get_response(self.router) + self.assertEqual(501, res.status_int)