summaryrefslogtreecommitdiff
path: root/nova/api/openstack/compute/volumes.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/api/openstack/compute/volumes.py')
-rw-r--r--nova/api/openstack/compute/volumes.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/nova/api/openstack/compute/volumes.py b/nova/api/openstack/compute/volumes.py
index 5c013e8afb..585e1796db 100644
--- a/nova/api/openstack/compute/volumes.py
+++ b/nova/api/openstack/compute/volumes.py
@@ -325,11 +325,21 @@ class VolumeAttachmentController(wsgi.Controller):
old_volume_id = id
try:
old_volume = self.volume_api.get(context, old_volume_id)
+ except exception.VolumeNotFound as e:
+ raise exc.HTTPNotFound(explanation=e.format_message())
- new_volume_id = body['volumeAttachment']['volumeId']
+ new_volume_id = body['volumeAttachment']['volumeId']
+ try:
new_volume = self.volume_api.get(context, new_volume_id)
except exception.VolumeNotFound as e:
- raise exc.HTTPNotFound(explanation=e.format_message())
+ # NOTE: This BadRequest is different from the above NotFound even
+ # though the same VolumeNotFound exception. This is intentional
+ # because new_volume_id is specified in a request body and if a
+ # nonexistent resource in the body (not URI) the code should be
+ # 400 Bad Request as API-WG guideline. On the other hand,
+ # old_volume_id is specified with URI. So it is valid to return
+ # NotFound response if that is not existent.
+ raise exc.HTTPBadRequest(explanation=e.format_message())
instance = common.get_instance(self.compute_api, context, server_id)