From f14bbe527b41b8ae856d2086fa8754e31f413118 Mon Sep 17 00:00:00 2001 From: Mahesh Maddikayala <10645050+smaheshm@users.noreply.github.com> Date: Mon, 26 Oct 2020 10:43:52 -0700 Subject: [PATCH] [CLI][show][platform] Added ASIC count in the output. (#1185) * [CLI][show][platform] Added ASIC count in the output. Also added option for JSON output. --- show/main.py | 19 +++++++++++++------ utilities_common/cli.py | 17 ++++++++++++++--- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/show/main.py b/show/main.py index c57f7b1a02..8be39b27ac 100755 --- a/show/main.py +++ b/show/main.py @@ -19,11 +19,11 @@ import vlan import system_health -from sonic_py_common import device_info +from sonic_py_common import device_info, multi_asic from swsssdk import ConfigDBConnector, SonicV2Connector from tabulate import tabulate from utilities_common.db import Db -import utilities_common.multi_asic as multi_asic_util +import utilities_common.multi_asic as multi_asic_util # Global Variables @@ -991,6 +991,7 @@ def get_hw_info_dict(): hw_info_dict['platform'] = device_info.get_platform() hw_info_dict['hwsku'] = device_info.get_hwsku() hw_info_dict['asic_type'] = version_info['asic_type'] + hw_info_dict['asic_count'] = multi_asic.get_num_asics() return hw_info_dict @@ -1005,12 +1006,18 @@ def platform(): # 'summary' subcommand ("show platform summary") @platform.command() -def summary(): +@click.option('--json', is_flag=True, help="JSON output") +def summary(json): """Show hardware platform information""" + hw_info_dict = get_hw_info_dict() - click.echo("Platform: {}".format(hw_info_dict['platform'])) - click.echo("HwSKU: {}".format(hw_info_dict['hwsku'])) - click.echo("ASIC: {}".format(hw_info_dict['asic_type'])) + if json: + click.echo(clicommon.json_dump(hw_info_dict)) + else: + click.echo("Platform: {}".format(hw_info_dict['platform'])) + click.echo("HwSKU: {}".format(hw_info_dict['hwsku'])) + click.echo("ASIC: {}".format(hw_info_dict['asic_type'])) + click.echo("ASIC Count: {}".format(hw_info_dict['asic_count'])) # 'syseeprom' subcommand ("show platform syseeprom") @platform.command() diff --git a/utilities_common/cli.py b/utilities_common/cli.py index ff55750234..cf4b7af2a6 100644 --- a/utilities_common/cli.py +++ b/utilities_common/cli.py @@ -1,10 +1,12 @@ import os import re -import sys -import netaddr import subprocess +import sys import click +import json +import netaddr + from natsort import natsorted from utilities_common.db import Db @@ -126,7 +128,7 @@ def __init__(self, db=None): self.config_db = db.cfgdb self.port_dict = self.config_db.get_table('PORT') self.alias_max_length = 0 - + if not self.port_dict: click.echo(message="Warning: failed to retrieve PORT table from ConfigDB!", err=True) @@ -509,3 +511,12 @@ def do_exit(msg): m = "FATAL failure: {}. Exiting...".format(msg) _log_msg(syslog.LOG_ERR, True, inspect.stack()[1][1], inspect.stack()[1][2], m) raise SystemExit(m) + + +def json_dump(data): + """ + Dump data in JSON format + """ + return json.dumps( + data, sort_keys=True, indent=2, ensure_ascii=False + )