summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Short <chuck.short@canonical.com>2012-03-08 11:42:53 -0500
committerChuck Short <chuck.short@canonical.com>2012-03-08 11:45:04 -0500
commit5f217aa13254c27bc52f43088fefd2116f77fb3c (patch)
tree7f1472f76ea6d1f16ba838f0f9974ea7514a302d
parent251a66b3e29d1e0542353d639dfcfea242b9c3d1 (diff)
Make EC2 API a bit more user friendly.
Inform users that volume operations have failed. Fixes bug 950055. Change-Id: Ia33965031495e03e539e3c7ce2fbbda8ef48b5e5 Signed-off-by: Chuck Short <chuck.short@canonical.com>
-rw-r--r--nova/api/ec2/cloud.py25
1 files changed, 21 insertions, 4 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 87c71bedf..25d6c1c81 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -888,8 +888,13 @@ class CloudController(object):
def delete_volume(self, context, volume_id, **kwargs):
validate_ec2_id(volume_id)
volume_id = ec2utils.ec2_id_to_id(volume_id)
- volume = self.volume_api.get(context, volume_id)
- self.volume_api.delete(context, volume)
+
+ try:
+ volume = self.volume_api.get(context, volume_id)
+ self.volume_api.delete(context, volume)
+ except exception.InvalidVolume:
+ raise exception.EC2APIError(_('Delete Failed'))
+
return True
def attach_volume(self, context, volume_id, instance_id, device, **kwargs):
@@ -901,7 +906,13 @@ class CloudController(object):
msg = _("Attach volume %(volume_id)s to instance %(instance_id)s"
" at %(device)s") % locals()
LOG.audit(msg, context=context)
- self.compute_api.attach_volume(context, instance, volume_id, device)
+
+ try:
+ self.compute_api.attach_volume(context, instance,
+ volume_id, device)
+ except exception.InvalidVolume:
+ raise exception.EC2APIError(_('Attach Failed.'))
+
volume = self.volume_api.get(context, volume_id)
return {'attachTime': volume['attach_time'],
'device': volume['mountpoint'],
@@ -915,7 +926,13 @@ class CloudController(object):
volume_id = ec2utils.ec2_id_to_id(volume_id)
LOG.audit(_("Detach volume %s"), volume_id, context=context)
volume = self.volume_api.get(context, volume_id)
- instance = self.compute_api.detach_volume(context, volume_id=volume_id)
+
+ try:
+ instance = self.compute_api.detach_volume(context,
+ volume_id=volume_id)
+ except exception.InvalidVolume:
+ raise exception.EC2APIError(_('Detach Volume Failed.'))
+
return {'attachTime': volume['attach_time'],
'device': volume['mountpoint'],
'instanceId': ec2utils.id_to_ec2_id(instance['id']),