From 3459cfb89bd90605e54fd1fb28b8b38089f3e236 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Wed, 16 Mar 2011 15:20:08 -0400 Subject: update image service documentation --- nova/image/service.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'nova/image') diff --git a/nova/image/service.py b/nova/image/service.py index c09052cab..78d8f33e9 100644 --- a/nova/image/service.py +++ b/nova/image/service.py @@ -40,9 +40,9 @@ class BaseImageService(object): :retval: a sequence of mappings with the following signature {'id': opaque id of image, 'name': name of image, - 'created_at': creation timestamp, - 'updated_at': modification timestamp, - 'deleted_at': deletion timestamp or None, + 'created_at': creation datetime object, + 'updated_at': modification datetime object, + 'deleted_at': deletion datetime object or None, 'deleted': boolean indicating if image has been deleted, 'status': string description of image status, 'is_public': boolean indicating if image is public @@ -64,9 +64,9 @@ class BaseImageService(object): {'id': opaque id of image, 'name': name of image, - 'created_at': creation timestamp, - 'updated_at': modification timestamp, - 'deleted_at': deletion timestamp or None, + 'created_at': creation datetime object, + 'updated_at': modification datetime object, + 'deleted_at': deletion datetime object or None, 'deleted': boolean indicating if image has been deleted, 'status': string description of image status, 'is_public': boolean indicating if image is public -- cgit From cc2d4728d32d016ef803d0def456cac6e315e8fa Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Wed, 16 Mar 2011 17:56:40 -0400 Subject: get started testing --- nova/image/glance.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'nova/image') diff --git a/nova/image/glance.py b/nova/image/glance.py index 15fca69b8..3b448db4b 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -37,8 +37,10 @@ GlanceClient = utils.import_class('glance.client.Client') class GlanceImageService(service.BaseImageService): """Provides storage and retrieval of disk image objects within Glance.""" - def __init__(self): - self.client = GlanceClient(FLAGS.glance_host, FLAGS.glance_port) + def __init__(self, client=None): + if client is None: + self.client = GlanceClient(FLAGS.glance_host, FLAGS.glance_port) + self.client = client def index(self, context): """ -- cgit From e79eaca86c4073cc8bc6c59be83d0f1bf5e2cea4 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 17 Mar 2011 12:20:22 -0400 Subject: glance image service show testcases --- nova/image/glance.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'nova/image') diff --git a/nova/image/glance.py b/nova/image/glance.py index 3b448db4b..d0c191ea1 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -18,6 +18,8 @@ from __future__ import absolute_import +import datetime as dt + from glance.common import exception as glance_exception from nova import exception @@ -60,6 +62,18 @@ class GlanceImageService(service.BaseImageService): """ try: image = self.client.get_image_meta(image_id) + if 'created_at' in image: + image['created_at'] = \ + dt.datetime.strptime(image['created_at'], + "%Y-%m-%dT%H:%M:%S.%f") + if 'updated_at' in image: + image['updated_at'] = \ + dt.datetime.strptime(image['updated_at'], + "%Y-%m-%dT%H:%M:%S.%f") + if 'deleted_at' in image and image['deleted_at'] is not None: + image['deleted_at'] = \ + dt.datetime.strptime(image['deleted_at'], + "%Y-%m-%dT%H:%M:%S.%f") except glance_exception.NotFound: raise exception.NotFound return image -- cgit From b135bc23cca1494049dd9978cb18b52f2b4d99c7 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 17 Mar 2011 12:30:32 -0400 Subject: refactor to simpler implementation --- nova/image/glance.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'nova/image') diff --git a/nova/image/glance.py b/nova/image/glance.py index d0c191ea1..188b6e588 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -62,22 +62,25 @@ class GlanceImageService(service.BaseImageService): """ try: image = self.client.get_image_meta(image_id) - if 'created_at' in image: - image['created_at'] = \ - dt.datetime.strptime(image['created_at'], - "%Y-%m-%dT%H:%M:%S.%f") - if 'updated_at' in image: - image['updated_at'] = \ - dt.datetime.strptime(image['updated_at'], - "%Y-%m-%dT%H:%M:%S.%f") - if 'deleted_at' in image and image['deleted_at'] is not None: - image['deleted_at'] = \ - dt.datetime.strptime(image['deleted_at'], - "%Y-%m-%dT%H:%M:%S.%f") except glance_exception.NotFound: raise exception.NotFound + return self._convert_timestamps_to_datetimes(image) + + def _convert_timestamps_to_datetimes(self, image): + """ + Returns image with known timestamp fields converted to datetime objects + """ + for attr in ['created_at', 'updated_at', 'deleted_at']: + if attr in image and image[attr] is not None: + image[attr] = self._parse_glance_iso8601_timestamp(image[attr]) return image + def _parse_glance_iso8601_timestamp(self, timestamp): + """ + Parse a subset of iso8601 timestamps into datetime objects + """ + return dt.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f") + def show_by_name(self, context, name): """ Returns a dict containing image data for the given name. -- cgit From 3ee835c60d2b43086b1e324501025d1f0221da27 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 17 Mar 2011 13:50:41 -0400 Subject: handle timestamps in glance service detail --- nova/image/glance.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'nova/image') diff --git a/nova/image/glance.py b/nova/image/glance.py index 188b6e588..7706a42e4 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -54,7 +54,8 @@ class GlanceImageService(service.BaseImageService): """ Calls out to Glance for a list of detailed image information """ - return self.client.get_images_detailed() + for image in self.client.get_images_detailed(): + yield self._convert_timestamps_to_datetimes(image) def show(self, context, image_id): """ -- cgit From 66c237a4d321887830e5282781870525abf00365 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 17 Mar 2011 14:04:31 -0400 Subject: teach glance image server get to handle timestamps --- nova/image/glance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova/image') diff --git a/nova/image/glance.py b/nova/image/glance.py index 7706a42e4..f725fe176 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -108,7 +108,7 @@ class GlanceImageService(service.BaseImageService): raise exception.NotFound for chunk in image_chunks: data.write(chunk) - return metadata + return self._convert_timestamps_to_datetimes(metadata) def create(self, context, metadata, data=None): """ -- cgit From 4334ca9d6b0ac8a9b2edb1fbcbf0bc4df28b2961 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 17 Mar 2011 15:04:28 -0400 Subject: get api openstack test_images working --- nova/image/glance.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'nova/image') diff --git a/nova/image/glance.py b/nova/image/glance.py index f725fe176..55dc5488d 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -42,7 +42,8 @@ class GlanceImageService(service.BaseImageService): def __init__(self, client=None): if client is None: self.client = GlanceClient(FLAGS.glance_host, FLAGS.glance_port) - self.client = client + else: + self.client = client def index(self, context): """ @@ -54,8 +55,8 @@ class GlanceImageService(service.BaseImageService): """ Calls out to Glance for a list of detailed image information """ - for image in self.client.get_images_detailed(): - yield self._convert_timestamps_to_datetimes(image) + return [self._convert_timestamps_to_datetimes(image) + for image in self.client.get_images_detailed()] def show(self, context, image_id): """ -- cgit From 2f1a1d293915cde6e15c85e0bb43fb21ae26f7b0 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 17 Mar 2011 15:29:54 -0400 Subject: handle create and update requests, and update the base image service documentation to reflect the (defacto) behavior --- nova/image/glance.py | 7 ++++--- nova/image/service.py | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'nova/image') diff --git a/nova/image/glance.py b/nova/image/glance.py index 55dc5488d..fbb578585 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -118,7 +118,8 @@ class GlanceImageService(service.BaseImageService): :raises AlreadyExists if the image already exist. """ - return self.client.add_image(metadata, data) + return self._convert_timestamps_to_datetimes( + self.client.add_image(metadata, data)) def update(self, context, image_id, metadata, data=None): """Replace the contents of the given image with the new data. @@ -127,10 +128,10 @@ class GlanceImageService(service.BaseImageService): """ try: - result = self.client.update_image(image_id, metadata, data) + metadata = self.client.update_image(image_id, metadata, data) except glance_exception.NotFound: raise exception.NotFound - return result + return self._convert_timestamps_to_datetimes(metadata) def delete(self, context, image_id): """ diff --git a/nova/image/service.py b/nova/image/service.py index 78d8f33e9..e907381c9 100644 --- a/nova/image/service.py +++ b/nova/image/service.py @@ -88,7 +88,7 @@ class BaseImageService(object): def create(self, context, metadata, data=None): """ - Store the image metadata and data and return the new image id. + Store the image metadata and data and return the new image metadata. :raises AlreadyExists if the image already exist. @@ -96,7 +96,7 @@ class BaseImageService(object): raise NotImplementedError def update(self, context, image_id, metadata, data=None): - """Update the given image with the new metadata and data. + """Update the given image metadata and data and return the metadata :raises NotFound if the image does not exist. -- cgit From 39783f386a473ed28c786bb72a29e8403503c40c Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Mon, 21 Mar 2011 17:09:53 -0400 Subject: make bcwaldon happy --- nova/image/glance.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'nova/image') diff --git a/nova/image/glance.py b/nova/image/glance.py index fbb578585..171b28fde 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -18,7 +18,7 @@ from __future__ import absolute_import -import datetime as dt +import datetime from glance.common import exception as glance_exception @@ -73,7 +73,7 @@ class GlanceImageService(service.BaseImageService): Returns image with known timestamp fields converted to datetime objects """ for attr in ['created_at', 'updated_at', 'deleted_at']: - if attr in image and image[attr] is not None: + if image.get(attr) is not None: image[attr] = self._parse_glance_iso8601_timestamp(image[attr]) return image @@ -81,7 +81,7 @@ class GlanceImageService(service.BaseImageService): """ Parse a subset of iso8601 timestamps into datetime objects """ - return dt.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f") + return datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f") def show_by_name(self, context, name): """ -- cgit