summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/volume/cinder.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/nova/volume/cinder.py b/nova/volume/cinder.py
index e465daf1c..ca7f86da1 100644
--- a/nova/volume/cinder.py
+++ b/nova/volume/cinder.py
@@ -171,7 +171,7 @@ def _untranslate_snapshot_summary_view(context, snapshot):
class API(base.Base):
"""API for interacting with the volume manager."""
- def _reraise_translated_volume_exception(self, volume_id):
+ def _reraise_translated_volume_exception(self, volume_id=None):
"""Transform the exception for the volume but keep its traceback
intact."""
exc_type, exc_value, exc_trace = sys.exc_info()
@@ -181,6 +181,8 @@ class API(base.Base):
def _translate_volume_exception(self, volume_id, exc_value):
if isinstance(exc_value, cinder_exception.NotFound):
return exception.VolumeNotFound(volume_id=volume_id)
+ elif isinstance(exc_value, cinder_exception.BadRequest):
+ return exception.InvalidInput(reason=exc_value.message)
return exc_value
def get(self, context, volume_id):
@@ -265,9 +267,11 @@ class API(base.Base):
metadata=metadata,
imageRef=image_id)
- item = cinderclient(context).volumes.create(size, **kwargs)
-
- return _untranslate_volume_summary_view(context, item)
+ try:
+ item = cinderclient(context).volumes.create(size, **kwargs)
+ return _untranslate_volume_summary_view(context, item)
+ except Exception:
+ self._reraise_translated_volume_exception()
def delete(self, context, volume):
cinderclient(context).volumes.delete(volume['id'])