From 7ba9ee4d1c7a55a1ea518dcff16fbeaaab0eccde Mon Sep 17 00:00:00 2001 From: muthuku Date: Tue, 9 Jun 2026 13:03:22 +0000 Subject: [PATCH 1/6] added validation check for CSCwo74485 --- aci-preupgrade-validation-script.py | 16 +++++- docs/docs/validations.md | 5 +- .../compatRsSuppHw_605_M4L4.json | 18 ++++++ .../compatRsSuppHw_616_M4L4.json | 18 ++++++ .../eqptCh_m4l4_mixed_models.json | 55 +++++++++++++++++++ .../eqptCh_m4l4_model_new_cimc.json | 29 ++++++++++ .../eqptCh_m4l4_model_old_cimc.json | 29 ++++++++++ .../test_cimc_compatibilty_check.py | 53 +++++++++++++++++- 8 files changed, 218 insertions(+), 5 deletions(-) create mode 100644 tests/checks/cimc_compatibilty_check/compatRsSuppHw_605_M4L4.json create mode 100644 tests/checks/cimc_compatibilty_check/compatRsSuppHw_616_M4L4.json create mode 100644 tests/checks/cimc_compatibilty_check/eqptCh_m4l4_mixed_models.json create mode 100644 tests/checks/cimc_compatibilty_check/eqptCh_m4l4_model_new_cimc.json create mode 100644 tests/checks/cimc_compatibilty_check/eqptCh_m4l4_model_old_cimc.json diff --git a/aci-preupgrade-validation-script.py b/aci-preupgrade-validation-script.py index da1b4b9e..0e717285 100644 --- a/aci-preupgrade-validation-script.py +++ b/aci-preupgrade-validation-script.py @@ -3655,7 +3655,7 @@ def vpc_paired_switches_check(vpc_node_ids, fabric_nodes, **kwargs): @check_wrapper(check_title="APIC CIMC Compatibility") -def cimc_compatibilty_check(tversion, **kwargs): +def cimc_compatibilty_check(tversion, cversion, **kwargs): result = FAIL_UF headers = ["Node ID", "Model", "Current CIMC version", "Catalog Recommended CIMC Version", "Warning"] data = [] @@ -3679,6 +3679,20 @@ def cimc_compatibilty_check(tversion, **kwargs): recommended_cimc = compatMo[0]['compatRsSuppHw']['attributes']['cimcVersion'] warning = "" if compatMo and recommended_cimc: + + if model in ("apicm4", "apicl4") and cversion: + is_affected_apic_version = ( + (cversion.major1 == "5" and cversion.major2 == "3") + or (cversion.major1 == "6" and cversion.major2 == "0" and cversion.older_than("6.0(9e)")) + or (cversion.major1 == "6" and cversion.major2 == "1" and cversion.older_than("6.1(4h)")) + ) + if is_affected_apic_version: + if not is_firstver_gt_secondver(current_cimc, "4.3(5)"): + warning = "Upgrade the APIC software first, then proceed with the CIMC upgrade for the releases 6.0.9e/ 6.1.4h." + nodeid = eqptCh['eqptCh']['attributes']['dn'].split('/')[2] + data.append([nodeid, apic_model, current_cimc, "", warning]) + continue + if not is_firstver_gt_secondver(current_cimc, "3.0(3a)"): warning = "Multi-step Upgrade may be required, check UCS CIMC Matrix." if not is_firstver_gt_secondver(current_cimc, recommended_cimc): diff --git a/docs/docs/validations.md b/docs/docs/validations.md index 82f22119..cece00b7 100644 --- a/docs/docs/validations.md +++ b/docs/docs/validations.md @@ -253,6 +253,8 @@ The script checks the minimum recommended CIMC version for the given APIC model As the `compatRsSuppHw` object recommendation is strictly tied to the target software image, it is possible that the [Release Note Documentation][4] for your model/target version has a different recommendation than what the software recommends. Always check the release note of your Target version and APIC model to ensure you are getting the latest recommendations. +Due to the defect CSCwo74485, APIC-SERVER-M4/L4 systems will fail to boot correctly after upgrading CIMC firmware to version 4.3.5 or later from APIC releases 5.3.x/6.0.9d/6.1(3g) and below. Upgrade the APIC software first, then proceed with the CIMC upgrade for the releases 6.0.9e/ 6.1.4h and above, will avoid this issue. Follow the software advisory for this defect [CSCwo74485][70]. + !!! note Older versions of CIMC may required multi-step CIMC upgrades to get to the identified target version. Refer to the [Cisco UCS Rack Server Upgrade Matrix][22] for the latest documentation on which steps are required and support given your current and target CIMC versions. @@ -2867,4 +2869,5 @@ This check will verify the count of the `svccoreCtrlr` Managed Object and raise [66]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwr66848 [67]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwh80837 [68]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwd40071 -[69]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCws84232 \ No newline at end of file +[69]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCws84232 +[70]: https://www.cisco.com/c/en/us/td/docs/switches/datacenter/aci/apic/sw/advisory/sw-advisory-CSCwo74485.html diff --git a/tests/checks/cimc_compatibilty_check/compatRsSuppHw_605_M4L4.json b/tests/checks/cimc_compatibilty_check/compatRsSuppHw_605_M4L4.json new file mode 100644 index 00000000..a05bdec7 --- /dev/null +++ b/tests/checks/cimc_compatibilty_check/compatRsSuppHw_605_M4L4.json @@ -0,0 +1,18 @@ +[ + { + "compatRsSuppHw": { + "attributes": { + "cimcVersion": "4.0(2g)", + "dn": "uni/fabric/compcat-default/ctlrfw-apic-6.0(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4]" + } + } + }, + { + "compatRsSuppHw": { + "attributes": { + "cimcVersion": "4.0(2g)", + "dn": "uni/fabric/compcat-default/ctlrfw-apic-6.0(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4]" + } + } + } +] \ No newline at end of file diff --git a/tests/checks/cimc_compatibilty_check/compatRsSuppHw_616_M4L4.json b/tests/checks/cimc_compatibilty_check/compatRsSuppHw_616_M4L4.json new file mode 100644 index 00000000..e93939ce --- /dev/null +++ b/tests/checks/cimc_compatibilty_check/compatRsSuppHw_616_M4L4.json @@ -0,0 +1,18 @@ +[ + { + "compatRsSuppHw": { + "attributes": { + "cimcVersion": "4.0(2g)", + "dn": "uni/fabric/compcat-default/ctlrfw-apic-6.1(6)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4]" + } + } + }, + { + "compatRsSuppHw": { + "attributes": { + "cimcVersion": "4.0(2g)", + "dn": "uni/fabric/compcat-default/ctlrfw-apic-6.1(6)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4]" + } + } + } +] \ No newline at end of file diff --git a/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_mixed_models.json b/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_mixed_models.json new file mode 100644 index 00000000..24345c60 --- /dev/null +++ b/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_mixed_models.json @@ -0,0 +1,55 @@ +[ + + { + "eqptCh": { + "attributes": { + "bootSource": "bootflash", + "cimcVersion": "4.0(2f)", + "configRole": "unspecified", + "descr": "APIC-SERVER-M4", + "dn": "topology/pod-2/node-3/sys/ch", + "hybridMode": "no", + "model": "APIC-SERVER-M4" + } + } + }, + { + "eqptCh": { + "attributes": { + "bootSource": "bootflash", + "cimcVersion": "4.0(2f)", + "configRole": "unspecified", + "descr": "APIC-SERVER-L4", + "dn": "topology/pod-2/node-4/sys/ch", + "hybridMode": "no", + "model": "APIC-SERVER-L4" + } + } + }, + { + "eqptCh": { + "attributes": { + "bootSource": "bootflash", + "cimcVersion": "3.0(4l)", + "configRole": "unspecified", + "descr": "APIC-SERVER-L2", + "dn": "topology/pod-1/node-1/sys/ch", + "hybridMode": "no", + "model": "APIC-SERVER-L2" + } + } + }, + { + "eqptCh": { + "attributes": { + "bootSource": "bootflash", + "cimcVersion": "3.0(4l)", + "configRole": "unspecified", + "descr": "APIC-SERVER-M1", + "dn": "topology/pod-2/node-5/sys/ch", + "hybridMode": "no", + "model": "APIC-SERVER-M1" + } + } + } +] \ No newline at end of file diff --git a/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_model_new_cimc.json b/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_model_new_cimc.json new file mode 100644 index 00000000..708b47e5 --- /dev/null +++ b/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_model_new_cimc.json @@ -0,0 +1,29 @@ +[ + + { + "eqptCh": { + "attributes": { + "bootSource": "bootflash", + "cimcVersion": "4.5(2f)", + "configRole": "unspecified", + "descr": "APIC-SERVER-M4", + "dn": "topology/pod-2/node-3/sys/ch", + "hybridMode": "no", + "model": "APIC-SERVER-M4" + } + } + }, + { + "eqptCh": { + "attributes": { + "bootSource": "bootflash", + "cimcVersion": "4.5(2f)", + "configRole": "unspecified", + "descr": "APIC-SERVER-L4", + "dn": "topology/pod-2/node-4/sys/ch", + "hybridMode": "no", + "model": "APIC-SERVER-L4" + } + } + } +] \ No newline at end of file diff --git a/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_model_old_cimc.json b/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_model_old_cimc.json new file mode 100644 index 00000000..05396766 --- /dev/null +++ b/tests/checks/cimc_compatibilty_check/eqptCh_m4l4_model_old_cimc.json @@ -0,0 +1,29 @@ +[ + + { + "eqptCh": { + "attributes": { + "bootSource": "bootflash", + "cimcVersion": "4.0(2f)", + "configRole": "unspecified", + "descr": "APIC-SERVER-M4", + "dn": "topology/pod-2/node-3/sys/ch", + "hybridMode": "no", + "model": "APIC-SERVER-M4" + } + } + }, + { + "eqptCh": { + "attributes": { + "bootSource": "bootflash", + "cimcVersion": "4.0(2f)", + "configRole": "unspecified", + "descr": "APIC-SERVER-L4", + "dn": "topology/pod-2/node-4/sys/ch", + "hybridMode": "no", + "model": "APIC-SERVER-L4" + } + } + } +] \ No newline at end of file diff --git a/tests/checks/cimc_compatibilty_check/test_cimc_compatibilty_check.py b/tests/checks/cimc_compatibilty_check/test_cimc_compatibilty_check.py index cb587fb3..a77044e8 100644 --- a/tests/checks/cimc_compatibilty_check/test_cimc_compatibilty_check.py +++ b/tests/checks/cimc_compatibilty_check/test_cimc_compatibilty_check.py @@ -17,15 +17,59 @@ compatRsSuppHwL2_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.0(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl2].json' compatRsSuppHwM1_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.0(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm1].json' +compatRsSuppHwL4_605_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.0(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4].json' +compatRsSuppHwM4_605_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.0(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4].json' +compatRsSuppHwL4_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.1(6)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4].json' +compatRsSuppHwM4_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.1(6)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4].json' @pytest.mark.parametrize( - "icurl_outputs, tversion, expected_result", + "icurl_outputs, tversion, cversion, expected_result", [ + #m4/l4 model check and targeting affected version and cversion affected and cimc < 4.3.5 + ( + {eqptCh_api: read_data(dir, "eqptCh_m4l4_model_old_cimc.json"), + compatRsSuppHwL4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json"), + compatRsSuppHwM4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json")}, + "6.0(5a)", + "5.3(1a)", + script.FAIL_UF, + ), + #m4/l4 with other apic server model and check targeting affect version and cversion affected and cimc < 4.3.5 + ( + { + eqptCh_api: read_data(dir, "eqptCh_m4l4_mixed_models.json"), + compatRsSuppHwL4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json"), + compatRsSuppHwM4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json"), + compatRsSuppHwL2_api: read_data(dir, "compatRsSuppHw_605_L2.json"), + compatRsSuppHwM1_api: read_data(dir, "compatRsSuppHw_605_M1.json")}, + "6.0(5a)", + "5.3(1a)", + script.FAIL_UF, + ), + # current cimc > 3.4.5 (known issue) but APIC current version is not affected + ( + {eqptCh_api: read_data(dir, "eqptCh_m4l4_model_new_cimc.json"), + compatRsSuppHwL4_api: read_data(dir, "compatRsSuppHw_616_M4L4.json"), + compatRsSuppHwM4_api: read_data(dir, "compatRsSuppHw_616_M4L4.json")}, + "6.1(6a)", + "6.1(5a)", + script.PASS, + ), + #version affected and cimc version > 4.3.5 + ( + {eqptCh_api: read_data(dir, "eqptCh_m4l4_model_new_cimc.json"), + compatRsSuppHwL4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json"), + compatRsSuppHwM4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json")}, + "6.0(5a)", + "5.3(1a)", + script.PASS, + ), ( {eqptCh_api: read_data(dir, "eqptCh_reallyoldver.json"), compatRsSuppHwL2_api: read_data(dir, "compatRsSuppHw_605_L2.json"), compatRsSuppHwM1_api: read_data(dir, "compatRsSuppHw_605_M1.json")}, "6.0(5a)", + None, script.FAIL_UF, ), ( @@ -33,6 +77,7 @@ compatRsSuppHwL2_api: read_data(dir, "compatRsSuppHw_605_L2.json"), compatRsSuppHwM1_api: read_data(dir, "compatRsSuppHw_605_M1.json")}, "6.0(5a)", + None, script.FAIL_UF, ), ( @@ -40,6 +85,7 @@ compatRsSuppHwL2_api: read_data(dir, "compatRsSuppHw_605_L2.json"), compatRsSuppHwM1_api: read_data(dir, "compatRsSuppHw_605_M1.json")}, "6.0(5a)", + None, script.PASS, ), # Seen in QA testing where version + model does not have catalog entry @@ -48,10 +94,11 @@ compatRsSuppHwL2_api: read_data(dir, "compatRsSuppHw_605_L2.json"), compatRsSuppHwM1_api: read_data(dir, "compatRsSuppHw_empty.json")}, "6.0(5a)", + None, script.MANUAL, ), ], ) -def test_logic(run_check, mock_icurl, tversion, expected_result): - result = run_check(tversion=script.AciVersion(tversion)) +def test_logic(run_check, mock_icurl, tversion, cversion, expected_result): + result = run_check(tversion=script.AciVersion(tversion), cversion=script.AciVersion(cversion) if cversion is not None else None) assert result.result == expected_result From 3292126ca6286960146527ee0eed458d00bd9868 Mon Sep 17 00:00:00 2001 From: muthuku Date: Wed, 10 Jun 2026 04:56:55 +0000 Subject: [PATCH 2/6] updated warning message --- aci-preupgrade-validation-script.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/aci-preupgrade-validation-script.py b/aci-preupgrade-validation-script.py index 0e717285..31315f76 100644 --- a/aci-preupgrade-validation-script.py +++ b/aci-preupgrade-validation-script.py @@ -3679,7 +3679,7 @@ def cimc_compatibilty_check(tversion, cversion, **kwargs): recommended_cimc = compatMo[0]['compatRsSuppHw']['attributes']['cimcVersion'] warning = "" if compatMo and recommended_cimc: - + #defect CSCwo74485 cimc compatibility check for M4/L4 model. if model in ("apicm4", "apicl4") and cversion: is_affected_apic_version = ( (cversion.major1 == "5" and cversion.major2 == "3") @@ -3688,11 +3688,10 @@ def cimc_compatibilty_check(tversion, cversion, **kwargs): ) if is_affected_apic_version: if not is_firstver_gt_secondver(current_cimc, "4.3(5)"): - warning = "Upgrade the APIC software first, then proceed with the CIMC upgrade for the releases 6.0.9e/ 6.1.4h." + warning = "Upgrade the APIC software to 6.0.9e and above 6.1.4h and above, then proceed with the CIMC upgrade to 4.3.5 and above. Please refer to the CSCwo74485 advisory in the release notes." nodeid = eqptCh['eqptCh']['attributes']['dn'].split('/')[2] data.append([nodeid, apic_model, current_cimc, "", warning]) continue - if not is_firstver_gt_secondver(current_cimc, "3.0(3a)"): warning = "Multi-step Upgrade may be required, check UCS CIMC Matrix." if not is_firstver_gt_secondver(current_cimc, recommended_cimc): From 8095c70a450d4264784d2419168dcd589332c294 Mon Sep 17 00:00:00 2001 From: muthuku Date: Thu, 18 Jun 2026 09:07:40 +0000 Subject: [PATCH 3/6] updated script --- aci-preupgrade-validation-script.py | 28 ++++++++++--------- docs/docs/validations.md | 5 ++-- ...M4L4.json => compatRsSuppHw_615_M4L4.json} | 4 +-- .../test_cimc_compatibilty_check.py | 24 ++++++++-------- 4 files changed, 32 insertions(+), 29 deletions(-) rename tests/checks/cimc_compatibilty_check/{compatRsSuppHw_616_M4L4.json => compatRsSuppHw_615_M4L4.json} (73%) diff --git a/aci-preupgrade-validation-script.py b/aci-preupgrade-validation-script.py index e757c335..b27a83fe 100644 --- a/aci-preupgrade-validation-script.py +++ b/aci-preupgrade-validation-script.py @@ -3670,6 +3670,21 @@ def cimc_compatibilty_check(tversion, cversion, **kwargs): apic_model = eqptCh['eqptCh']['attributes']['descr'] model = "apic" + apic_model.split('-')[2].lower() current_cimc = eqptCh['eqptCh']['attributes']['cimcVersion'] + + #defect CSCwo74485 cimc compatibility check for M4/L4 model. + if model in ("apicm4", "apicl4") and cversion: + is_affected_apic_version = ( + (cversion.major1 == "5" and cversion.major2 == "3") + or (cversion.major1 == "6" and cversion.major2 == "0" and cversion.older_than("6.0(9e)")) + or (cversion.major1 == "6" and cversion.major2 == "1" and cversion.older_than("6.1(4h)")) + ) + if is_affected_apic_version: + if not is_firstver_gt_secondver(current_cimc, "4.3(5)"): + warning = "Upgrade the APIC software to 6.0.9e and above 6.1.4h and above, then proceed with the CIMC upgrade to 4.3.5 and above. Please refer to the CSCwo74485 advisory in the release notes." + nodeid = eqptCh['eqptCh']['attributes']['dn'].split('/')[2] + data.append([nodeid, apic_model, current_cimc, "", warning]) + continue + compat_lookup_dn = "uni/fabric/compcat-default/ctlrfw-apic-" + tversion.simple_version + \ "/rssuppHw-[uni/fabric/compcat-default/ctlrhw-" + model + "].json" compatMo = icurl('mo', compat_lookup_dn) @@ -3679,19 +3694,6 @@ def cimc_compatibilty_check(tversion, cversion, **kwargs): recommended_cimc = compatMo[0]['compatRsSuppHw']['attributes']['cimcVersion'] warning = "" if compatMo and recommended_cimc: - #defect CSCwo74485 cimc compatibility check for M4/L4 model. - if model in ("apicm4", "apicl4") and cversion: - is_affected_apic_version = ( - (cversion.major1 == "5" and cversion.major2 == "3") - or (cversion.major1 == "6" and cversion.major2 == "0" and cversion.older_than("6.0(9e)")) - or (cversion.major1 == "6" and cversion.major2 == "1" and cversion.older_than("6.1(4h)")) - ) - if is_affected_apic_version: - if not is_firstver_gt_secondver(current_cimc, "4.3(5)"): - warning = "Upgrade the APIC software to 6.0.9e and above 6.1.4h and above, then proceed with the CIMC upgrade to 4.3.5 and above. Please refer to the CSCwo74485 advisory in the release notes." - nodeid = eqptCh['eqptCh']['attributes']['dn'].split('/')[2] - data.append([nodeid, apic_model, current_cimc, "", warning]) - continue if not is_firstver_gt_secondver(current_cimc, "3.0(3a)"): warning = "Multi-step Upgrade may be required, check UCS CIMC Matrix." if not is_firstver_gt_secondver(current_cimc, recommended_cimc): diff --git a/docs/docs/validations.md b/docs/docs/validations.md index 9fda3150..00abde6d 100644 --- a/docs/docs/validations.md +++ b/docs/docs/validations.md @@ -253,7 +253,7 @@ The script checks the minimum recommended CIMC version for the given APIC model As the `compatRsSuppHw` object recommendation is strictly tied to the target software image, it is possible that the [Release Note Documentation][4] for your model/target version has a different recommendation than what the software recommends. Always check the release note of your Target version and APIC model to ensure you are getting the latest recommendations. -Due to the defect CSCwo74485, APIC-SERVER-M4/L4 systems will fail to boot correctly after upgrading CIMC firmware to version 4.3.5 or later from APIC releases 5.3.x/6.0.9d/6.1(3g) and below. Upgrade the APIC software first, then proceed with the CIMC upgrade for the releases 6.0.9e/ 6.1.4h and above, will avoid this issue. Follow the software advisory for this defect [CSCwo74485][71]. +Due to the defect CSCwo74485, APIC-SERVER-M4/L4 systems will fail to boot correctly after upgrading CIMC firmware to version 4.3.5 or later from APIC releases 5.3.x/6.0.9d/6.1(3g) and below. Upgrade the APIC software first, then proceed with the CIMC upgrade for the releases 6.0.9e/ 6.1.4h and above, will avoid this issue. Follow the software advisory for this defect [CSCwo74485][72]. !!! note Older versions of CIMC may required multi-step CIMC upgrades to get to the identified target version. Refer to the [Cisco UCS Rack Server Upgrade Matrix][22] for the latest documentation on which steps are required and support given your current and target CIMC versions. @@ -2869,4 +2869,5 @@ This check will verify the count of the `svccoreCtrlr` Managed Object and raise [68]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwd40071 [69]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCws84232 [70]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCvo27498 -[71]: https://www.cisco.com/c/en/us/td/docs/switches/datacenter/aci/apic/sw/advisory/sw-advisory-CSCwo74485.html \ No newline at end of file +[71]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwt78235 +[72]: https://www.cisco.com/c/en/us/td/docs/switches/datacenter/aci/apic/sw/advisory/sw-advisory-CSCwo74485.html \ No newline at end of file diff --git a/tests/checks/cimc_compatibilty_check/compatRsSuppHw_616_M4L4.json b/tests/checks/cimc_compatibilty_check/compatRsSuppHw_615_M4L4.json similarity index 73% rename from tests/checks/cimc_compatibilty_check/compatRsSuppHw_616_M4L4.json rename to tests/checks/cimc_compatibilty_check/compatRsSuppHw_615_M4L4.json index e93939ce..d8c7b772 100644 --- a/tests/checks/cimc_compatibilty_check/compatRsSuppHw_616_M4L4.json +++ b/tests/checks/cimc_compatibilty_check/compatRsSuppHw_615_M4L4.json @@ -3,7 +3,7 @@ "compatRsSuppHw": { "attributes": { "cimcVersion": "4.0(2g)", - "dn": "uni/fabric/compcat-default/ctlrfw-apic-6.1(6)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4]" + "dn": "uni/fabric/compcat-default/ctlrfw-apic-6.1(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4]" } } }, @@ -11,7 +11,7 @@ "compatRsSuppHw": { "attributes": { "cimcVersion": "4.0(2g)", - "dn": "uni/fabric/compcat-default/ctlrfw-apic-6.1(6)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4]" + "dn": "uni/fabric/compcat-default/ctlrfw-apic-6.1(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4]" } } } diff --git a/tests/checks/cimc_compatibilty_check/test_cimc_compatibilty_check.py b/tests/checks/cimc_compatibilty_check/test_cimc_compatibilty_check.py index a77044e8..4db1b7ea 100644 --- a/tests/checks/cimc_compatibilty_check/test_cimc_compatibilty_check.py +++ b/tests/checks/cimc_compatibilty_check/test_cimc_compatibilty_check.py @@ -19,8 +19,8 @@ compatRsSuppHwL4_605_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.0(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4].json' compatRsSuppHwM4_605_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.0(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4].json' -compatRsSuppHwL4_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.1(6)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4].json' -compatRsSuppHwM4_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.1(6)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4].json' +compatRsSuppHwL4_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.1(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicl4].json' +compatRsSuppHwM4_api = 'uni/fabric/compcat-default/ctlrfw-apic-6.1(5)/rssuppHw-[uni/fabric/compcat-default/ctlrhw-apicm4].json' @pytest.mark.parametrize( "icurl_outputs, tversion, cversion, expected_result", @@ -30,8 +30,8 @@ {eqptCh_api: read_data(dir, "eqptCh_m4l4_model_old_cimc.json"), compatRsSuppHwL4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json"), compatRsSuppHwM4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json")}, - "6.0(5a)", - "5.3(1a)", + "6.0(5h)", + "5.3(1d)", script.FAIL_UF, ), #m4/l4 with other apic server model and check targeting affect version and cversion affected and cimc < 4.3.5 @@ -42,17 +42,17 @@ compatRsSuppHwM4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json"), compatRsSuppHwL2_api: read_data(dir, "compatRsSuppHw_605_L2.json"), compatRsSuppHwM1_api: read_data(dir, "compatRsSuppHw_605_M1.json")}, - "6.0(5a)", - "5.3(1a)", + "6.0(5h)", + "5.3(1d)", script.FAIL_UF, ), # current cimc > 3.4.5 (known issue) but APIC current version is not affected ( {eqptCh_api: read_data(dir, "eqptCh_m4l4_model_new_cimc.json"), - compatRsSuppHwL4_api: read_data(dir, "compatRsSuppHw_616_M4L4.json"), - compatRsSuppHwM4_api: read_data(dir, "compatRsSuppHw_616_M4L4.json")}, - "6.1(6a)", - "6.1(5a)", + compatRsSuppHwL4_api: read_data(dir, "compatRsSuppHw_615_M4L4.json"), + compatRsSuppHwM4_api: read_data(dir, "compatRsSuppHw_615_M4L4.json")}, + "6.1(5e)", + "6.1(4h)", script.PASS, ), #version affected and cimc version > 4.3.5 @@ -60,8 +60,8 @@ {eqptCh_api: read_data(dir, "eqptCh_m4l4_model_new_cimc.json"), compatRsSuppHwL4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json"), compatRsSuppHwM4_605_api: read_data(dir, "compatRsSuppHw_605_M4L4.json")}, - "6.0(5a)", - "5.3(1a)", + "6.0(5h)", + "5.3(1d)", script.PASS, ), ( From 71d731d25ea67ff6e9dd0c16edcd4a7b73a9115a Mon Sep 17 00:00:00 2001 From: muthuku Date: Tue, 23 Jun 2026 09:19:15 +0000 Subject: [PATCH 4/6] updated the warning message --- aci-preupgrade-validation-script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aci-preupgrade-validation-script.py b/aci-preupgrade-validation-script.py index b27a83fe..b3bfe334 100644 --- a/aci-preupgrade-validation-script.py +++ b/aci-preupgrade-validation-script.py @@ -3680,7 +3680,7 @@ def cimc_compatibilty_check(tversion, cversion, **kwargs): ) if is_affected_apic_version: if not is_firstver_gt_secondver(current_cimc, "4.3(5)"): - warning = "Upgrade the APIC software to 6.0.9e and above 6.1.4h and above, then proceed with the CIMC upgrade to 4.3.5 and above. Please refer to the CSCwo74485 advisory in the release notes." + warning = "Upgrade the APIC software to 6.0.9e and above 6.1.4h and above, then proceed with the CIMC upgrade. Refer to the release notes for the recommended CIMC version and CSCwo74485 advisory for further detail" nodeid = eqptCh['eqptCh']['attributes']['dn'].split('/')[2] data.append([nodeid, apic_model, current_cimc, "", warning]) continue From e17c689a64b951329549682edb73160ce2a4661f Mon Sep 17 00:00:00 2001 From: muthuku Date: Tue, 23 Jun 2026 12:52:25 +0000 Subject: [PATCH 5/6] updated doc link --- docs/docs/validations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/validations.md b/docs/docs/validations.md index 8c38e7fa..7e1ddd8a 100644 --- a/docs/docs/validations.md +++ b/docs/docs/validations.md @@ -2877,4 +2877,4 @@ This bug [CSCwt78235][71] validates `F0467` faults where `changeSet` contains 'b [69]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCws84232 [70]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCvo27498 [71]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwt78235 -[72]: https://www.cisco.com/c/en/us/td/docs/switches/datacenter/aci/apic/sw/advisory/sw-advisory-CSCwo74485.html +[72]: https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwo74485 From a514cd7c36f5c3122274949110edd9fa3873ab3b Mon Sep 17 00:00:00 2001 From: muthuku Date: Tue, 30 Jun 2026 07:18:52 +0000 Subject: [PATCH 6/6] updated the comments --- aci-preupgrade-validation-script.py | 9 +++++++-- docs/docs/validations.md | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/aci-preupgrade-validation-script.py b/aci-preupgrade-validation-script.py index 572938f2..a3ca8539 100644 --- a/aci-preupgrade-validation-script.py +++ b/aci-preupgrade-validation-script.py @@ -3662,6 +3662,8 @@ def cimc_compatibilty_check(tversion, cversion, **kwargs): recommended_action = 'Check Release note of APIC Model/version for latest recommendations.' doc_url = 'https://datacenter.github.io/ACI-Pre-Upgrade-Validation-Script/validations/#compatibility-cimc-version' + m4l4_model_affected_version_found = False + apic_obj = icurl('class', 'eqptCh.json?query-target-filter=wcard(eqptCh.descr,"APIC")') if apic_obj and tversion: try: @@ -3680,9 +3682,9 @@ def cimc_compatibilty_check(tversion, cversion, **kwargs): ) if is_affected_apic_version: if not is_firstver_gt_secondver(current_cimc, "4.3(5)"): - warning = "Upgrade the APIC software to 6.0.9e and above 6.1.4h and above, then proceed with the CIMC upgrade. Refer to the release notes for the recommended CIMC version and CSCwo74485 advisory for further detail" + m4l4_model_affected_version_found = True nodeid = eqptCh['eqptCh']['attributes']['dn'].split('/')[2] - data.append([nodeid, apic_model, current_cimc, "", warning]) + data.append([nodeid, apic_model, current_cimc, "-", "-"]) continue compat_lookup_dn = "uni/fabric/compcat-default/ctlrfw-apic-" + tversion.simple_version + \ @@ -3703,6 +3705,9 @@ def cimc_compatibilty_check(tversion, cversion, **kwargs): if not data: result = PASS + if m4l4_model_affected_version_found: + recommended_action = 'Intentionally Upgrade your APICs to a fixed target version [6.0(9e)+ or (6.1(4h)+] BEFORE upgrading CIMC to avoid hitting CSCwo74485.' + except KeyError: return Result(result=MANUAL, msg="eqptCh does not have cimcVersion parameter on this version", headers=headers, data=data, recommended_action=recommended_action, doc_url=doc_url) else: diff --git a/docs/docs/validations.md b/docs/docs/validations.md index 9be11523..76e9c140 100644 --- a/docs/docs/validations.md +++ b/docs/docs/validations.md @@ -257,7 +257,7 @@ The script checks the minimum recommended CIMC version for the given APIC model As the `compatRsSuppHw` object recommendation is strictly tied to the target software image, it is possible that the [Release Note Documentation][4] for your model/target version has a different recommendation than what the software recommends. Always check the release note of your Target version and APIC model to ensure you are getting the latest recommendations. -Due to the defect CSCwo74485, APIC-SERVER-M4/L4 systems will fail to boot correctly after upgrading CIMC firmware to version 4.3.5 or later from APIC releases 5.3.x/6.0.9d/6.1(3g) and below. Upgrade the APIC software first, then proceed with the CIMC upgrade for the releases 6.0.9e/ 6.1.4h and above, will avoid this issue. Follow the software advisory for this defect [CSCwo74485][73]. +Due to the defect CSCwo74485, APIC-SERVER-M4/L4 systems will fail to boot correctly after upgrading CIMC firmware to version 4.3.5 or later while on Non-fixed APIC releases 5.3.x/6.0.9d/6.1(3g) and below. Upgrade the APIC software first, then proceed with the CIMC upgrade for the releases 6.0.9e/ 6.1.4h and above, will avoid this issue. Follow the software advisory for this defect [CSCwo74485][73]. !!! note Older versions of CIMC may required multi-step CIMC upgrades to get to the identified target version. Refer to the [Cisco UCS Rack Server Upgrade Matrix][22] for the latest documentation on which steps are required and support given your current and target CIMC versions.