New validation for Verifying Cluster Interface Configuration For Deprecated RsCIfAtt Object#394
Conversation
| relation_dn = relation_attributes["dn"].strip() | ||
| if not relation_dn: | ||
| continue | ||
| target_dn = get_target_dn(relation_attributes) |
There was a problem hiding this comment.
dn is the full path of the relationship object, and tDn is the path of the target interface object it is attached to.
No need of check for tDN.
There was a problem hiding this comment.
i agree. its not resolved. at all.
There was a problem hiding this comment.
Comparison now uses full relation DN instead of tDn and handles rscIfAtt vs rscIfAttN differences before matching.
|
|
||
|
|
||
| @check_wrapper(check_title="Cleanup vnsRsCIfAtt usage in services") | ||
| def vns_rscifatt_cleanup_check(tversion, **kwargs): |
There was a problem hiding this comment.
change the proper function name and title
There was a problem hiding this comment.
Updated name and title
|
|
||
| Impact: | ||
|
|
||
| If any `vnsRsCIfAtt` relation exists without a matching `vnsRsCIfAttN` for the same concrete interface target (`tDn`), the upgrade is outage-risky and should be treated as affected. |
There was a problem hiding this comment.
please update the document as per impact and requirement.
| continue | ||
| missing_dn = old_relation_dn_by_key[relation_key] | ||
| tenant_name, device_name, logical_interface, concrete_interface = parse_relation_context(missing_dn) | ||
| data.append([tenant_name, device_name, logical_interface, concrete_interface, missing_dn]) |
There was a problem hiding this comment.
where is that fault case handled for post upgrade case..
fault : F1690
uni/tn-CSCwj49418/lDevVip-test/lIf-intf-cons/vnsConfIssue-lif-invalid-CIf
Configuration is invalid due to LIf has an invalid CIf
There was a problem hiding this comment.
As per below comment added by Lovkesh,
"After doing upgarde from 605h to 615e.
fab3-apic# moquery -c vnsRsCIfAtt | grep dn
fab3-apic# moquery -c vnsRsCIfAttN | grep dn
dn : uni/tn-CSCwj49418/lDevVip-test/lIf-intf-prov/rscIfAttN-[uni/tn-CSCwj49418/lDevVip-test/cDev-cdev/cIf-[prov]]
fab3-apic#
Gui shows cIf-[prov] deleted from concrete device interface.
and fault raised
F1690
Minor
2026-05-29T13:37:55.525+00:00
Raised
uni/tn-CSCwj49418/lDevVip-test/lIf-intf-cons/vnsConfIssue-lif-invalid-CIf
Configuration is invalid due to LIf has an invalid CIf
Config
configuration-failed
ignorable:no, issue:lif-invalid-CIf. this Fault removed asap i attached the cluster interface."
It'll be seen after upgrade to 6.1(5e). But if older mo config is not there in the new mo config, we are recommending cu to add the missing cluster interface in the lower version itself before doing upgrade. Then we will not see the fault post upgradation and that's the reason current check exists what I feel.
There was a problem hiding this comment.
do not consider any fault in this case. You can ignore that. please do repro and test the pre-post upgrade and script.
There was a problem hiding this comment.
Yes, have recreated the issue in 5.2(4d) and 5.3(2f) and upgraded to 6.0(5h) and validated the script. I can do the validation one more time by upgrading to 6.1(5e)
| [N9K-C9408 with more than 5 N9K-X9400-16W LEMs][d31] | CSCws82819 | :white_check_mark: | :no_entry_sign: | ||
| [Multi-Pod Modular Spine Bootscript File][d32] | CSCwr66848 | :white_check_mark: | :no_entry_sign: | ||
| [Inband Management Policy Misconfiguration][d33]| CSCwd40071 | :white_check_mark: | :no_entry_sign: | ||
| [Cleanup vnsRsCIfAtt usage in services][d34] | CSCwr51759 | :white_check_mark: | :no_entry_sign: |
There was a problem hiding this comment.
"Check missing vnsRsCIfAttN" ---> change the name
| [d31]: #n9k-c9408-with-more-than-5-n9k-x9400-16w-lems | ||
| [d32]: #multi-pod-modular-spine-bootscript-file | ||
| [d33]: #inband-management-policy-misconfiguration | ||
| [d34]: #cleanup-vnsrscifatt-usage-in-services |
|
|
||
| This check will verify the count of the `svccoreCtrlr` Managed Object and raise and alarm with the bug if object count found more than 240. Remove the content or objects of `svccoreCtrlr` or `svccoreNode`. Contact Cisco TAC or upgrade to a release containing the fix for CSCws84232 before proceeding with an upgrade. | ||
|
|
||
| ### Cleanup vnsRsCIfAtt usage in services |
|
|
||
| ### Cleanup vnsRsCIfAtt usage in services | ||
|
|
||
| Due to [CSCwr51759][70], when targeting 6.0(3)+, having only `vnsRsCIfAtt` without the corresponding `vnsRsCIfAttN` under the same `vnsLIf` can leave service graph interface attachment in an inconsistent state. |
There was a problem hiding this comment.
wrong buug mentioned. Please do the cleanup for bogus info.
There was a problem hiding this comment.
when upgrading to 6.0(3) and above, 'vnsRsCIfAtt' get deleted and without creating the corresponding 'vnsRsCIfAttN' under the same vnsLIf. this will leave service graph interface attachment in an inconsistent state
|
|
||
| Impact: | ||
|
|
||
| If any `vnsRsCIfAtt` relation exists without a matching `vnsRsCIfAttN` for the same concrete interface target (`tDn`), the upgrade is outage-risky and should be treated as affected. |
There was a problem hiding this comment.
no need for this ---> If any vnsRsCIfAtt relation exists without a matching vnsRsCIfAttN for the same concrete interface target (tDn), the upgrade is outage-risky and should be treated as affected.
|
|
||
| Suggestion: | ||
|
|
||
| Before the upgrade, add the missing `vnsRsCIfAttN` relation under the same cluster interface (`vnsLIf`) with the same concrete interface target (`tDn`). |
There was a problem hiding this comment.
specify the GUI path.. as discussed earlier
| return Result(result=ERROR, msg="Error occurred while fetching svccore object counts: {}".format(str(e)), doc_url=doc_url) | ||
|
|
||
|
|
||
| @check_wrapper(check_title="Cleanup vnsRsCIfAtt usage in services") |
| headers = ["Tenant", "Device Name", "Cluster Interface", "Missing Concrete Interface", "vnsRsCIfAtt DN"] | ||
| data = [] | ||
| recommended_action = ( | ||
| "Mo vnsRsCIfAtt is deprecated >=6.0(3d). Before upgrade, under Services, add the missing concrete interface as vnsRsCIfAttN under the same cluster interface" |
There was a problem hiding this comment.
this is not explainatery enough. please work on it.
There was a problem hiding this comment.
Updated recommended action with additional details.
|
|
||
| vnsRsCIfAttNs = icurl("class", "vnsRsCIfAttN.json?rsp-prop-include=config-only") | ||
|
|
||
| def get_target_dn(relation_attributes): |
There was a problem hiding this comment.
look for whole DN, not just Tdn. . this seems wrong to me.
you will see one small diff there for RsCifAtt/RsCifAttN --> make sure you cover this while comparing DN.
There was a problem hiding this comment.
Updated by considering full DN.
Harinadh-Saladi
left a comment
There was a problem hiding this comment.
Addressed all the comments
| [N9K-C9408 with more than 5 N9K-X9400-16W LEMs][d31] | CSCws82819 | :white_check_mark: | :no_entry_sign: | ||
| [Multi-Pod Modular Spine Bootscript File][d32] | CSCwr66848 | :white_check_mark: | :no_entry_sign: | ||
| [Inband Management Policy Misconfiguration][d33]| CSCwd40071 | :white_check_mark: | :no_entry_sign: | ||
| [Cleanup vnsRsCIfAtt usage in services][d34] | CSCwr51759 | :white_check_mark: | :no_entry_sign: |
| [d31]: #n9k-c9408-with-more-than-5-n9k-x9400-16w-lems | ||
| [d32]: #multi-pod-modular-spine-bootscript-file | ||
| [d33]: #inband-management-policy-misconfiguration | ||
| [d34]: #cleanup-vnsrscifatt-usage-in-services |
|
|
||
| This check will verify the count of the `svccoreCtrlr` Managed Object and raise and alarm with the bug if object count found more than 240. Remove the content or objects of `svccoreCtrlr` or `svccoreNode`. Contact Cisco TAC or upgrade to a release containing the fix for CSCws84232 before proceeding with an upgrade. | ||
|
|
||
| ### Cleanup vnsRsCIfAtt usage in services |
|
|
||
| ### Cleanup vnsRsCIfAtt usage in services | ||
|
|
||
| Due to [CSCwr51759][70], when targeting 6.0(3)+, having only `vnsRsCIfAtt` without the corresponding `vnsRsCIfAttN` under the same `vnsLIf` can leave service graph interface attachment in an inconsistent state. |
|
|
||
| Impact: | ||
|
|
||
| If any `vnsRsCIfAtt` relation exists without a matching `vnsRsCIfAttN` for the same concrete interface target (`tDn`), the upgrade is outage-risky and should be treated as affected. |
|
|
||
|
|
||
| @check_wrapper(check_title="Cleanup vnsRsCIfAtt usage in services") | ||
| def vns_rscifatt_cleanup_check(tversion, **kwargs): |
There was a problem hiding this comment.
Updated name and title
| headers = ["Tenant", "Device Name", "Cluster Interface", "Missing Concrete Interface", "vnsRsCIfAtt DN"] | ||
| data = [] | ||
| recommended_action = ( | ||
| "Mo vnsRsCIfAtt is deprecated >=6.0(3d). Before upgrade, under Services, add the missing concrete interface as vnsRsCIfAttN under the same cluster interface" |
There was a problem hiding this comment.
Updated recommended action with additional details.
|
|
||
| vnsRsCIfAttNs = icurl("class", "vnsRsCIfAttN.json?rsp-prop-include=config-only") | ||
|
|
||
| def get_target_dn(relation_attributes): |
There was a problem hiding this comment.
Updated by considering full DN.
| relation_dn = relation_attributes["dn"].strip() | ||
| if not relation_dn: | ||
| continue | ||
| target_dn = get_target_dn(relation_attributes) |
There was a problem hiding this comment.
Comparison now uses full relation DN instead of tDn and handles rscIfAtt vs rscIfAttN differences before matching.
| continue | ||
| missing_dn = old_relation_dn_by_key[relation_key] | ||
| tenant_name, device_name, logical_interface, concrete_interface = parse_relation_context(missing_dn) | ||
| data.append([tenant_name, device_name, logical_interface, concrete_interface, missing_dn]) |
There was a problem hiding this comment.
As per below comment added by Lovkesh,
"After doing upgarde from 605h to 615e.
fab3-apic# moquery -c vnsRsCIfAtt | grep dn
fab3-apic# moquery -c vnsRsCIfAttN | grep dn
dn : uni/tn-CSCwj49418/lDevVip-test/lIf-intf-prov/rscIfAttN-[uni/tn-CSCwj49418/lDevVip-test/cDev-cdev/cIf-[prov]]
fab3-apic#
Gui shows cIf-[prov] deleted from concrete device interface.
and fault raised
F1690
Minor
2026-05-29T13:37:55.525+00:00
Raised
uni/tn-CSCwj49418/lDevVip-test/lIf-intf-cons/vnsConfIssue-lif-invalid-CIf
Configuration is invalid due to LIf has an invalid CIf
Config
configuration-failed
ignorable:no, issue:lif-invalid-CIf. this Fault removed asap i attached the cluster interface."
It'll be seen after upgrade to 6.1(5e). But if older mo config is not there in the new mo config, we are recommending cu to add the missing cluster interface in the lower version itself before doing upgrade. Then we will not see the fault post upgradation and that's the reason current check exists what I feel.
| fabric_link_redundancy_check, | ||
| apic_downgrade_compat_warning_check, | ||
| svccore_excessive_data_check, | ||
| vns_rscifattn_missing_check, |
There was a problem hiding this comment.
vns_rscifattn_missing_check --> should be vnsrscifattn_missing_check correct it everywhere.
| continue | ||
| missing_dn = old_relation_dn_by_key[relation_key] | ||
| tenant_name, device_name, logical_interface, concrete_interface = parse_relation_context(missing_dn) | ||
| data.append([tenant_name, device_name, logical_interface, concrete_interface, missing_dn]) |
There was a problem hiding this comment.
do not consider any fault in this case. You can ignore that. please do repro and test the pre-post upgrade and script.
|
|
||
| ### Check missing vnsRsCIfAttN | ||
|
|
||
| When upgrading to 6.0(3) and above, 'vnsRsCIfAtt' get deleted and without creating the corresponding 'vnsRsCIfAttN' under the same vnsLIf will leave the service graph interface attachment in an inconsistent state |
There was a problem hiding this comment.
When upgrading to 6.0(3) and above, 'vnsRsCIfAtt' get deleted without creating 'vnsRsCIfAttN' under 'vnsLIf' . this leave the service graph interface attachment in an inconsistent state
There was a problem hiding this comment.
Updated by correcting a few grammatical errors.
|
|
||
| When upgrading to 6.0(3) and above, 'vnsRsCIfAtt' get deleted and without creating the corresponding 'vnsRsCIfAttN' under the same vnsLIf will leave the service graph interface attachment in an inconsistent state | ||
|
|
||
| Before the upgrade, in APIC GUI navigate to Tenant > Services > L4-L7 > Device and open cluster interface `intf-prov`. If concrete interface `cons` is missing, re-add concrete interface `cons` under the same cluster interface. so the corresponding `vnsRsCIfAttN` relation exists. |
There was a problem hiding this comment.
For all impacted Dn in this check, re-attach the Concrete interfaces associated to cluster interface under Devices in Services L4-L7 tab.
Tenant --> Services --> L4-L7 --> Devices (Device_name) --> cluster interface --> Concrete interfaces
There was a problem hiding this comment.
Updated by correcting a few grammatical errors.
lovkeshsharma702
left a comment
There was a problem hiding this comment.
please work on given logic.,. validate this in lab again.
Harinadh-Saladi
left a comment
There was a problem hiding this comment.
Yesterday have recreated the issue in 5.3(2f) and validated the script. Enclosed updated script validation logs, pytest and full script run logs
|
|
||
| ### Check missing vnsRsCIfAttN | ||
|
|
||
| When upgrading to 6.0(3) and above, 'vnsRsCIfAtt' get deleted and without creating the corresponding 'vnsRsCIfAttN' under the same vnsLIf will leave the service graph interface attachment in an inconsistent state |
There was a problem hiding this comment.
Updated by correcting a few grammatical errors.
|
|
||
| When upgrading to 6.0(3) and above, 'vnsRsCIfAtt' get deleted and without creating the corresponding 'vnsRsCIfAttN' under the same vnsLIf will leave the service graph interface attachment in an inconsistent state | ||
|
|
||
| Before the upgrade, in APIC GUI navigate to Tenant > Services > L4-L7 > Device and open cluster interface `intf-prov`. If concrete interface `cons` is missing, re-add concrete interface `cons` under the same cluster interface. so the corresponding `vnsRsCIfAttN` relation exists. |
There was a problem hiding this comment.
Updated by correcting a few grammatical errors.
| continue | ||
| missing_dn = old_relation_dn_by_key[relation_key] | ||
| tenant_name, device_name, logical_interface, concrete_interface = parse_relation_context(missing_dn) | ||
| data.append([tenant_name, device_name, logical_interface, concrete_interface, missing_dn]) |
There was a problem hiding this comment.
Yes, have recreated the issue in 5.2(4d) and 5.3(2f) and upgraded to 6.0(5h) and validated the script. I can do the validation one more time by upgrading to 6.1(5e)
| fabric_link_redundancy_check, | ||
| apic_downgrade_compat_warning_check, | ||
| svccore_excessive_data_check, | ||
| vns_rscifattn_missing_check, |
Harinadh-Saladi
left a comment
There was a problem hiding this comment.
Addressed the comments and tested in the lab with code changes and enclosed the latest logs
|
|
||
| if old_dn.replace("/rscIfAttN-[", "/rscIfAtt-[", 1) in new_dn_keys: | ||
| continue | ||
|
|
There was a problem hiding this comment.
add this check
if none of vnsRsCIfAtt and vnsRsCIfAttN present. only in case Both of Mo missing attached to given vnsLif—> vnsLIf has NEITHER relation - service graph broken, ask Cu to do manual check warning only
There was a problem hiding this comment.
Added manual check warning when both old and new mo config is unavailable.
| old_dn, | ||
| ]) | ||
|
|
||
| data.sort(key=itemgetter(-1)) |
There was a problem hiding this comment.
what is the need of this sort and new library imported?
There was a problem hiding this comment.
The above suggested optimized loop logic works functionally, but without sorting it can return rows in different orders based on API/input order. Our Pytest case compares as an ordered list, so it fails intermittently on order only. I added sorting to make pytest stable and output consistent.
Have removed new library imported and replaced with lambda instead.
| [d31]: #n9k-c9408-with-more-than-5-n9k-x9400-16w-lems | ||
| [d32]: #multi-pod-modular-spine-bootscript-file | ||
| [d33]: #inband-management-policy-misconfiguration | ||
|
|
Harinadh-Saladi
left a comment
There was a problem hiding this comment.
Addressed the comments and tested the code with changes in lab and enclosed comprehensive logs.
| old_dn, | ||
| ]) | ||
|
|
||
| data.sort(key=itemgetter(-1)) |
There was a problem hiding this comment.
The above suggested optimized loop logic works functionally, but without sorting it can return rows in different orders based on API/input order. Our Pytest case compares as an ordered list, so it fails intermittently on order only. I added sorting to make pytest stable and output consistent.
Have removed new library imported and replaced with lambda instead.
|
|
||
| if old_dn.replace("/rscIfAttN-[", "/rscIfAtt-[", 1) in new_dn_keys: | ||
| continue | ||
|
|
There was a problem hiding this comment.
Added manual check warning when both old and new mo config is unavailable.
08d7fef to
c217115
Compare
…ile with right title name
| [d33]: #inband-management-policy-misconfiguration | ||
| [d34]: #bgpProto-timer-policy-already-existing | ||
| [d35]: #wred-with-affected-fm-models | ||
| [d36]: #n9k-c93180yc-fx3-switch-memory-less-than-32gb |
There was a problem hiding this comment.
I think during conflicts resolving, mistakenly got removed. Added back.
| @check_wrapper(check_title="Verifying Cluster Interface Configuration For Deprecated RsCIfAtt Object") | ||
| def verify_cluster_interface_config_for_rscifatt_use_check(tversion, cversion, **kwargs): | ||
| result = PASS | ||
| doc_url = "https://datacenter.github.io/ACI-Pre-Upgrade-Validation-Script/validations/#check-missing-vnsrscifattn" |
There was a problem hiding this comment.
update the correct doc url.. check-missing-vnsrscifattn is not present in validation.md
There was a problem hiding this comment.
Updated the URL after changing the function name.
Harinadh-Saladi
left a comment
There was a problem hiding this comment.
Addressed the comments
| [d33]: #inband-management-policy-misconfiguration | ||
| [d34]: #bgpProto-timer-policy-already-existing | ||
| [d35]: #wred-with-affected-fm-models | ||
| [d36]: #n9k-c93180yc-fx3-switch-memory-less-than-32gb |
There was a problem hiding this comment.
I think during conflicts resolving, mistakenly got removed. Added back.
| @check_wrapper(check_title="Verifying Cluster Interface Configuration For Deprecated RsCIfAtt Object") | ||
| def verify_cluster_interface_config_for_rscifatt_use_check(tversion, cversion, **kwargs): | ||
| result = PASS | ||
| doc_url = "https://datacenter.github.io/ACI-Pre-Upgrade-Validation-Script/validations/#check-missing-vnsrscifattn" |
There was a problem hiding this comment.
Updated the URL after changing the function name.
monrog2
left a comment
There was a problem hiding this comment.
please triple check that the number of API requests being asked for here are the smallest dataset that we need to perform this check.
if they are indeed switch objects, we will not be able to requests them on the intersight side.
if there is a scale fabric with these obejcts, how long does this take to run? the old VLAN validation check had to be removed due to time it took to complete, so i'm worried this one will have similar results.
| recommended_action = "Please review the concrete interface attachments under the flagged device cluster interfaces and reattach them using the UI: Tenant → Services → L4-L7 → Devices → Cluster Interface → Concrete Interface → + → Select the respective interface from the drop-down list → Submit" | ||
| else: | ||
| headers = ["Tenant", "Device Name", "Cluster Interface", "Missing Concrete Interface", "vnsRsCIfAtt DN"] | ||
| recommended_action = "Please reattach concrete interfaces again using the UI (without deleting the existing attachment objects): Tenant → Services → L4-L7 → Devices → Cluster Interface → Concrete Interface → + → Select the respective interface from the drop-down list → Submit" |
There was a problem hiding this comment.
Workaround details/clarity should be documented directly within the bug Release note. The script should never be the source of truth, if a bug or FN is at play, that should always be the SSOT and the script can pull out snips from it as required for flesh out the result.
| ldev_ctx_query = ( | ||
| "vnsLDevCtx.json?rsp-prop-include=config-only" | ||
| "&rsp-subtree=full" | ||
| "&rsp-subtree-class=vnsLIfCtx,vnsRsLIfCtxToLIf" | ||
| "&rsp-subtree-include=required" | ||
| ) |
There was a problem hiding this comment.
this is a switch object? and we are pulling subtree.
have we been able to test this on a scale fabric and what are the implications of the response time?
| ): | ||
| continue | ||
| elif not contract or not graph: | ||
| continue # Fallback mode: skip incomplete contexts |
There was a problem hiding this comment.
# Fallback mode: skip incomplete contexts
Can this logic be applied directly within the API call? I see that rsp-subtree-include=required is being used above to so some first level 'if filtering, is there another point where similar could be applied?
| sg_data = [] | ||
| has_implicit_objects = False | ||
| for lif_dn in sorted(lif_dns): | ||
| lif_query = "{}.json?query-target=subtree&target-subtree-class=vnsRsCIfAttN&rsp-prop-include=config-only".format(lif_dn) |
There was a problem hiding this comment.
this will cascade out even further per DN identified
| if tversion.older_than("6.0(3d)"): | ||
| return Result(result=NA, msg=VER_NOT_AFFECTED, doc_url=doc_url) | ||
|
|
||
| post_upgrade = bool(cversion and (cversion.same_as("6.0(3d)") or cversion.newer_than("6.0(3d)"))) |
There was a problem hiding this comment.
post_upgrade actually means version_with_new_obj?
we already defined POST within this script as a result when a check needs to be re-run POST APIC upgrade, before switch upgrade.
| [APIC downgrade compatibility when crossing 6.2 release][g19]| :white_check_mark: | :no_entry_sign: | ||
| [Supported Hardware Compatibility][g20] | :white_check_mark: | :no_entry_sign: | ||
| [Svccore Excessive Data Check][g21] | :white_check_mark: | :no_entry_sign: | ||
| [Verifying Cluster Interface Configuration For Deprecated RsCIfAtt Object][g22] | :white_check_mark: | :no_entry_sign: |
There was a problem hiding this comment.
simple names please.
something like:
vnsRsCIfAtt deprecation check
Also if there are multiple bug IDs at play, we should include them in teh documentation.
deprecation of vnsRsCIfAtt is not CSCwr51759. Which ID is for that?
| Contact Cisco TAC for next steps. For more details, refer to the workaround in [CSCwt69100][75]. | ||
|
|
||
| ### Verifying Cluster Interface Configuration For Deprecated RsCIfAtt Object | ||
|
|
There was a problem hiding this comment.
Simplify the source of the problem:
vnsRsCIfAtt is officially deprecated (is this documented in a release note?) as of 6.0(3).
The 'new' object for this, vnsRsCIfAttN has been supposed as of 5.x (get this version).
This check scans your objects for ysage of the deprecated object, and if found, warns the user that they must migrate their config to the newly supported object.
Failure to do so can result in an outage of the service graph... etc etc.
ensure that we have docs/external bugs to back up all claims above.
| fabric_link_redundancy_check, | ||
| apic_downgrade_compat_warning_check, | ||
| svccore_excessive_data_check, | ||
| verify_cluster_interface_config_for_rscifatt_use_check, |
There was a problem hiding this comment.
simplify check name/function name
| return Result(result=FAIL_O, msg=msg, headers=headers, data=[[r[0], r[1], r[2]] for r in sg_data], recommended_action=recommended_action, doc_url=doc_url) | ||
| return Result(result=PASS, msg="All deployed service graph interfaces have vnsRsCIfAttN.", doc_url=doc_url) | ||
|
|
||
| # Pre-upgrade: fetch both relation object classes for further checks |
There was a problem hiding this comment.
pre_upgrade is a misnomer, this means version_not _having_new_object.
monrog2
left a comment
There was a problem hiding this comment.
Additional findings beyond my previous review:
| sg_data.sort(key=lambda r: r[-1]) | ||
| msg = "Graph is rendered with implicit objects" if has_implicit_objects else "vnsRsCIfAttN is missing under deployed L4-L7 cluster interfaces." | ||
| return Result(result=FAIL_O, msg=msg, headers=headers, data=[[r[0], r[1], r[2]] for r in sg_data], recommended_action=recommended_action, doc_url=doc_url) | ||
| return Result(result=PASS, msg="All deployed service graph interfaces have vnsRsCIfAttN.", doc_url=doc_url) |
There was a problem hiding this comment.
[Blocking] Please do not return PASS solely because every deployed LIF has vnsRsCIfAttN. For current versions 6.2(3)+, the CSCwr51759 release-note content recommends removing deprecated vnsRsCIfAtt objects when a matching vnsRsCIfAttN exists, but this branch never queries the old class, so that state silently passes. Please add explicit handling and regression coverage for it. Before deciding the exact result and recommended action, we need Development signoff on whether these old objects must be cleaned up on 6.2(3)+, or whether the risk of leaving them is minimal enough to allow the check to pass; please document the decision and its authoritative source.
| for contract_name in (contract, contract_without_prefix) | ||
| for graph_name in (graph, graph_base_name) | ||
| ): | ||
| continue |
There was a problem hiding this comment.
[Medium] Please include tenant identity when correlating applied graphs. graph_keys retains only contract and graph names, so if tenant A has an applied graph and tenant B reuses the same names, tenant B's context is also treated as deployed and can produce a false FAIL_O with unnecessary reattachment guidance. Please key the correlation by tenant as well as contract/graph name, preserve the intended imported/common-tenant behavior, and add a duplicate-name-across-tenants regression test.
Added a new pre-upgrade validation for Verifying Cluster Interface Configuration For Deprecated RsCIfAtt Object.
Enclosed comprehensive logs for the same after testing in the lab with new scenarios addition and after addressing all final review comments.
Comprehensive Test Logs.txt
Full Script Run Logs.txt
Pytest_Logs.txt
Pytest_Full_Logs.txt