During an upgrade to NSX 9.0.2, the process gets stuck and pauses at 98% in the "finalize upgrade" phase. You'll see the following warning pop up in the Upgrade Coordinator UI:
Connection between host and NSX Controller / NSX Manager is UNKNOWN
When reviewing the NSX inventory, multiple duplicate ESXi host entries with different IP addresses appear as Disconnected or UNKNOWN under Standalone Hosts.
The Upgrade Coordinator is getting blocked by stale and orphaned Transport Node records left behind in the NSX database. This usually happens when ESXi hosts are decommissioned, rebuilt, or given new IPs without being cleanly removed or unprepared from NSX first.
Because the database is still holding onto those old UUIDs, the Upgrade Coordinator keeps trying to reach these "ghost" hosts during its post-checks and execution. When it can't establish a heartbeat, the upgrade halts.
To resolve this issue, you must manually remove the stale transport node entry from the NSX Manager database using the NSX API and reset the host upgrade plan.
Follow these steps:
DELETE https://<nsx-mgr-ip>/api/v1/transport-nodes/<transport-node-UUID>?force=true&unprepare_host=falseGET https://<nsx-mgr-ip>/api/v1/transport-nodes/<transport-node-UUID>