1"""List hosts with access to block volume."""
2# :license: MIT, see LICENSE for more details.
3
4import click
5import SoftLayer
6from SoftLayer.CLI import columns as column_helper
7from SoftLayer.CLI import environment
8from SoftLayer.CLI import formatting
9from SoftLayer.CLI import helpers
10from SoftLayer.CLI import storage_utils
11
12
13@click.command()
14@click.argument('volume_id')
15@click.option('--sortby', help='Column to sort by', default='name')
16@click.option('--columns',
17              callback=column_helper.get_formatter(storage_utils.COLUMNS),
18              help='Columns to display. Options: {0}'.format(
19                  ', '.join(column.name for column in storage_utils.COLUMNS)),
20              default=','.join(storage_utils.DEFAULT_COLUMNS))
21@environment.pass_env
22def cli(env, columns, sortby, volume_id):
23    """List ACLs."""
24    block_manager = SoftLayer.BlockStorageManager(env.client)
25    resolved_id = helpers.resolve_id(block_manager.resolve_ids, volume_id, 'Volume Id')
26    access_list = block_manager.get_block_volume_access_list(
27        volume_id=resolved_id)
28    table = formatting.Table(columns.columns)
29    table.sortby = sortby
30
31    for key, type_name in [('allowedVirtualGuests', 'VIRTUAL'),
32                           ('allowedHardware', 'HARDWARE'),
33                           ('allowedSubnets', 'SUBNET'),
34                           ('allowedIpAddresses', 'IP')]:
35        for obj in access_list.get(key, []):
36            obj['type'] = type_name
37            table.add_row([value or formatting.blank()
38                           for value in columns.row(obj)])
39
40    env.fout(table)
41