|
12 | 12 |
|
13 | 13 | def get_chassis_info():
|
14 | 14 | """
|
15 |
| - Attempts to get the chassis info via STATE_DB and falls back to direct Platform API calls. |
| 15 | + Attempts to retrieve chassis information from CHASSIS_INFO table in STATE_DB if this table does |
| 16 | + not exist then we assume pmon has crashed and will attempt to call the platform API directly. If this |
| 17 | + call fails we simply return N/A. |
16 | 18 | """
|
17 | 19 |
|
18 |
| - chassis_info = device_info.get_chassis_info() |
19 |
| - required_keys = ['serial', 'model', 'revision'] |
20 |
| - failed_vals = ['', 'N/A'] |
21 |
| - platform_chassis = None |
| 20 | + keys = ["serial", "model", "revision"] |
22 | 21 |
|
23 |
| - for k in required_keys: |
24 |
| - if chassis_info.get(k, '') in failed_vals: |
25 |
| - if platform_chassis is None: |
| 22 | + def try_get(platform, attr, fallback): |
| 23 | + try: |
| 24 | + if platform["chassis"] is None: |
26 | 25 | import sonic_platform
|
27 |
| - platform_chassis = sonic_platform.platform.Platform().get_chassis() |
28 |
| - try: |
29 |
| - chassis_info[k] = getattr(platform_chassis, "get_".format(k))() |
30 |
| - except AttributeError: |
31 |
| - chassis_info[k] = 'N/A' |
| 26 | + platform["chassis"] = sonic_platform.platform.Platform().get_chassis() |
| 27 | + return getattr(platform["chassis"], "get_{}".format(attr))() |
| 28 | + except Exception: |
| 29 | + return 'N/A' |
| 30 | + |
| 31 | + chassis_info = device_info.get_chassis_info() |
| 32 | + |
| 33 | + if all(v is None for k, v in chassis_info.items()): |
| 34 | + platform_cache = {"chassis": None} |
| 35 | + chassis_info = {k:try_get(platform_cache, k, "N/A") for k in keys} |
32 | 36 |
|
33 | 37 | return chassis_info
|
34 | 38 |
|
|
0 commit comments