summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Erdfelt <johannes.erdfelt@rackspace.com>2011-09-12 22:46:43 +0000
committerJohannes Erdfelt <johannes.erdfelt@rackspace.com>2011-09-12 22:46:43 +0000
commit0fd5de705c0cd2d7df09a667d15005eee95bae2d (patch)
treeb9b3af603ac1d3b31f84a092115f73300d112e23
parent79ef79abf24f7b8c8d3c9b652285a69fee7e9d14 (diff)
parent9f39ff070b5500a0ccb9a6454995f97342254381 (diff)
downloadnova-0fd5de705c0cd2d7df09a667d15005eee95bae2d.tar.gz
nova-0fd5de705c0cd2d7df09a667d15005eee95bae2d.tar.xz
nova-0fd5de705c0cd2d7df09a667d15005eee95bae2d.zip
Merge with trunk
-rw-r--r--nova/api/openstack/views/images.py15
-rw-r--r--nova/tests/api/openstack/test_images.py106
2 files changed, 102 insertions, 19 deletions
diff --git a/nova/api/openstack/views/images.py b/nova/api/openstack/views/images.py
index 21f1b2d3e..8983b2957 100644
--- a/nova/api/openstack/views/images.py
+++ b/nova/api/openstack/views/images.py
@@ -37,17 +37,18 @@ class ViewBuilder(object):
def _format_status(self, image):
"""Update the status field to standardize format."""
status_mapping = {
- 'pending': 'QUEUED',
- 'decrypting': 'PREPARING',
- 'untarring': 'SAVING',
- 'available': 'ACTIVE',
- 'killed': 'FAILED',
+ 'active': 'ACTIVE',
+ 'queued': 'SAVING',
+ 'saving': 'SAVING',
+ 'deleted': 'DELETED',
+ 'pending_delete': 'DELETED',
+ 'killed': 'ERROR',
}
try:
- image['status'] = status_mapping[image['status']].upper()
+ image['status'] = status_mapping[image['status']]
except KeyError:
- image['status'] = image['status'].upper()
+ image['status'] = 'UNKNOWN'
def _build_server(self, image, image_obj):
"""Indicates that you must use a ViewBuilder subclass."""
diff --git a/nova/tests/api/openstack/test_images.py b/nova/tests/api/openstack/test_images.py
index 2a7cfc382..c63d1203a 100644
--- a/nova/tests/api/openstack/test_images.py
+++ b/nova/tests/api/openstack/test_images.py
@@ -365,7 +365,9 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
{'id': 125, 'name': 'saving snapshot'},
{'id': 126, 'name': 'active snapshot'},
{'id': 127, 'name': 'killed snapshot'},
- {'id': 129, 'name': None}]
+ {'id': 128, 'name': 'deleted snapshot'},
+ {'id': 129, 'name': 'pending_delete snapshot'},
+ {'id': 131, 'name': None}]
self.assertDictListMatch(response_list, expected)
@@ -407,7 +409,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
"name": "queued snapshot",
"updated": self.NOW_API_FORMAT,
"created": self.NOW_API_FORMAT,
- "status": "QUEUED",
+ "status": "SAVING",
"progress": 0,
'server': {
'id': 42,
@@ -458,7 +460,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
self.assertEqual(expected_image.toxml(), actual_image.toxml())
def test_get_image_xml_no_name(self):
- request = webob.Request.blank('/v1.0/images/129')
+ request = webob.Request.blank('/v1.0/images/131')
request.accept = "application/xml"
response = request.get_response(fakes.wsgi_app())
@@ -466,7 +468,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
expected_now = self.NOW_API_FORMAT
expected_image = minidom.parseString("""
- <image id="129"
+ <image id="131"
name="None"
updated="%(expected_now)s"
created="%(expected_now)s"
@@ -603,7 +605,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
'name': 'queued snapshot',
'updated': self.NOW_API_FORMAT,
'created': self.NOW_API_FORMAT,
- 'status': 'QUEUED',
+ 'status': 'SAVING',
'progress': 0,
},
{
@@ -627,11 +629,27 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
'name': 'killed snapshot',
'updated': self.NOW_API_FORMAT,
'created': self.NOW_API_FORMAT,
- 'status': 'FAILED',
+ 'status': 'ERROR',
+ 'progress': 0,
+ },
+ {
+ 'id': 128,
+ 'name': 'deleted snapshot',
+ 'updated': self.NOW_API_FORMAT,
+ 'created': self.NOW_API_FORMAT,
+ 'status': 'DELETED',
'progress': 0,
},
{
'id': 129,
+ 'name': 'pending_delete snapshot',
+ 'updated': self.NOW_API_FORMAT,
+ 'created': self.NOW_API_FORMAT,
+ 'status': 'DELETED',
+ 'progress': 0,
+ },
+ {
+ 'id': 131,
'name': None,
'updated': self.NOW_API_FORMAT,
'created': self.NOW_API_FORMAT,
@@ -676,7 +694,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
},
'updated': self.NOW_API_FORMAT,
'created': self.NOW_API_FORMAT,
- 'status': 'QUEUED',
+ 'status': 'SAVING',
'progress': 0,
'server': {
'id': 42,
@@ -769,7 +787,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
},
'updated': self.NOW_API_FORMAT,
'created': self.NOW_API_FORMAT,
- 'status': 'FAILED',
+ 'status': 'ERROR',
'progress': 0,
'server': {
'id': 42,
@@ -792,7 +810,69 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
}],
},
{
+ 'id': 128,
+ 'name': 'deleted snapshot',
+ 'metadata': {
+ u'instance_ref': u'http://localhost/v1.1/servers/42',
+ u'user_id': u'fake',
+ },
+ 'updated': self.NOW_API_FORMAT,
+ 'created': self.NOW_API_FORMAT,
+ 'status': 'DELETED',
+ 'progress': 0,
+ 'server': {
+ 'id': 42,
+ "links": [{
+ "rel": "self",
+ "href": server_href,
+ },
+ {
+ "rel": "bookmark",
+ "href": server_bookmark,
+ }],
+ },
+ "links": [{
+ "rel": "self",
+ "href": "http://localhost/v1.1/fake/images/128",
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://localhost/fake/images/128",
+ }],
+ },
+ {
'id': 129,
+ 'name': 'pending_delete snapshot',
+ 'metadata': {
+ u'instance_ref': u'http://localhost/v1.1/servers/42',
+ u'user_id': u'fake',
+ },
+ 'updated': self.NOW_API_FORMAT,
+ 'created': self.NOW_API_FORMAT,
+ 'status': 'DELETED',
+ 'progress': 0,
+ 'server': {
+ 'id': 42,
+ "links": [{
+ "rel": "self",
+ "href": server_href,
+ },
+ {
+ "rel": "bookmark",
+ "href": server_bookmark,
+ }],
+ },
+ "links": [{
+ "rel": "self",
+ "href": "http://localhost/v1.1/fake/images/129",
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://localhost/fake/images/129",
+ }],
+ },
+ {
+ 'id': 131,
'name': None,
'metadata': {},
'updated': self.NOW_API_FORMAT,
@@ -801,11 +881,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
'progress': 100,
"links": [{
"rel": "self",
- "href": "http://localhost/v1.1/fake/images/129",
+ "href": "http://localhost/v1.1/fake/images/131",
},
{
"rel": "bookmark",
- "href": "http://localhost/fake/images/129",
+ "href": "http://localhost/fake/images/131",
}],
},
]
@@ -1034,7 +1114,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
"""We should return a 404 if we request an image that doesn't belong
to us
"""
- req = webob.Request.blank('/v1.0/images/128')
+ req = webob.Request.blank('/v1.0/images/130')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 404)
@@ -1102,7 +1182,9 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
# Snapshot for User 1
server_ref = 'http://localhost/v1.1/servers/42'
snapshot_properties = {'instance_ref': server_ref, 'user_id': 'fake'}
- for status in ('queued', 'saving', 'active', 'killed'):
+ statuses = ('queued', 'saving', 'active','killed',
+ 'deleted', 'pending_delete')
+ for status in statuses:
add_fixture(id=image_id, name='%s snapshot' % status,
is_public=False, status=status,
properties=snapshot_properties)