diff --git a/novaclient/v1_1/images.py b/novaclient/v1_1/images.py index dfde21bd5..fcc8b547b 100644 --- a/novaclient/v1_1/images.py +++ b/novaclient/v1_1/images.py @@ -2,6 +2,7 @@ """ Image interface. """ +import urllib from novaclient import base @@ -37,16 +38,21 @@ class ImageManager(base.ManagerWithFind): """ return self._get("/images/%s" % base.getid(image), "image") - def list(self, detailed=True): + def list(self, detailed=True, limit=None): """ Get a list of all images. :rtype: list of :class:`Image` + :param limit: maximum number of images to return. """ - if detailed is True: - return self._list("/images/detail", "images") - else: - return self._list("/images", "images") + params = {} + detail = '' + if detailed: + detail = '/detail' + if limit: + params['limit'] = int(limit) + query = '?%s' % urllib.urlencode(params) if params else '' + return self._list('/images%s%s' % (detail, query), 'images') def delete(self, image): """ diff --git a/novaclient/v1_1/shell.py b/novaclient/v1_1/shell.py index 8dd4dce7b..9d6ce5e71 100644 --- a/novaclient/v1_1/shell.py +++ b/novaclient/v1_1/shell.py @@ -712,9 +712,14 @@ def do_network_create(cs, args): cs.networks.create(**kwargs) +@utils.arg('--limit', + dest="limit", + metavar="", + help='number of images to return per request') def do_image_list(cs, _args): """Print a list of available images to boot from.""" - image_list = cs.images.list() + limit = _args.limit + image_list = cs.images.list(limit=limit) def parse_server_name(image): try: diff --git a/tests/v1_1/test_images.py b/tests/v1_1/test_images.py index 71676e165..a4f8e6416 100644 --- a/tests/v1_1/test_images.py +++ b/tests/v1_1/test_images.py @@ -18,6 +18,10 @@ class ImagesTest(utils.TestCase): cs.assert_called('GET', '/images') [self.assertTrue(isinstance(i, images.Image)) for i in il] + def test_list_images_with_limit(self): + il = cs.images.list(limit=4) + cs.assert_called('GET', '/images/detail?limit=4') + def test_get_image_details(self): i = cs.images.get(1) cs.assert_called('GET', '/images/1')