Add support for viewing a single image through v2

* Add image-create command
* Add tests for Image model, Controller.get, and Controller.list
* Related to bp glance-client-v2

Change-Id: Ib98e912a7af0bb570b4fd738733edd9b837d1a06
This commit is contained in:
Brian Waldon
2012-07-13 23:05:38 +00:00
parent f0445a1b44
commit b6cef9d145
3 changed files with 94 additions and 0 deletions
+8
View File
@@ -19,6 +19,9 @@ class Image(object):
self.id = id self.id = id
self.name = name self.name = name
def iteritems(self):
return {'id': self.id, 'name': self.name}.iteritems()
class Controller(object): class Controller(object):
def __init__(self, http_client): def __init__(self, http_client):
@@ -27,3 +30,8 @@ class Controller(object):
def list(self): def list(self):
resp, body = self.http_client.json_request('GET', '/v2/images') resp, body = self.http_client.json_request('GET', '/v2/images')
return [Image(i['id'], i['name']) for i in body['images']] return [Image(i['id'], i['name']) for i in body['images']]
def get(self, image_id):
url = '/v2/images/%s' % image_id
resp, body = self.http_client.json_request('GET', url)
return Image(body['image']['id'], body['image']['name'])
+7
View File
@@ -24,6 +24,13 @@ def do_image_list(gc, args):
utils.print_list(images, columns) utils.print_list(images, columns)
@utils.arg('id', metavar='<IMAGE_ID>', help='ID of image to describe.')
def do_image_show(gc, args):
"""Describe a specific image."""
image = gc.images.get(args.id)
utils.print_dict(image)
@utils.arg('model', metavar='<MODEL>', help='Name of model to describe.') @utils.arg('model', metavar='<MODEL>', help='Name of model to describe.')
def do_explain(gc, args): def do_explain(gc, args):
"""Describe a specific model.""" """Describe a specific model."""
+79
View File
@@ -0,0 +1,79 @@
# Copyright 2012 OpenStack LLC.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import unittest
from glanceclient.v2 import images
from tests import utils
fixtures = {
'/v2/images': {
'GET': (
{},
{'images': [
{
'id': '3a4560a1-e585-443e-9b39-553b46ec92d1',
'name': 'image-1',
},
{
'id': '6f99bf80-2ee6-47cf-acfe-1f1fabb7e810',
'name': 'image-2',
},
]},
),
},
'/v2/images/3a4560a1-e585-443e-9b39-553b46ec92d1': {
'GET': (
{},
{
'image': {
'id': '3a4560a1-e585-443e-9b39-553b46ec92d1',
'name': 'image-1',
},
},
),
},
}
class TestImage(unittest.TestCase):
def test_image_minimum(self):
raw_image = {
'id': '8a5b2424-9751-498b-925f-66f62747c501',
'name': 'image-7',
}
image = images.Image(**raw_image)
self.assertEqual(image.id, '8a5b2424-9751-498b-925f-66f62747c501')
self.assertEqual(image.name, 'image-7')
class TestController(unittest.TestCase):
def setUp(self):
super(TestController, self).setUp()
self.api = utils.FakeAPI(fixtures)
self.controller = images.Controller(self.api)
def test_list_images(self):
images = self.controller.list()
self.assertEqual(images[0].id, '3a4560a1-e585-443e-9b39-553b46ec92d1')
self.assertEqual(images[0].name, 'image-1')
self.assertEqual(images[1].id, '6f99bf80-2ee6-47cf-acfe-1f1fabb7e810')
self.assertEqual(images[1].name, 'image-2')
def test_get_image(self):
image = self.controller.get('3a4560a1-e585-443e-9b39-553b46ec92d1')
self.assertEqual(image.id, '3a4560a1-e585-443e-9b39-553b46ec92d1')
self.assertEqual(image.name, 'image-1')