From b6cef9d145f870dd717843751f0c5d68867e07d5 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Fri, 13 Jul 2012 23:05:38 +0000 Subject: [PATCH] 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 --- glanceclient/v2/images.py | 8 ++++ glanceclient/v2/shell.py | 7 ++++ tests/v2/test_images.py | 79 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 tests/v2/test_images.py diff --git a/glanceclient/v2/images.py b/glanceclient/v2/images.py index 6199086..660e259 100644 --- a/glanceclient/v2/images.py +++ b/glanceclient/v2/images.py @@ -19,6 +19,9 @@ class Image(object): self.id = id self.name = name + def iteritems(self): + return {'id': self.id, 'name': self.name}.iteritems() + class Controller(object): def __init__(self, http_client): @@ -27,3 +30,8 @@ class Controller(object): def list(self): resp, body = self.http_client.json_request('GET', '/v2/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']) diff --git a/glanceclient/v2/shell.py b/glanceclient/v2/shell.py index 32a8487..7a100a7 100644 --- a/glanceclient/v2/shell.py +++ b/glanceclient/v2/shell.py @@ -24,6 +24,13 @@ def do_image_list(gc, args): utils.print_list(images, columns) +@utils.arg('id', metavar='', 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='', help='Name of model to describe.') def do_explain(gc, args): """Describe a specific model.""" diff --git a/tests/v2/test_images.py b/tests/v2/test_images.py new file mode 100644 index 0000000..f6f1292 --- /dev/null +++ b/tests/v2/test_images.py @@ -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')