summaryrefslogtreecommitdiff
path: root/nova/image
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2012-03-01 16:52:07 -0800
committerVishvananda Ishaya <vishvananda@gmail.com>2012-03-02 11:59:23 -0800
commit0d78045e72efe7313ca54e726dd403793eb30b52 (patch)
tree9c4f7beccf881c0b75a699a73779ba6d10c13886 /nova/image
parent8a530832c599f8866e98947976d74a5332d877af (diff)
downloadnova-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.py3
-rw-r--r--nova/image/s3.py22
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)