diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-03-05 16:23:53 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-03-05 16:23:53 +0000 |
| commit | c4e5d655e64b3b707fbfdfac11ffbcc8c8bf3660 (patch) | |
| tree | 83eb3de1746606d95c9eb8cfbf6fe1a7bbaf4c4f | |
| parent | 6122a3bab5eb2845a0ae07a15c6db2020d2a5667 (diff) | |
| parent | 4a2cf658dca26965cb06f478ad030ecda4d7fc43 (diff) | |
| download | nova-c4e5d655e64b3b707fbfdfac11ffbcc8c8bf3660.tar.gz nova-c4e5d655e64b3b707fbfdfac11ffbcc8c8bf3660.tar.xz nova-c4e5d655e64b3b707fbfdfac11ffbcc8c8bf3660.zip | |
Merge "populate glance 'name' field through ec2-register"
| -rw-r--r-- | nova/api/ec2/cloud.py | 22 | ||||
| -rw-r--r-- | nova/tests/api/ec2/test_cloud.py | 58 |
2 files changed, 75 insertions, 5 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py index 4254a9873..d284a7da5 100644 --- a/nova/api/ec2/cloud.py +++ b/nova/api/ec2/cloud.py @@ -1365,11 +1365,18 @@ class CloudController(object): if ramdisk_id: i['ramdiskId'] = ec2utils.image_ec2_id(ramdisk_id, 'ari') i['imageOwnerId'] = image['properties'].get('owner_id') - if name: - i['imageLocation'] = "%s (%s)" % (image['properties']. - get('image_location'), name) + + img_loc = image['properties'].get('image_location') + if img_loc: + i['imageLocation'] = img_loc else: - i['imageLocation'] = image['properties'].get('image_location') + i['imageLocation'] = "%s (%s)" % (img_loc, name) + + i['name'] = name + if not name and img_loc: + # This should only occur for images registered with ec2 api + # prior to that api populating the glance name + i['name'] = img_loc i['imageState'] = self._get_image_state(image) i['description'] = image.get('description') @@ -1425,10 +1432,15 @@ class CloudController(object): return image_id def register_image(self, context, image_location=None, **kwargs): - if image_location is None and 'name' in kwargs: + if image_location is None and kwargs.get('name'): image_location = kwargs['name'] metadata = {'properties': {'image_location': image_location}} + if kwargs.get('name'): + metadata['name'] = kwargs['name'] + else: + metadata['name'] = image_location + if 'root_device_name' in kwargs: metadata['properties']['root_device_name'] = kwargs.get( 'root_device_name') diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py index 7779139e6..7060b25ce 100644 --- a/nova/tests/api/ec2/test_cloud.py +++ b/nova/tests/api/ec2/test_cloud.py @@ -33,6 +33,7 @@ from nova import db from nova import exception from nova import flags from nova.image import fake +from nova.image import s3 from nova import log as logging from nova import rpc from nova import test @@ -1178,6 +1179,63 @@ class CloudTestCase(test.TestCase): user_group=['all']) self.assertEqual(True, result['is_public']) + def test_register_image_name(self): + register_image = self.cloud.register_image + + def fake_create(_self, context, metadata, data=None): + self.assertEqual(metadata['name'], self.expected_name) + metadata['id'] = 1 + metadata['container_format'] = 'ami' + metadata['is_public'] = False + return metadata + + self.stubs.Set(s3.S3ImageService, 'create', fake_create) + self.expected_name = 'fake_bucket/fake.img.manifest.xml' + result = register_image(self.context, + image_location=self.expected_name, + name=None) + self.expected_name = 'an image name' + result = register_image(self.context, + image_location='some_location', + name=self.expected_name) + + def test_format_image(self): + image = { + 'id': 1, + 'container_format': 'ami', + 'name': 'name', + 'properties': { + 'image_location': 'location', + 'kernel_id': 1, + 'ramdisk_id': 1, + 'type': 'machine'}, + 'is_public': False} + expected = {'name': 'name', + 'imageOwnerId': None, + 'isPublic': False, + 'imageId': 'ami-00000001', + 'imageState': None, + 'rootDeviceType': 'instance-store', + 'architecture': None, + 'imageLocation': 'location', + 'kernelId': 'aki-00000001', + 'ramdiskId': 'ari-00000001', + 'rootDeviceName': '/dev/sda1', + 'imageType': 'machine', + 'description': None} + result = self.cloud._format_image(image) + self.assertDictMatch(result, expected) + image['properties']['image_location'] = None + expected['imageLocation'] = 'None (name)' + result = self.cloud._format_image(image) + self.assertDictMatch(result, expected) + image['name'] = None + image['properties']['image_location'] = 'location' + expected['imageLocation'] = 'location' + expected['name'] = 'location' + result = self.cloud._format_image(image) + self.assertDictMatch(result, expected) + def test_deregister_image(self): deregister_image = self.cloud.deregister_image |
