Skip to content

Commit a3101ea

Browse files
Fix for #23205 [Smartswitch] Issues caused due to introduction of the chassisd/sonic-utiltiies changes for consecutive admin state changes (#3984)
* Fixed for #23205 * Addressed a review comment ModuleBase.MODULE_STATUS_EMPTY * added required import
1 parent d3bc688 commit a3101ea

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

show/chassis_modules.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from tabulate import tabulate
44
from swsscommon.swsscommon import SonicV2Connector
55
from utilities_common.chassis import is_smartswitch
6+
from sonic_platform_base.module_base import ModuleBase
67

78
import utilities_common.cli as clicommon
89
from sonic_py_common import multi_asic
@@ -58,18 +59,21 @@ def status(db, chassis_module_name):
5859
continue
5960

6061
data_dict = state_db.get_all(state_db.STATE_DB, key)
61-
desc = data_dict[CHASSIS_MODULE_INFO_DESC_FIELD]
62-
slot = data_dict[CHASSIS_MODULE_INFO_SLOT_FIELD]
63-
oper_status = data_dict[CHASSIS_MODULE_INFO_OPERSTATUS_FIELD]
64-
serial = data_dict[CHASSIS_MODULE_INFO_SERIAL_FIELD]
6562

63+
# Use default values if any field is missing
64+
desc = data_dict.get(CHASSIS_MODULE_INFO_DESC_FIELD, 'N/A')
65+
slot = data_dict.get(CHASSIS_MODULE_INFO_SLOT_FIELD, 'N/A')
66+
oper_status = data_dict.get(CHASSIS_MODULE_INFO_OPERSTATUS_FIELD, ModuleBase.MODULE_STATUS_EMPTY)
67+
serial = data_dict.get(CHASSIS_MODULE_INFO_SERIAL_FIELD, 'N/A')
68+
69+
# Determine admin_status
6670
if is_smartswitch():
6771
admin_status = 'down'
6872
else:
6973
admin_status = 'up'
7074
config_data = chassis_cfg_table.get(key_list[1])
7175
if config_data is not None:
72-
admin_status = config_data.get(CHASSIS_MODULE_INFO_ADMINSTATUS_FIELD)
76+
admin_status = config_data.get(CHASSIS_MODULE_INFO_ADMINSTATUS_FIELD, admin_status)
7377

7478
table.append((key_list[1], desc, slot, oper_status, admin_status, serial))
7579

@@ -100,13 +104,15 @@ def midplane_status(chassis_module_name):
100104
table = []
101105
for key in natsorted(keys):
102106
key_list = key.split('|')
103-
if len(key_list) != 2: # error data in DB, log it and ignore
107+
if len(key_list) != 2:
104108
print('Warn: Invalid Key {} in {} table'.format(key, CHASSIS_MIDPLANE_INFO_TABLE))
105109
continue
106110

107111
data_dict = state_db.get_all(state_db.STATE_DB, key)
108-
ip = data_dict[CHASSIS_MIDPLANE_INFO_IP_FIELD]
109-
access = data_dict[CHASSIS_MIDPLANE_INFO_ACCESS_FIELD]
112+
113+
# Defensive access with fallback defaults
114+
ip = data_dict.get(CHASSIS_MIDPLANE_INFO_IP_FIELD, 'N/A')
115+
access = data_dict.get(CHASSIS_MIDPLANE_INFO_ACCESS_FIELD, 'Unknown')
110116

111117
table.append((key_list[1], ip, access))
112118

0 commit comments

Comments
 (0)