Skip to content

Commit 6ccd6d9

Browse files
Added pre-upgrade validation for N9K-C9408 with more than 6 N9K-X9400-16W LEM's for the bug CSCws82819 (#354)
* Added a new check for the bug 'CSCws82819N9K-C9408 boot loop on 16.1.2f and later with 6 or more LEMs'
1 parent 67dab4b commit 6ccd6d9

11 files changed

Lines changed: 337 additions & 2 deletions

aci-preupgrade-validation-script.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6142,6 +6142,55 @@ def is_affected_target(ver):
61426142
return Result(result=result, headers=headers, data=data, recommended_action=recommended_action, doc_url=doc_url)
61436143

61446144

6145+
@check_wrapper(check_title='N9K-C9408 with more than 5 N9K-X9400-16W LEMs')
6146+
def n9k_c9408_model_lem_count_check(tversion, fabric_nodes, **kwargs):
6147+
result = PASS
6148+
headers = ["Node ID", "Switch Model", "LEM Model", "LEM Count"]
6149+
data = []
6150+
recommended_action = (
6151+
"N9K-C9408 switches configured with >5 N9K-X9400-16W LEMs will enter a boot loop if upgraded to impacted release of CSCws82819. Upgrade to Fix version or Use less than 6 LEMS on impacted release"
6152+
)
6153+
doc_url = 'https://datacenter.github.io/ACI-Pre-Upgrade-Validation-Script/validations/#n9k-c9408-with-more-than-5-n9k-x9400-16w-lems'
6154+
6155+
if not tversion:
6156+
return Result(result=MANUAL, msg=TVER_MISSING)
6157+
6158+
if tversion.older_than("6.1(2f)") or (tversion.newer_than("6.1(5e)") and not tversion.same_as("6.2(1g)")):
6159+
return Result(result=NA, msg=VER_NOT_AFFECTED)
6160+
6161+
affected_nodes = {}
6162+
for node in fabric_nodes:
6163+
node_id = node['fabricNode']['attributes']['id']
6164+
model = node['fabricNode']['attributes']['model']
6165+
if model == "N9K-C9408":
6166+
affected_nodes[node_id] = "N9K-C9408"
6167+
6168+
if not affected_nodes:
6169+
return Result(result=PASS, msg='No N9K-C9408 nodes found. Skipping.')
6170+
6171+
eqptLC_api = 'eqptLC.json?query-target-filter=eq(eqptLC.model,"N9K-X9400-16W")'
6172+
eqptLCs = icurl('class', eqptLC_api)
6173+
6174+
lem_count_per_node = defaultdict(int)
6175+
for eqptLC in eqptLCs:
6176+
dn = eqptLC['eqptLC']['attributes']['dn']
6177+
dn_match = re.search(node_regex, dn)
6178+
if not dn_match:
6179+
continue
6180+
node_id = dn_match.group("node")
6181+
if node_id in affected_nodes:
6182+
lem_count_per_node[node_id] += 1
6183+
6184+
for node_id in sorted(affected_nodes, key=int):
6185+
lem_count = lem_count_per_node[node_id]
6186+
if lem_count > 5:
6187+
data.append([node_id, affected_nodes[node_id], "N9K-X9400-16W", lem_count])
6188+
6189+
if data:
6190+
result = FAIL_O
6191+
6192+
return Result(result=result, headers=headers, data=data, recommended_action=recommended_action, doc_url=doc_url)
6193+
61456194
# ---- Script Execution ----
61466195

61476196

@@ -6307,6 +6356,7 @@ class CheckManager:
63076356
configpush_shard_check,
63086357
auto_firmware_update_on_switch_check,
63096358
rogue_ep_coop_exception_mac_check,
6359+
n9k_c9408_model_lem_count_check,
63106360
]
63116361
ssh_checks = [
63126362
# General
@@ -6478,3 +6528,4 @@ def main(_args=None):
64786528
prints(msg)
64796529
log.error(msg, exc_info=True)
64806530
sys.exit(1)
6531+

docs/docs/validations.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ Items | Defect | This Script
195195
[Policydist configpushShardCont Crash][d28] | CSCwp95515 | :white_check_mark: | :no_entry_sign:
196196
[Auto Firmware Update on Switch Discovery][d29] | CSCwe83941 | :white_check_mark: | :no_entry_sign:
197197
[Rogue EP Exception List missing on switches][d30] | CSCwp64296 | :white_check_mark: | :no_entry_sign:
198+
[N9K-C9408 with more than 5 N9K-X9400-16W LEMs][d31] | CSCws82819 | :white_check_mark: | :no_entry_sign:
198199

199200
[d1]: #ep-announce-compatibility
200201
[d2]: #eventmgr-db-size-defect-susceptibility
@@ -226,7 +227,7 @@ Items | Defect | This Script
226227
[d28]: #policydist-configpushshardcont-crash
227228
[d29]: #auto-firmware-update-on-switch-discovery
228229
[d30]: #rogue-ep-exception-list-missing-on-switches
229-
230+
[d31]: #n9k-c9408-with-more-than-5-n9k-x9400-16w-lems
230231

231232
## General Check Details
232233

@@ -2683,6 +2684,13 @@ The root cause is that internal objects called `presListener` for Rogue/COOP Exc
26832684
Recommended action: Delete the affected exception list and create it again. If needed, contact Cisco TAC to help recover missing `presListener` objects on APICs.
26842685

26852686

2687+
### N9K-C9408 with more than 5 N9K-X9400-16W LEMs
2688+
2689+
Due to defect [CSCws82819][65], N9K-C9408 switch will experience a boot loop with dt_helper process crash if upgraded to versions 16.1(2f) to 16.1(5) or 16.2(1g) with more than 5 N9K-X9400-16W LEMs installed.
2690+
2691+
To avoid this issue, please upgrade to fix version or use less than 6 N9K-X9400-16W in one chassis.
2692+
2693+
26862694
[0]: https://github.com/datacenter/ACI-Pre-Upgrade-Validation-Script
26872695
[1]: https://www.cisco.com/c/dam/en/us/td/docs/Website/datacenter/apicmatrix/index.html
26882696
[2]: https://www.cisco.com/c/en/us/support/switches/nexus-9000-series-switches/products-release-notes-list.html
@@ -2747,4 +2755,5 @@ Recommended action: Delete the affected exception list and create it again. If n
27472755
[61]: https://www.cisco.com/c/en/us/solutions/collateral/data-center-virtualization/application-centric-infrastructure/white-paper-c11-743951.html#EnablePolicyCompression
27482756
[62]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwe83941
27492757
[63]: https://www.cisco.com/c/en/us/td/docs/dcn/aci/apic/all/apic-installation-aci-upgrade-downgrade/Cisco-APIC-Installation-ACI-Upgrade-Downgrade-Guide/m-auto-firmware-update.html
2750-
[64]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwp64296
2758+
[64]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwp64296
2759+
[65]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCws82819
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-1/lc", "model": "N9K-X9400-16W"}}},
3+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-2/lc", "model": "N9K-X9400-16W"}}},
4+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-3/lc", "model": "N9K-X9400-16W"}}},
5+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-4/lc", "model": "N9K-X9400-16W"}}},
6+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-5/lc", "model": "N9K-X9400-16W"}}}
7+
]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-1/lc", "model": "N9K-X9400-16W"}}},
3+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-2/lc", "model": "N9K-X9400-16W"}}},
4+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-3/lc", "model": "N9K-X9400-16W"}}},
5+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-4/lc", "model": "N9K-X9400-16W"}}},
6+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-5/lc", "model": "N9K-X9400-16W"}}},
7+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-6/lc", "model": "N9K-X9400-16W"}}}
8+
]
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
[
2+
{
3+
"eqptLC": {
4+
"attributes": {
5+
"dn": "topology/pod-1/node-101/sys/ch/lcslot-1/lc",
6+
"model": "N9K-X9400-16W"
7+
}
8+
}
9+
},
10+
{
11+
"eqptLC": {
12+
"attributes": {
13+
"dn": "topology/pod-1/node-101/sys/ch/lcslot-2/lc",
14+
"model": "N9K-X9400-16W"
15+
}
16+
}
17+
},
18+
{
19+
"eqptLC": {
20+
"attributes": {
21+
"dn": "topology/pod-1/node-101/sys/ch/lcslot-3/lc",
22+
"model": "N9K-X9400-16W"
23+
}
24+
}
25+
},
26+
{
27+
"eqptLC": {
28+
"attributes": {
29+
"dn": "topology/pod-1/node-101/sys/ch/lcslot-4/lc",
30+
"model": "N9K-X9400-16W"
31+
}
32+
}
33+
},
34+
{
35+
"eqptLC": {
36+
"attributes": {
37+
"dn": "topology/pod-1/node-101/sys/ch/lcslot-5/lc",
38+
"model": "N9K-X9400-16W"
39+
}
40+
}
41+
},
42+
{
43+
"eqptLC": {
44+
"attributes": {
45+
"dn": "topology/pod-1/node-101/sys/ch/lcslot-6/lc",
46+
"model": "N9K-X9400-16W"
47+
}
48+
}
49+
},
50+
{
51+
"eqptLC": {
52+
"attributes": {
53+
"dn": "topology/pod-1/node-101/sys/ch/lcslot-7/lc",
54+
"model": "N9K-X9400-16W"
55+
}
56+
}
57+
}
58+
]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[
2+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-1/lc", "model": "N9K-X9400-16W"}}},
3+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-2/lc", "model": "N9K-X9400-16W"}}},
4+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-3/lc", "model": "N9K-X9400-16W"}}},
5+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-4/lc", "model": "N9K-X9400-16W"}}},
6+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-5/lc", "model": "N9K-X9400-16W"}}},
7+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-101/sys/ch/lcslot-6/lc", "model": "N9K-X9400-16W"}}},
8+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-102/sys/ch/lcslot-1/lc", "model": "N9K-X9400-16W"}}},
9+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-102/sys/ch/lcslot-2/lc", "model": "N9K-X9400-16W"}}},
10+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-102/sys/ch/lcslot-3/lc", "model": "N9K-X9400-16W"}}},
11+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-102/sys/ch/lcslot-4/lc", "model": "N9K-X9400-16W"}}},
12+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-102/sys/ch/lcslot-5/lc", "model": "N9K-X9400-16W"}}},
13+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-102/sys/ch/lcslot-6/lc", "model": "N9K-X9400-16W"}}},
14+
{"eqptLC": {"attributes": {"dn": "topology/pod-1/node-201/sys/ch/lcslot-1/lc", "model": "N9K-X9400-16W"}}}
15+
]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
[
2+
{
3+
"fabricNode": {
4+
"attributes": {
5+
"id": "101",
6+
"model": "N9K-C9408"
7+
}
8+
}
9+
},
10+
{
11+
"fabricNode": {
12+
"attributes": {
13+
"id": "102",
14+
"model": "N9K-C9408"
15+
}
16+
}
17+
},
18+
{
19+
"fabricNode": {
20+
"attributes": {
21+
"id": "201",
22+
"model": "N9K-C93180YC-FX"
23+
}
24+
}
25+
}
26+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[
2+
{
3+
"fabricNode": {
4+
"attributes": {
5+
"id": "101",
6+
"model": "N9K-C9408"
7+
}
8+
}
9+
}
10+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[
2+
{
3+
"fabricNode": {
4+
"attributes": {
5+
"id": "101",
6+
"model": "N9K-C93180YC-FX"
7+
}
8+
}
9+
}
10+
]

0 commit comments

Comments
 (0)