Skip to content

Commit e71321f

Browse files
committed
show interface portchannel support for Multi ASIC
Signed-off-by: Arvindsrinivasan Lakshmi Narasimhan <arlakshm@microsoft.com>
1 parent 82dfe50 commit e71321f

File tree

2 files changed

+39
-15
lines changed

2 files changed

+39
-15
lines changed

scripts/teamshow

+31-13
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ import subprocess
2626
import sys
2727
from tabulate import tabulate
2828
from natsort import natsorted
29+
from utilities_common.multi_asic import MultiAsic
30+
from utilities_common.multi_asic import run_on_all_asics
31+
from utilities_common.multi_asic import multi_asic_args
32+
33+
from sonic_device_util import get_npu_id_from_name
34+
from utilities_common.multi_asic import multi_asic_args
35+
from utilities_common.multi_asic import PORT_CHANNEL_OBJ
2936

3037
PORT_CHANNEL_APPL_TABLE_PREFIX = "LAG_TABLE:"
3138
PORT_CHANNEL_CFG_TABLE_PREFIX = "PORTCHANNEL|"
@@ -35,24 +42,31 @@ PORT_CHANNEL_MEMBER_APPL_TABLE_PREFIX = "LAG_MEMBER_TABLE:"
3542
PORT_CHANNEL_MEMBER_STATUS_FIELD = "status"
3643

3744
class Teamshow(object):
38-
def __init__(self):
45+
def __init__(self,display_option, namespace_option):
3946
self.teams = []
4047
self.teamsraw = {}
4148
self.summary = {}
4249
self.err = None
43-
# setup db connection
44-
self.db = swsssdk.SonicV2Connector(host="127.0.0.1")
45-
self.db.connect(self.db.APPL_DB)
46-
self.db.connect(self.db.CONFIG_DB)
50+
self.db = None
51+
self.multi_asic = MultiAsic(display_option, namespace_option)
52+
53+
@run_on_all_asics
54+
def get_teams_info(self):
55+
self.get_portchannel_names()
56+
self.get_teamdctl()
57+
self.get_teamshow_result()
4758

4859
def get_portchannel_names(self):
4960
"""
5061
Get the portchannel names from database.
5162
"""
63+
self.teams = []
5264
team_keys = self.db.keys(self.db.CONFIG_DB, PORT_CHANNEL_CFG_TABLE_PREFIX+"*")
53-
if team_keys is None:
54-
return
55-
self.teams = [key[len(PORT_CHANNEL_CFG_TABLE_PREFIX):] for key in team_keys]
65+
for key in team_keys:
66+
team_name = key[len(PORT_CHANNEL_CFG_TABLE_PREFIX):]
67+
if self.multi_asic.skip_display(PORT_CHANNEL_OBJ, team_name) is True:
68+
continue
69+
self.teams.append(team_name)
5670

5771
def get_portchannel_status(self, port_channel_name):
5872
"""
@@ -77,7 +91,7 @@ class Teamshow(object):
7791
Command: 'teamdctl <teamdevname> state dump'.
7892
"""
7993
for team in self.teams:
80-
teamdctl_cmd = 'teamdctl ' + team + ' state dump'
94+
teamdctl_cmd = "sudo docker exec -it teamd{} teamdctl {} state dump".format(get_npu_id_from_name(self.multi_asic.current_namespace), team)
8195
p = subprocess.Popen(teamdctl_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
8296
(output, err) = p.communicate()
8397
rc = p.wait()
@@ -144,11 +158,15 @@ def main():
144158
if os.geteuid() != 0:
145159
exit("This utility must be run as root")
146160

161+
parser = multi_asic_args()
162+
args = parser.parse_args()
163+
164+
display_option = args.display
165+
namespace_option = args.namespace
166+
147167
try:
148-
team = Teamshow()
149-
team.get_portchannel_names()
150-
team.get_teamdctl()
151-
team.get_teamshow_result()
168+
team = Teamshow(display_option, namespace_option)
169+
team.get_teams_info()
152170
team.display_summary()
153171
except Exception as e:
154172
sys.exit(e.message)

show/main.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from swsssdk import ConfigDBConnector
2020
from swsssdk import SonicV2Connector
2121
from portconfig import get_child_ports
22+
from utilities_common.multi_asic import multi_asic_click_options
2223

2324
import mlnx
2425

@@ -1116,10 +1117,15 @@ def rif(interface, period, verbose):
11161117

11171118
# 'portchannel' subcommand ("show interfaces portchannel")
11181119
@interfaces.command()
1120+
@multi_asic_click_options
11191121
@click.option('--verbose', is_flag=True, help="Enable verbose output")
1120-
def portchannel(verbose):
1122+
def portchannel(namespace, display, verbose):
11211123
"""Show PortChannel information"""
1122-
cmd = "sudo teamshow"
1124+
1125+
namespace_option = "" if namespace is None else " -n {}".format(namespace)
1126+
1127+
cmd = "sudo teamshow -d {} {}".format(display, namespace_option)
1128+
11231129
run_command(cmd, display_cmd=verbose)
11241130

11251131
#

0 commit comments

Comments
 (0)