diff --git a/SoftLayer/CLI/hardware/detail.py b/SoftLayer/CLI/hardware/detail.py index ebfbbca05..4382fc362 100644 --- a/SoftLayer/CLI/hardware/detail.py +++ b/SoftLayer/CLI/hardware/detail.py @@ -12,12 +12,8 @@ @click.command() @click.argument('identifier') -@click.option('--passwords', - is_flag=True, - help='Show passwords (check over your shoulder!)') -@click.option('--price', - is_flag=True, - help='Show associated prices') +@click.option('--passwords', is_flag=True, help='Show passwords (check over your shoulder!)') +@click.option('--price', is_flag=True, help='Show associated prices') @environment.pass_env def cli(env, identifier, passwords, price): """Get details for a hardware device.""" @@ -28,71 +24,52 @@ def cli(env, identifier, passwords, price): table.align['name'] = 'r' table.align['value'] = 'l' - hardware_id = helpers.resolve_id(hardware.resolve_ids, - identifier, - 'hardware') + hardware_id = helpers.resolve_id(hardware.resolve_ids, identifier, 'hardware') result = hardware.get_hardware(hardware_id) result = utils.NestedDict(result) + operating_system = utils.lookup(result, 'operatingSystem', 'softwareLicense', 'softwareDescription') or {} + memory = formatting.gb(result.get('memoryCapacity', 0)) + owner = None + if utils.lookup(result, 'billingItem') != []: + owner = utils.lookup(result, 'billingItem', 'orderItem', 'order', 'userRecord', 'username') + table.add_row(['id', result['id']]) table.add_row(['guid', result['globalIdentifier'] or formatting.blank()]) table.add_row(['hostname', result['hostname']]) table.add_row(['domain', result['domain']]) table.add_row(['fqdn', result['fullyQualifiedDomainName']]) table.add_row(['status', result['hardwareStatus']['status']]) - table.add_row(['datacenter', - result['datacenter']['name'] or formatting.blank()]) + table.add_row(['datacenter', result['datacenter']['name'] or formatting.blank()]) table.add_row(['cores', result['processorPhysicalCoreAmount']]) - memory = (formatting.gb(result['memoryCapacity']) - if result.get('memoryCapacity') - else formatting.blank()) table.add_row(['memory', memory]) - table.add_row(['public_ip', - result['primaryIpAddress'] or formatting.blank()]) - table.add_row(['private_ip', - result['primaryBackendIpAddress'] or formatting.blank()]) - table.add_row(['ipmi_ip', - result['networkManagementIpAddress'] or formatting.blank()]) - operating_system = utils.lookup(result, - 'operatingSystem', - 'softwareLicense', - 'softwareDescription') or {} + table.add_row(['public_ip', result['primaryIpAddress'] or formatting.blank()]) + table.add_row(['private_ip', result['primaryBackendIpAddress'] or formatting.blank()]) + table.add_row(['ipmi_ip', result['networkManagementIpAddress'] or formatting.blank()]) table.add_row(['os', operating_system.get('name') or formatting.blank()]) - table.add_row(['os_version', - operating_system.get('version') or formatting.blank()]) - - table.add_row( - ['created', result['provisionDate'] or formatting.blank()]) - - if utils.lookup(result, 'billingItem') != []: - table.add_row(['owner', formatting.FormattedItem( - utils.lookup(result, 'billingItem', 'orderItem', - 'order', 'userRecord', - 'username') or formatting.blank(), - )]) - else: - table.add_row(['owner', formatting.blank()]) + table.add_row(['os_version', operating_system.get('version') or formatting.blank()]) + table.add_row(['created', result['provisionDate'] or formatting.blank()]) + table.add_row(['owner', owner or formatting.blank()]) vlan_table = formatting.Table(['type', 'number', 'id']) - for vlan in result['networkVlans']: - vlan_table.add_row([ - vlan['networkSpace'], vlan['vlanNumber'], vlan['id']]) + vlan_table.add_row([vlan['networkSpace'], vlan['vlanNumber'], vlan['id']]) + table.add_row(['vlans', vlan_table]) if result.get('notes'): table.add_row(['notes', result['notes']]) if price: - total_price = utils.lookup(result, - 'billingItem', - 'nextInvoiceTotalRecurringAmount') or 0 - total_price += sum(p['nextInvoiceTotalRecurringAmount'] - for p - in utils.lookup(result, - 'billingItem', - 'children') or []) - table.add_row(['price_rate', total_price]) + total_price = utils.lookup(result, 'billingItem', 'nextInvoiceTotalRecurringAmount') or 0 + + price_table = formatting.Table(['Item', 'Recurring Price']) + price_table.add_row(['Total', total_price]) + + for item in utils.lookup(result, 'billingItem', 'children') or []: + price_table.add_row([item['description'], item['nextInvoiceTotalRecurringAmount']]) + + table.add_row(['prices', price_table]) if passwords: pass_table = formatting.Table(['username', 'password']) @@ -107,16 +84,4 @@ def cli(env, identifier, passwords, price): table.add_row(['tags', formatting.tags(result['tagReferences'])]) - # Test to see if this actually has a primary (public) ip address - try: - if not result['privateNetworkOnlyFlag']: - ptr_domains = (env.client['Hardware_Server'] - .getReverseDomainRecords(id=hardware_id)) - - for ptr_domain in ptr_domains: - for ptr in ptr_domain['resourceRecords']: - table.add_row(['ptr', ptr['data']]) - except SoftLayer.SoftLayerAPIError: - pass - env.fout(table) diff --git a/SoftLayer/fixtures/SoftLayer_Hardware_Server.py b/SoftLayer/fixtures/SoftLayer_Hardware_Server.py index 26dc7c3bf..61bdbf984 100644 --- a/SoftLayer/fixtures/SoftLayer_Hardware_Server.py +++ b/SoftLayer/fixtures/SoftLayer_Hardware_Server.py @@ -8,11 +8,7 @@ 'recurringFee': 1.54, 'nextInvoiceTotalRecurringAmount': 16.08, 'children': [ - {'nextInvoiceTotalRecurringAmount': 1}, - {'nextInvoiceTotalRecurringAmount': 1}, - {'nextInvoiceTotalRecurringAmount': 1}, - {'nextInvoiceTotalRecurringAmount': 1}, - {'nextInvoiceTotalRecurringAmount': 1}, + {'description': 'test', 'nextInvoiceTotalRecurringAmount': 1}, ], 'orderItem': { 'order': { diff --git a/tests/CLI/modules/server_tests.py b/tests/CLI/modules/server_tests.py index 25de71511..083798bd5 100644 --- a/tests/CLI/modules/server_tests.py +++ b/tests/CLI/modules/server_tests.py @@ -44,9 +44,9 @@ def test_server_details(self): 'os': 'Ubuntu', 'os_version': 'Ubuntu 12.04 LTS', 'owner': 'chechu', - 'price_rate': 21.08, + 'prices': [{'Item': 'Total', 'Recurring Price': 16.08}, + {'Item': 'test', 'Recurring Price': 1}], 'private_ip': '10.1.0.2', - 'ptr': '2.0.1.10.in-addr.arpa', 'public_ip': '172.16.1.100', 'remote users': [{'password': 'abc123', 'ipmi_username': 'root'}], 'status': 'ACTIVE',