Planning an ONTAP upgrade? Before you touch a single cluster, wouldn't it be great to know exactly what blockers, warnings, and risks lie ahead - all from a comprehensive, automated pre-upgrade assessment? That's precisely what Upgrade Health Checker (UHC) delivers.
In this blog, we'll walk you through how to experience UHC hands-on using NetApp Lab on Demand - a free, self-service lab environment available to NetApp customers, partners, and internal teams. We'll run UHC against ONTAP clusters in the lab, demonstrating how the new multi-run dashboard aggregates results across your entire fleet in a single view. Whether you're a customer evaluating UHC, a NetApp Professional Services consultant, or a Systems Account Manager (SAM), this guide gives you a risk-free way to explore UHC's capabilities before deploying it in production.
What is Upgrade Health Checker?
Upgrade Health Checker (UHC) is an onsite advisory tool for ONTAP systems designed to perform comprehensive pre-upgrade health assessments. It connects to your ONTAP cluster, collects AutoSupport data, evaluates over 1,600+ rules across Upgrades and At-Risk Systems (ARS), and generates a detailed report identifying everything you need to address before upgrading.
| Capability | What It Does |
|---|
| Actionable Insights | Provides targeted recommendations to resolve pre-upgrade blockers and warnings, enabling efficient decision-making |
| Continuous Validation | Maintains current validation checks and risk assessments to ensure upgrade readiness with every run |
| Automation Integration | Seamlessly integrates with existing automation and orchestration frameworks via CLI parameters and config files |
| Multi-Format Reports | Generates HTML (human-readable), JSON (machine-processable), and Excel reports for every assessment |
| Firmware Awareness | Collects and reports Service Processor, drive, and storage shelf firmware information |
| Multi-Run Dashboard | Generates a consolidated dashboard/index.html aggregating results across all previous runs for at-a-glance fleet visibility |
UHC v10 is the latest release, featuring enhanced firmware collection, Excel report generation, improved telemetry, an integrated multi-run dashboard, IMT-enriched protocol compatibility data bundled in every report and expanded rule coverage with 1,600+ rules across Upgrades and At-Risk Systems (ARS) engines.
Setting Up Your Lab Environment
NetApp Lab on Demand provides a fully configured environment with everything you need to try UHC - ONTAP clusters, a Windows jumphost, and a Linux host. Here's how to get started:
1 Request the Lab
- Navigate to labondemand.netapp.com and log in
- Request the "Early Adopter Lab for Unified ONTAP 9.16.1 v1.0" lab
- Provide a description (e.g., "UHC evaluation"), select your purpose, and choose the required lab duration
- Submit the lab request
What's in the lab? The lab contains two ONTAP HA storage clusters (vSIMs), both running ONTAP 9.16.1 as two-node clusters: cluster1 (192.168.0.101) and cluster2 (192.168.0.102). We'll run UHC against both clusters in this walkthrough so the dashboard shows results for the full lab fleet. The lab also includes a Windows Server 2019 Jumphost and a RHEL 8.10 Linux host (RHEL1) - perfect for running UHC.
2 Connect to the Lab
- Under My Labs (labondemand.netapp.com/mylabs), click Connect to launch the lab
- This opens the Jumphost (Windows Server 2019) - your entry point to the lab
- Click Lab Notes to access the lab documentation for reference
- Lab credentials are available from within the lab by navigating to the "Lab Credentials" bookmark page in Google Chrome:
<a href="http://ae.demo.netapp.com/accounts" target="_blank" rel="noopener noreferrer">http://ae.demo.netapp.com/accounts</a>
3 Download UHC to the Jumphost
From within the jumphost, open a web browser and download UHC:
- Navigate to the NetApp Support Site - Upgrade Health Checker
- Log in with your NSS credentials
- Download
uhc_v10.zip (the latest version)
4 Transfer UHC to the Linux Host
UHC runs on Linux, so we need to transfer the zip file from the Jumphost to RHEL1:
- Download and install WinSCP on the Jumphost (accept defaults during installation)
- When prompted, click Yes to import stored sessions from PuTTY this will import RHEL1 and both cluster connections
- Launch WinSCP from the desktop, select RHEL1, and click Login
- Enter the RHEL1 password (from the Lab Credentials page)
- In WinSCP, navigate to
C:\Users\Administrator.DEMO\Downloads on the left pane (Jumphost) - Drag and drop
uhc_v10.zip to the RHEL1 host (right pane)
Next step: Close WinSCP and use the PuTTY configuration on the Jumphost to connect to RHEL1 (select the RHEL1 saved session).
Running UHC on Both Lab Clusters
Now comes the exciting part. Connect to RHEL1 via PuTTY and install UHC once - then run it sequentially against both clusters. Each run builds on the same ./runs/ directory, so the dashboard automatically aggregates all results when you're done.
5 Install UHC
<span class="comment"># Unzip the UHC package</span>
unzip uhc_v10.zip
<span class="comment"># Navigate to the extracted folder</span>
cd v10/
<span class="comment"># Verify extracted contents</span>
ls -lrt
<span class="comment"># uhc (main executable)
# uhc.sig (code signature)
# UHC-Linux-codesigning-certificate-public.pem
# UHC-Linux-chain-certificates-public.pem
# RELEASE_NOTES.md
# README.pdf
# config.yaml.example (optional config template)</span>
<span class="comment"># Make UHC executable</span>
chmod +x uhc
6 Run UHC Against cluster1
cluster1 - 192.168.0.101 | ONTAP 9.16.1 -> Target: 9.18.1P4
<span class="comment"># Launch UHC - first run (cluster1)</span>
./uhc
When prompted, enter the following for cluster1:
| Prompt | What to Enter |
|---|
| Cluster IP Address | 192.168.0.101 (cluster1) |
| Cluster Username | admin |
| Cluster Password | Use the password from Lab Credentials page |
| EULA | Type all to view, then y to accept |
| Target ONTAP Version | Use arrow keys to select 9.18.1P4 |
Once you provide the inputs, UHC takes over automatically:
- Validates credentials and connects to the cluster
- Detects cluster topology - cluster1 with 2 nodes (cluster1-01, cluster1-02), running ONTAP 9.16.1
- Triggers AutoSupport generation on each node (~3 minutes per node) - ONTAP 9.16.1+ downloads ASUP as a compressed
.tgz bundle - Downloads and extracts ASUP data from each node
- Evaluates upgrade rules and At-Risk Systems (ARS) rules
- Collects firmware information - Service Processor, drives, and storage shelves
- Applies IMT enrichment — NAS interoperability data is overlaid on applicable findings NEW
- Generates reports - HTML, JSON, and Excel formats
- Generates multi-run Dashboard at
./runs/dashboard/index.html - Uploads telemetry to NetApp and checks for auto-updates (optional for dark sites)
cluster1 completion output:271.61 secondsReport Generation Status: Success
Dashboard Generation : Success
Telemetry Upload Status : Success
Auto-Update Status : No New Update
Email Notification Status: Disabled
Overall execution time:
Reports are saved to:
v10/runs/20260720_101832_7914e7c4-4f66-43e5-912c-37a72106b951/192.168.0.101/results/ <br><span class="comment"># uhc_cluster1_</span><span class="comment">20260720101811</span><span class="comment">.html (human-readable HTML report) <br># uhc_cluster1_<code>20260720101811.json (machine-processable JSON)
# uhc_cluster1_20260720101811.xlsx (Excel spreadsheet)/root/
7 Run UHC Against cluster2
cluster2 - 192.168.0.102 | ONTAP 9.16.1 -> Target: 9.17.1P9
<span class="comment"># Launch UHC - second run (cluster2), from the same v9/ directory</span>
./uhc
When prompted, enter the following for cluster2:
| Prompt | What to Enter |
|---|
| Cluster IP Address | 192.168.0.102 (cluster2) |
| Cluster Username | admin |
| Cluster Password | Use the password from Lab Credentials page |
| EULA | EULA is already accepted - UHC will skip this prompt |
| Target ONTAP Version | Use arrow keys to select 9.17.1P9 |
UHC repeats the full assessment cycle for cluster2, appending the new run to the existing ./runs/ directory alongside the cluster1 results. The dashboard is automatically updated to reflect both clusters.
cluster2 completion output:Report Generation Status: Success
Dashboard Generation : Success
Telemetry Upload Status : Success
Auto-Update Status : No New Update
Email Notification Status: Disabled
Overall execution time: 315.83 seconds
Reports are saved to:
20260720_102325_8568fce9-b98d-464d-a814-76713e108f28/192.168.0.102/results/ <br><span class="comment"># uhc_cluster2_</span><span class="comment">20260720102310</span><span class="comment">.html (human-readable HTML report) <br># uhc_cluster2_<code>20260720102310.json (machine-processable JSON)
# uhc_cluster2_20260720102310.xlsx (Excel spreadsheet)/root/v10/runs/
After both runs, the runs/ directory structure looks like this:
<span class="comment">20260720_101832_7914e7c4-</span><span class="comment">...tar.gz (cluster1 archive) <br># <code>20260720_101832_7914e7c4-.../ (cluster1 run records)
# <span class="comment">20260720_102325_8568fce9-</span><span class="comment">...tar.gz (cluster2 archive) <br># <code>20260720_102325_8568fce9-.../ (cluster2 run records)
# dashboard/ (multi-run dashboard - both clusters)ls -lrt /root/v10/runs/
<span class="comment">#</span>
Tip: Each cluster run takes approximately 4 - 6 minutes. AutoSupport generation is the longest step as it's a low-priority background process in ONTAP. The second run benefits from cached EULA acceptance. Total time for both clusters: ~12 - 15 minutes.
Launching the Dashboard from the Jumphost
With both cluster runs complete, the next step is to view the results. UHC v10 automatically generates a multi-run dashboard that aggregates findings from every run into a single browsable page. Rather than copying files with WinSCP, the easiest way to access it from the Jumphost is to serve the runs/ directory directly from RHEL1 using Python's built-in HTTP server - giving you live, clickable links from the dashboard straight into each cluster's full HTML report.
8 Find RHEL1's IP Address
Back in the PuTTY session on RHEL1, navigate to the runs/ directory and note its IP address:
<span class="comment"># Navigate to the runs directory - this will be the HTTP server root</span>
cd /root/v10/runs
<span class="comment"># Get RHEL1's IP address</span>
hostname -i
<span class="comment"># fe80::250:56ff:fe85:d91a%ens192 192.168.0.61</span>
<span class="comment"># Use the IPv4 address: 192.168.0.61</span>
9 Start the Python HTTP Server
Start a lightweight HTTP server from the runs/ directory so the Jumphost can reach all reports and the dashboard over the network:
<span class="comment"># Start HTTP server on port 8550, accessible from all interfaces</span>
python3 -m http.server 8550 --bind 0.0.0.0
Note: The server runs in the foreground. Keep this PuTTY window open while browsing - press Ctrl+C to stop it when done. Everything under /root/v10/runs/ is immediately accessible, including both cluster run directories and the dashboard.
10 Open the Dashboard on the Jumphost
On the Jumphost, open Google Chrome and navigate to:
http://192.168.0.61:8550/dashboard/index.html
The UHC Dashboard loads and displays both cluster1 and cluster2 side-by-side, each showing a summary of blockers, warnings, at-risk findings, and passed checks along with the current and target ONTAP versions.
What you'll see in the Dashboard: Both cluster1 (9.16.1 -> 9.18.1P4) and cluster2 (9.16.1 -> 9.17.1P9) are listed with their assessment summaries. Every row links directly to that cluster's full HTML report - no file copying required.
Reviewing the UHC Reports
From the Dashboard, click through to each cluster's detailed report. The dashboard links resolve directly through the HTTP server, so the full report opens instantly in the same browser tab.
cluster1 Report - Click from Dashboard
In the Dashboard, click the HTML report link for cluster1. The detailed report opens at:
http://192.168.0.61:8550/<span>20260720_101832_7914e7c4-4f66-43e5-912c-37a72106b951</span>/192.168.0.101/results/uhc_cluster1_<span>20260720101811</span>.html
Here's what the cluster1 report shows:
| Property | Value |
|---|
| Cluster Name | cluster1 |
| Current ONTAP Version | 9.16.1 |
| Target ONTAP Version | 9.18.1P4 |
| Nodes | cluster1-01, cluster1-02 (both SIMBOX) |
| Storage Disks | 34 total, 966.91 GB capacity |
| Multi-Admin Verification | Not Enabled |
UHC evaluated 1,701 rules for cluster1 and found:
| Category | Count | What It Means |
|---|
| Blockers | 0 | No critical issues preventing upgrade |
| Warnings | 3 | Non-blocking issues to review before upgrade |
| Functional Changes | 5 | Feature/behavior changes to be aware of |
| At Risk | 11 | Known risks relative to the target version |
| Passed | 491 | Checks that passed successfully |
| Skipped | 1,191 | Rules not applicable to this configuration |
When done reviewing, navigate back to the Dashboard tab and click the HTML report link for cluster2.
cluster2 Report - Click from Dashboard
The cluster2 detailed report opens at:
http://192.168.0.61:8550/<span>20260720_102325_8568fce9-b98d-464d-a814-76713e108f28</span>/192.168.0.102/results/uhc_cluster2_<span>20260720102310</span>.html
Here's what the cluster2 report shows:
| Property | Value |
|---|
| Cluster Name | cluster2 |
| Current ONTAP Version | 9.16.1 |
| Target ONTAP Version | 9.17.1P9 |
| Nodes | cluster2-01, cluster2-02 (both SIMBOX) |
| Storage Disks | 34 total, 966.91 GB capacity |
| Multi-Admin Verification | Not Enabled |
UHC evaluated 1,701 rules for cluster2 and found:
| Category | Count | What It Means |
|---|
| Blockers | 0 | No critical issues preventing upgrade |
| Warnings | 2 | Non-blocking issues to review before upgrade |
| Functional Changes | 5 | Feature/behavior changes to be aware of |
| At Risk | 8 | Known risks relative to the target version |
| Passed | 490 | Checks that passed successfully |
| Skipped | 1,196 | Rules not applicable to this configuration |
Great news across the board! Zero blockers on both cluster1 and cluster2 - the entire lab fleet is cleared for upgrade. The warnings and functional changes should be reviewed, but nothing prevents either upgrade from proceeding.
Summary
In under 30 minutes, you've experienced the full UHC v10 workflow - from installing the tool on a Linux host to running assessments against two ONTAP clusters and viewing a consolidated Dashboard on the Windows Jumphost. Here's what we accomplished:
- Set up a Lab on Demand environment with two ONTAP 9.16.1 clusters
- Downloaded and installed UHC v9 on a RHEL 8 Linux host
- Ran UHC interactively against cluster1 - 0 blockers, 3 warnings, 491 passed (target: 9.18.1P4)
- Ran UHC interactively against cluster2 - 0 blockers, 2 warnings, 490 passed (target: 9.17.1P9)
- Generated HTML, JSON, and Excel reports for both clusters
- Served reports over HTTP from RHEL1 using
python3 -m http.server - Launched the multi-run Dashboard from the Windows Jumphost at
<a href="http://192.168.0.61:8550/dashboard/index.html" target="_blank" rel="noopener nofollow noreferrer">http://192.168.0.61:8550/dashboard/index.html</a> - showing both clusters and linking to their full reports
Lab on Demand is the perfect sandbox to build confidence with UHC before rolling it out across your production fleet. Try different target ONTAP versions, run against multiple clusters, and experience how the dashboard grows into a comprehensive fleet health view with every run.
Remember: The lab uses vSIM (virtual ONTAP simulators), so some hardware-specific checks may behave differently than on physical systems. The upgrade rules, risk assessments, and report format are identical to what you'll see in production.
Coming Up Next
Enjoyed this walkthrough? There's more to come. Stay tuned for our next blog in the UHC series, where we'll continue exploring what Upgrade Health Checker can do for your ONTAP environment.
Stay tuned!
Resources
Contact Us
For questions, feedback, or assistance with Upgrade Health Checker, reach out to the UHC product team:
ng-uhc-productgroup@netapp.com
NetApp, the NETAPP logo, and ONTAP are trademarks or registered trademarks of NetApp, Inc.
The views expressed here are those of the author and do not necessarily reflect the views of NetApp.