diff options
author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-03-01 16:52:07 -0800 |
---|---|---|
committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-03-02 11:59:23 -0800 |
commit | 0d78045e72efe7313ca54e726dd403793eb30b52 (patch) | |
tree | 9c4f7beccf881c0b75a699a73779ba6d10c13886 /nova/image | |
parent | 8a530832c599f8866e98947976d74a5332d877af (diff) | |
download | nova-0d78045e72efe7313ca54e726dd403793eb30b52.tar.gz |
Fixes for ec2 images
* Fixes s3 image service to convert back to uuids on update
* Adds exception for attempt to update an unowned image
* Adds error messages to ec2 for failure cases
* Adds tests to verify changes
* Fixes bug 942865
Change-Id: I35331c635756f10c02b30dd43ab3fe0ad98bc28c
Diffstat (limited to 'nova/image')
-rw-r--r-- | nova/image/glance.py | 3 | ||||
-rw-r--r-- | nova/image/s3.py | 22 |
2 files changed, 25 insertions, 0 deletions
diff --git a/nova/image/glance.py b/nova/image/glance.py index f999bb390a..5edab26555 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -301,6 +301,9 @@ class GlanceImageService(object): image_meta = client.update_image(image_id, image_meta, data) except glance_exception.NotFound: raise exception.ImageNotFound(image_id=image_id) + # NOTE(vish): this gets raised for public images + except glance_exception.MissingCredentialError: + raise exception.ImageNotAuthorized(image_id=image_id) base_image_meta = self._translate_from_glance(image_meta) return base_image_meta diff --git a/nova/image/s3.py b/nova/image/s3.py index 483ec88f7c..4e4ad63020 100644 --- a/nova/image/s3.py +++ b/nova/image/s3.py @@ -105,6 +105,27 @@ class S3ImageService(object): return image_copy + def _translate_id_to_uuid(self, context, image): + image_copy = image.copy() + + try: + image_id = image_copy['id'] + except KeyError: + pass + else: + image_copy['id'] = self.get_image_uuid(context, image_id) + + for prop in ['kernel_id', 'ramdisk_id']: + try: + image_id = image_copy['properties'][prop] + except (KeyError, ValueError): + pass + else: + image_uuid = self.get_image_uuid(context, image_id) + image_copy['properties'][prop] = image_uuid + + return image_copy + def create(self, context, metadata, data=None): """Create an image. @@ -120,6 +141,7 @@ class S3ImageService(object): def update(self, context, image_id, metadata, data=None): image_uuid = self.get_image_uuid(context, image_id) + metadata = self._translate_id_to_uuid(context, metadata) image = self.service.update(context, image_uuid, metadata, data) return self._translate_uuid_to_id(context, image) |