1"""List images."""
2# :license: MIT, see LICENSE for more details.
3
4import click
5
6import SoftLayer
7from SoftLayer.CLI import environment
8from SoftLayer.CLI import formatting
9from SoftLayer.CLI import image as image_mod
10from SoftLayer import utils
11
12
13@click.command()
14@click.option('--name', default=None, help='Filter on image name')
15@click.option('--public/--private', is_flag=True, default=None,
16              help='Display only public or private images')
17@environment.pass_env
18def cli(env, name, public):
19    """List images."""
20
21    image_mgr = SoftLayer.ImageManager(env.client)
22
23    images = []
24    if public in [False, None]:
25        for image in image_mgr.list_private_images(name=name, mask=image_mod.MASK):
26            images.append(image)
27
28    if public in [True, None]:
29        for image in image_mgr.list_public_images(name=name, mask=image_mod.MASK):
30            images.append(image)
31
32    table = formatting.Table(['id', 'name', 'type', 'visibility', 'account'])
33
34    images = [image for image in images if not image['parentId']]
35    for image in images:
36
37        visibility = (image_mod.PUBLIC_TYPE if image['publicFlag'] else image_mod.PRIVATE_TYPE)
38        table.add_row([
39            image.get('id', formatting.blank()),
40            formatting.FormattedItem(image['name'], click.wrap_text(image['name'], width=50)),
41            formatting.FormattedItem(
42                utils.lookup(image, 'imageType', 'keyName'),
43                utils.lookup(image, 'imageType', 'name')),
44            visibility,
45            image.get('accountId', formatting.blank()),
46        ])
47
48    env.fout(table)
49