summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@yahoo.com>2010-10-25 01:37:01 -0700
committerVishvananda Ishaya <vishvananda@yahoo.com>2010-10-25 01:37:01 -0700
commitbde0d8d0f0e864d5b5d0f87e55ab23839846f71e (patch)
treee75b65b75cfa6db5633259f194e3ce15e2cb41ff
parent3e2715b21a51c10451e6275e649385f0a846b033 (diff)
fix bugs, describe volumes, detach on terminate
-rw-r--r--nova/api/ec2/cloud.py13
-rw-r--r--nova/compute/manager.py3
-rw-r--r--nova/volume/driver.py11
-rw-r--r--nova/volume/manager.py4
4 files changed, 20 insertions, 11 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 784697b01..a1899c47f 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -463,24 +463,31 @@ class CloudController(object):
return {'volumeSet': volumes}
def _format_volume(self, context, volume):
+ instance_ec2_id = None
+ instance_data = None
+ if volume.get('instance', None):
+ internal_id = volume['instance']['internal_id']
+ ec2_id = internal_id_to_ec2_id(internal_id)
+ instance_data = '%s[%s]' % (instance_ec2_id,
+ volume['instance']['host'])
v = {}
v['volumeId'] = volume['ec2_id']
v['status'] = volume['status']
v['size'] = volume['size']
v['availabilityZone'] = volume['availability_zone']
v['createTime'] = volume['created_at']
- if context.user.is_admin():
+ if context.is_admin:
v['status'] = '%s (%s, %s, %s, %s)' % (
volume['status'],
volume['user_id'],
volume['host'],
- volume['instance_id'],
+ instance_data,
volume['mountpoint'])
if volume['attach_status'] == 'attached':
v['attachmentSet'] = [{'attachTime': volume['attach_time'],
'deleteOnTermination': False,
'device': volume['mountpoint'],
- 'instanceId': volume['instance_id'],
+ 'instanceId': instance_ec2_id,
'status': 'attached',
'volume_id': volume['ec2_id']}]
else:
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 81b568f80..3b3208fea 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -111,6 +111,9 @@ class ComputeManager(manager.Manager):
logging.debug("instance %s: terminating", instance_id)
instance_ref = self.db.instance_get(context, instance_id)
+ volumes = instance_ref.get('volumes', []) or []
+ for volume in volumes:
+ self.detach_volume(instance_id, volume['id'])
if instance_ref['state'] == power_state.SHUTOFF:
self.db.instance_destroy(context, instance_id)
raise exception.Error('trying to destroy already destroyed'
diff --git a/nova/volume/driver.py b/nova/volume/driver.py
index b69076244..eff56d9c6 100644
--- a/nova/volume/driver.py
+++ b/nova/volume/driver.py
@@ -21,6 +21,7 @@ Drivers for volumes
"""
import logging
+import os
from twisted.internet import defer
@@ -80,12 +81,10 @@ class VolumeDriver(object):
yield self._execute("sleep %s" % tries ** 2)
def check_for_setup_error(self):
- """Returns an error if prerequesits aren't met"""
- # NOTE(vish): makes sure that the volume group exists
- (_out, err) = self._sync_exec("vgs %s" % FLAGS.volume_group,
- check_exit_code=False)
- if err:
- raise exception.Error(err)
+ """Returns an error if prerequisites aren't met"""
+ if not os.path.isdir("/dev/%s" % FLAGS.volume_group):
+ raise exception.Error("volume group %s doesn't exist"
+ % FLAGS.volume_group)
@defer.inlineCallbacks
def create_volume(self, volume):
diff --git a/nova/volume/manager.py b/nova/volume/manager.py
index 910e71c9e..f6146efe9 100644
--- a/nova/volume/manager.py
+++ b/nova/volume/manager.py
@@ -112,7 +112,7 @@ class VolumeManager(manager.Manager):
Returns path to device.
"""
- context = context.admin()
+ context = context.elevated()
volume_ref = self.db.volume_get(context, volume_id)
if volume_ref['host'] == self.host:
# NOTE(vish): No need to discover local volumes.
@@ -124,7 +124,7 @@ class VolumeManager(manager.Manager):
@defer.inlineCallbacks
def remove_compute_volume(self, context, volume_id):
"""Remove remote volume on compute host """
- context = context.admin()
+ context = context.elevated()
volume_ref = self.db.volume_get(context, volume_id)
if volume_ref['host'] == self.host:
# NOTE(vish): No need to undiscover local volumes.