From 7ea62897626546d330c3458bba4112f52882f313 Mon Sep 17 00:00:00 2001 From: MotoKen Date: Tue, 24 Jul 2012 16:27:45 +0800 Subject: [PATCH] EC2 DescribeImageAttribute by kernel/ramdisk. Fixes bug 1026898. Supports kernel/ramdisk attributes for EC2 DescribeImageAttribute API to display the ID of the kernel/ramdisk associated with the AMI. And adds test cases to verify this behavior. Change-Id: I3ea91b95812dcec349b4ff6dc889645a57975278 --- nova/api/ec2/cloud.py | 16 ++++++++++++++++ nova/tests/api/ec2/test_cloud.py | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py index 8a9f5f158b72..e723176f2033 100644 --- a/nova/api/ec2/cloud.py +++ b/nova/api/ec2/cloud.py @@ -1389,10 +1389,26 @@ class CloudController(object): if result['rootDeviceName'] is None: result['rootDeviceName'] = block_device.DEFAULT_ROOT_DEV_NAME + def _kernel_attribute(image, result): + kernel_id = image['properties'].get('kernel_id') + if kernel_id: + result['kernel'] = { + 'value': ec2utils.image_ec2_id(kernel_id, 'aki') + } + + def _ramdisk_attribute(image, result): + ramdisk_id = image['properties'].get('ramdisk_id') + if ramdisk_id: + result['ramdisk'] = { + 'value': ec2utils.image_ec2_id(ramdisk_id, 'ari') + } + supported_attributes = { 'blockDeviceMapping': _block_device_mapping_attribute, 'launchPermission': _launch_permission_attribute, 'rootDeviceName': _root_device_name_attribute, + 'kernel': _kernel_attribute, + 'ramdisk': _ramdisk_attribute, } fn = supported_attributes.get(attribute) diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py index ca2849cddd61..04b73adc8592 100644 --- a/nova/tests/api/ec2/test_cloud.py +++ b/nova/tests/api/ec2/test_cloud.py @@ -1336,6 +1336,12 @@ class CloudTestCase(test.TestCase): result = describe_image_attribute(self.context, 'ami-00000001', 'launchPermission') self.assertEqual([{'group': 'all'}], result['launchPermission']) + result = describe_image_attribute(self.context, 'ami-00000001', + 'kernel') + self.assertEqual('aki-00000001', result['kernel']['value']) + result = describe_image_attribute(self.context, 'ami-00000001', + 'ramdisk') + self.assertEqual('ari-00000001', result['ramdisk']['value']) def test_describe_image_attribute_root_device_name(self): describe_image_attribute = self.cloud.describe_image_attribute