@@ -26,6 +26,13 @@ import subprocess
26
26
import sys
27
27
from tabulate import tabulate
28
28
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
29
36
30
37
PORT_CHANNEL_APPL_TABLE_PREFIX = "LAG_TABLE:"
31
38
PORT_CHANNEL_CFG_TABLE_PREFIX = "PORTCHANNEL|"
@@ -35,24 +42,31 @@ PORT_CHANNEL_MEMBER_APPL_TABLE_PREFIX = "LAG_MEMBER_TABLE:"
35
42
PORT_CHANNEL_MEMBER_STATUS_FIELD = "status"
36
43
37
44
class Teamshow (object ):
38
- def __init__ (self ):
45
+ def __init__ (self , display_option , namespace_option ):
39
46
self .teams = []
40
47
self .teamsraw = {}
41
48
self .summary = {}
42
49
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 ()
47
58
48
59
def get_portchannel_names (self ):
49
60
"""
50
61
Get the portchannel names from database.
51
62
"""
63
+ self .teams = []
52
64
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 )
56
70
57
71
def get_portchannel_status (self , port_channel_name ):
58
72
"""
@@ -77,7 +91,7 @@ class Teamshow(object):
77
91
Command: 'teamdctl <teamdevname> state dump'.
78
92
"""
79
93
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 )
81
95
p = subprocess .Popen (teamdctl_cmd , stdout = subprocess .PIPE , stderr = subprocess .PIPE , shell = True )
82
96
(output , err ) = p .communicate ()
83
97
rc = p .wait ()
@@ -144,11 +158,15 @@ def main():
144
158
if os .geteuid () != 0 :
145
159
exit ("This utility must be run as root" )
146
160
161
+ parser = multi_asic_args ()
162
+ args = parser .parse_args ()
163
+
164
+ display_option = args .display
165
+ namespace_option = args .namespace
166
+
147
167
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 ()
152
170
team .display_summary ()
153
171
except Exception as e :
154
172
sys .exit (e .message )
0 commit comments