1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
"""Get subnet details."""
# :license: MIT, see LICENSE for more details.
import click
import SoftLayer
from SoftLayer.CLI import environment
from SoftLayer.CLI import formatting
from SoftLayer.CLI import helpers
from SoftLayer import utils
@click.command(cls=SoftLayer.CLI.command.SLCommand, )
@click.argument('identifier')
@click.option('--no-vs',
is_flag=True,
help="Hide virtual server listing")
@click.option('--no-hardware',
is_flag=True,
help="Hide hardware listing")
@environment.pass_env
def cli(env, identifier, no_vs, no_hardware):
"""Get subnet details."""
mgr = SoftLayer.NetworkManager(env.client)
subnet_id = helpers.resolve_id(mgr.resolve_subnet_ids, identifier,
name='subnet')
mask = 'mask[ipAddresses[id, ipAddress, note, isBroadcast, isGateway, isNetwork, isReserved, ' \
'hardware, virtualGuest], datacenter, virtualGuests, hardware,' \
' networkVlan[networkSpace,primaryRouter]]'
subnet = mgr.get_subnet(subnet_id, mask=mask)
table = formatting.KeyValueTable(['name', 'value'])
table.align['name'] = 'r'
table.align['value'] = 'l'
table.add_row(['id', subnet['id']])
table.add_row(['identifier',
'%s/%s' % (subnet['networkIdentifier'],
str(subnet['cidr']))])
table.add_row(['subnet type', subnet.get('subnetType', formatting.blank())])
table.add_row(['network space',
utils.lookup(subnet, 'networkVlan', 'networkSpace')])
table.add_row(['gateway', subnet.get('gateway', formatting.blank())])
table.add_row(['broadcast',
subnet.get('broadcastAddress', formatting.blank())])
table.add_row(['datacenter', subnet['datacenter']['name']])
table.add_row(['usable ips',
subnet.get('usableIpAddressCount', formatting.blank())])
table.add_row(['note',
subnet.get('note', formatting.blank())])
table.add_row(['tags',
formatting.tags(subnet.get('tagReferences'))])
ip_address = subnet.get('ipAddresses')
ip_table = formatting.KeyValueTable(['id', 'status', 'ip', 'note'])
for address in ip_address:
description = '-'
status = 'Reserved'
if address.get('isGateway'):
status = 'Gateway'
if address.get('isBroadcast'):
status = 'Broadcast'
if address.get('isNetwork'):
status = 'Network'
if address.get('hardware') is not None:
description = address['hardware']['fullyQualifiedDomainName']
status = 'In use'
elif address.get('virtualGuest') is not None:
description = address['virtualGuest']['fullyQualifiedDomainName']
status = 'In use'
ip_table.add_row([address.get('id'), status,
address.get('ipAddress') + '/' + description, address.get('note', '-')])
table.add_row(['ipAddresses', ip_table])
if not no_vs:
if subnet['virtualGuests']:
vs_table = formatting.Table(['hostname', 'domain', 'public_ip', 'private_ip'])
for vsi in subnet['virtualGuests']:
vs_table.add_row([vsi['hostname'],
vsi['domain'],
vsi.get('primaryIpAddress'),
vsi.get('primaryBackendIpAddress')])
table.add_row(['vs', vs_table])
else:
table.add_row(['vs', formatting.blank()])
if not no_hardware:
if subnet['hardware']:
hw_table = formatting.Table(['hostname', 'domain', 'public_ip', 'private_ip'])
for hardware in subnet['hardware']:
hw_table.add_row([hardware['hostname'],
hardware['domain'],
hardware.get('primaryIpAddress'),
hardware.get('primaryBackendIpAddress')])
table.add_row(['hardware', hw_table])
else:
table.add_row(['hardware', formatting.blank()])
env.fout(table)
|