From f48a2e1a68cca1ef147279b2ddf713635f494bc0 Mon Sep 17 00:00:00 2001 From: MotoKen Date: Wed, 1 May 2013 14:05:58 +0800 Subject: 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 --- nova/api/ec2/cloud.py | 4 ++-- nova/tests/api/ec2/test_cinder_cloud.py | 24 ++++++++++++------------ nova/tests/api/ec2/test_cloud.py | 4 ++-- nova/tests/fake_volume.py | 1 + 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: -- cgit