summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-03-05 16:23:53 +0000
committerGerrit Code Review <review@openstack.org>2012-03-05 16:23:53 +0000
commitc4e5d655e64b3b707fbfdfac11ffbcc8c8bf3660 (patch)
tree83eb3de1746606d95c9eb8cfbf6fe1a7bbaf4c4f
parent6122a3bab5eb2845a0ae07a15c6db2020d2a5667 (diff)
parent4a2cf658dca26965cb06f478ad030ecda4d7fc43 (diff)
downloadnova-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.py22
-rw-r--r--nova/tests/api/ec2/test_cloud.py58
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