summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMotoKen <motokentsai@gmail.com>2013-05-01 14:05:58 +0800
committerMotoKen <motokentsai@gmail.com>2013-05-01 16:02:53 +0800
commitf48a2e1a68cca1ef147279b2ddf713635f494bc0 (patch)
tree730f41138a3a382dccc192d16b40580e95fc7fa9
parentdccbcc84a922d16eb230491e2a4d486fdb19b40f (diff)
downloadnova-f48a2e1a68cca1ef147279b2ddf713635f494bc0.tar.gz
nova-f48a2e1a68cca1ef147279b2ddf713635f494bc0.tar.xz
nova-f48a2e1a68cca1ef147279b2ddf713635f494bc0.zip
Fix EC2 instance bdm response
Make the bdm response respect Amazon EC2 spec: * use ec2 volume id instead of uuid * use volume attach_status instead of status References: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-ItemType-EbsInstanceBlockDeviceMappingResponseType.html Resolves bug 1165973. Change-Id: Ib68397b79f63e01e92ed4bebbc245ba5e0a3ad11
-rw-r--r--nova/api/ec2/cloud.py4
-rw-r--r--nova/tests/api/ec2/test_cinder_cloud.py24
-rw-r--r--nova/tests/api/ec2/test_cloud.py4
-rw-r--r--nova/tests/fake_volume.py1
4 files changed, 17 insertions, 16 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 4b779e26f..da319bc8b 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -1072,10 +1072,10 @@ class CloudController(object):
vol = self.volume_api.get(context, volume_id)
LOG.debug(_("vol = %s\n"), vol)
# TODO(yamahata): volume attach time
- ebs = {'volumeId': volume_id,
+ ebs = {'volumeId': ec2utils.id_to_ec2_vol_id(volume_id),
'deleteOnTermination': bdm['delete_on_termination'],
'attachTime': vol['attach_time'] or '',
- 'status': vol['status'], }
+ 'status': vol['attach_status'], }
res = {'deviceName': bdm['device_name'],
'ebs': ebs, }
mapping.append(res)
diff --git a/nova/tests/api/ec2/test_cinder_cloud.py b/nova/tests/api/ec2/test_cinder_cloud.py
index 605f903cb..4a21f7fad 100644
--- a/nova/tests/api/ec2/test_cinder_cloud.py
+++ b/nova/tests/api/ec2/test_cinder_cloud.py
@@ -486,34 +486,34 @@ class CinderCloudTestCase(test.TestCase):
_expected_block_device_mapping0 = [
{'deviceName': '/dev/sdb1',
- 'ebs': {'status': 'in-use',
+ 'ebs': {'status': 'attached',
'deleteOnTermination': False,
- 'volumeId': '2',
+ 'volumeId': 'vol-00000002',
}},
{'deviceName': '/dev/sdb2',
- 'ebs': {'status': 'in-use',
+ 'ebs': {'status': 'attached',
'deleteOnTermination': False,
- 'volumeId': '3',
+ 'volumeId': 'vol-00000003',
}},
{'deviceName': '/dev/sdb3',
- 'ebs': {'status': 'in-use',
+ 'ebs': {'status': 'attached',
'deleteOnTermination': True,
- 'volumeId': '5',
+ 'volumeId': 'vol-00000005',
}},
{'deviceName': '/dev/sdb4',
- 'ebs': {'status': 'in-use',
+ 'ebs': {'status': 'attached',
'deleteOnTermination': False,
- 'volumeId': '7',
+ 'volumeId': 'vol-00000007',
}},
{'deviceName': '/dev/sdb5',
- 'ebs': {'status': 'in-use',
+ 'ebs': {'status': 'attached',
'deleteOnTermination': False,
- 'volumeId': '9',
+ 'volumeId': 'vol-00000009',
}},
{'deviceName': '/dev/sdb6',
- 'ebs': {'status': 'in-use',
+ 'ebs': {'status': 'attached',
'deleteOnTermination': False,
- 'volumeId': '11', }}]
+ 'volumeId': 'vol-0000000b', }}]
# NOTE(yamahata): swap/ephemeral device case isn't supported yet.
_expected_instance_bdm2 = {
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
index 19a11b3ee..c6ec305c6 100644
--- a/nova/tests/api/ec2/test_cloud.py
+++ b/nova/tests/api/ec2/test_cloud.py
@@ -2293,9 +2293,9 @@ class CloudTestCase(test.TestCase):
'rootDeviceType': 'ebs',
'blockDeviceMapping': [
{'deviceName': '/dev/sdh',
- 'ebs': {'status': 'in-use',
+ 'ebs': {'status': 'attached',
'deleteOnTermination': True,
- 'volumeId': 87654321,
+ 'volumeId': 'vol-05397fb1',
'attachTime': '13:56:24'}}]}
expected_bdm['blockDeviceMapping'].sort()
self.assertEqual(bdm, expected_bdm)
diff --git a/nova/tests/fake_volume.py b/nova/tests/fake_volume.py
index 607f1444d..9d9eb1fb6 100644
--- a/nova/tests/fake_volume.py
+++ b/nova/tests/fake_volume.py
@@ -166,6 +166,7 @@ class API(object):
if volume_id == 87654321:
return {'id': volume_id,
'attach_time': '13:56:24',
+ 'attach_status': 'attached',
'status': 'in-use'}
for v in self.volume_list: