Smart Update Manager CLI

The Smart Update Manager (SUM) provided through the smartupdate executable installed with the SUM service, supports scripting and automation of firmware update operations while maintaining backward compatibility with key CLI commands.
NOTE
The smartupdate CLI must run on the same host as the SUM service. Running the CLI from a remote host is not supported.

Command syntax

smartupdate [--silent] --target <iLO-IP> --user <username> --passwd <password>
            --use_location <path-to-SPP-ISO>
            [options]

Command options

Target options
Flag Description
--target <ip> Repeat the option for each target server. OR Specify this option multiple times to update multiple servers.
--user <user>, --username <user> iLO username
--passwd <pwd>, --password <pwd> iLO password
NOTE
  • For localhost updates, set the --target value to localhost.

  • If the security state of the local iLO is Production (Standard), iLO credentials are not required.

  • If the security state of the local iLO is High Security, FIPS, or CNSA mode, provide iLO credentials.

Firmware baseline options
Flag Description
--use_location <path>, -u <path> Path to the SPP ISO or ZIP file on the SUM host. If the ISO or ZIP has already been uploaded, SUM reuses the existing bundle automatically
Installation control options
Flag Description
--downgrade, -g Downgrade components with versions that are higher than the baseline version.
--install_sw_drivers Include software and driver components in addition to firmware during the update
--power_off Powers off the server after the firmware update completes (Default: False; server remains powered on). --reboot option must be specified for power off
--reboot, -r Automatically reboot the server if required to complete the update

(Default: False; reboot is left to the user)

--dryrun Analyze firmware compliance without applying any changes. Prints the analysis result and exits
--continue_on_error When updating multiple targets, continue if at least one target succeeds. Exit code reflects the successful targets
--on_failed_dependency <val> Attempt the firmware updates even with dependency failures. Only force val is supported
Reporting
Flag Description
--report Generate a deploy preview report (JSON/XML); exits without deploying updates
--installed_report Generate a report (JSON/XML) of components installed this session
--reportdir <path> Directory to save report/installed_report files
Logging options
Flag Description
--verbose, -v Enable verbose logging
--silent, -s Silent mode (Mandatory parameter)
Input file options
Flag Description
--inputfile <path> Path to a SUM-format input file containing flags and target definitions (see Input file format)
--deleteinputfile Delete the input file after processing

Exit codes

The following table lists the exit codes returned by the smartupdate CLI.
Code Linux exit status Windows exit status Description
0 0 0 Success - all firmware updates applied; no reboot required
1 1 1 Success - updates applied; a reboot is required to activate one or more components
3 3 3 Not required - all firmware components are already at the target version; no changes made
-1 255 -1 General failure - authentication error, server unreachable, or other fatal condition
-2 254 -2 Bad parameter - a required flag is missing or invalid
-3 253 -3 Component failed - one or more firmware component installations failed on the target
-4 252 -4 Command failed - job submission, polling timeout, or job canceled

Command examples

Update firmware on a single server
smartupdate -s \
  --target 192.168.1.100 \
  --user Administrator --passwd Yourpassword \
  --use_location /var/baselines/SPP2026.iso
Update firmware on localhost
smartupdate -s \  
--target localhost --use_location
/var/baselines/SPP2026.iso
Dry run — analyze compliance without applying changes
smartupdate -s \
  --target 192.168.1.100 \
  --user Administrator --passwd Yourpassword \
  --use_location /var/baselines/SPP2026.iso \
  --dryrun
Update multiple servers in parallel
smartupdate -s \
  --target 192.168.1.100 --user Administrator --passwd Yourpassword \
  --target 192.168.1.101 --user Administrator --passwd Yourpassword1 \
  --use_location /var/baselines/SPP2026.iso

All targets are processed simultaneously. When --continue_on_error is specified, a failure on one target does not stop the others.

Downgrade the components to match the baseline
smartupdate -s \
  --target 192.168.1.100 \
  --user Administrator --passwd Yourpassword \
  --use_location /var/baselines/SPP2026.iso \
  --downgrade
Power off server after update; requires --reboot
smartupdate -s \
  --target 192.168.1.100 \
  --user admin --passwd Yourpassword \
--use_location /mnt/spp.iso \
--reboot --power_off
Verbose output
smartupdate -s \
  --target 192.168.1.100 \
  --user Administrator --passwd Yourpassword \
  --use_location /var/baselines/SPP2026.iso \
  --verbose
Deploy preview report
smartupdate --silent \
--target 192.168.1.100 \
--user admin --passwd Yourpassword \
--use_location /mnt/spp.iso \
--report --reportdir /etc/user/reports
Installed report
smartupdate --silent \
--target 192.168.1.100 \
--user admin --passwd Yourpassword \
--use_location /mnt/spp.iso \
--installed_report \
--reportdir /etc/user/reports
On failed dependency
smartupdate --silent \
--target 192.168.1.100 \
--user admin --passwd Yourpassword \
--use_location /mnt/spp.iso \
--on_failed_dependency force

Input file format

You can supply all flags in a text file instead of on the command line. This approach is useful for scheduled jobs or when managing many targets.
SILENT = YES
USE_LOCATION = /var/baselines/SPP2026.iso
CONTINUE_ON_ERROR=YES

[TARGETS]
HOST = 192.168.1.100
UID  = Administrator
PWD  = Admin123
[END]

[TARGETS]
HOST = 192.168.1.101
HOST = 192.168.1.102
UID  = Administrator
PWD  = Admin456
[END]
Input file rules
  • Global lines (KEY = VALUE) set flags for the whole run. CLI flags take precedence over values in the file.
  • Each [TARGETS]...[END] block defines one set of credentials.
  • Multiple HOST = lines inside a block share the same username and password.
  • Supported global keys: REBOOT, REPORT, INSTALLED_REPORT, REPORTDIR, and ON_FAILED_DEPENDENCY.
Run with an input file
smartupdate --inputfile /var/scripts/update.txt
Delete the input file after processing
smartupdate --inputfile /var/scripts/update.txt --deleteinputfile

SUM CLI

Functionality SUM 12.x CLI command SUM 20.x CLI command SUM 20.x Rest API
API Path High-Level Flow
Firmware update of Single Server
smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path>
smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path>

POST /compute-ops-mgmt/v1/auth/login

GET /compute-ops-mgmt/v1/servers

POST /compute-ops-mgmt/v1/jobs

POST /compute-ops-mgmt/v1/discovered-servers/actions/onboard

GET /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/analyze-firmware-update

POST /compute-ops-mgmt/v1/jobs

GET /compute-ops-mgmt/v1/jobs/{jobId}

GET /compute-ops-mgmt/v1/servers/{serverId}?include-all-data=true

Authenticate to SUM and get access token

Check whether the target server is already registered

Discover target server if it is not already registered

Register/onboard the target server using iLO credentials

Check whether the firmware baseline already exists

Import/upload firmware baseline from --use_location

Run firmware analysis and dependency check

Start firmware update job

Monitor discovery, onboard, baseline import, analysis, and update jobs

Read final firmware analysis/update result

Firmware update of Single Server with ability to specify Reboot option

smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path> --reboot
smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path> --reboot

Same API path as Firmware update of Single Server. The --reboot option is handled through the firmware update job payload sent to POST /compute-ops-mgmt/v1/jobs, using template with jobParams.manual_reboot_required: false.

Firmware update of Single Server with dry run

smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path>
--dryrun
smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path>
--dryrun

POST /compute-ops-mgmt/v1/auth/login

GET /compute-ops-mgmt/v1/servers

POST /compute-ops-mgmt/v1/jobs

POST /compute-ops-mgmt/v1/discovered-servers/actions/onboard

GET /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/analyze-firmware-update

GET /compute-ops-mgmt/v1/jobs/{jobId}

GET /compute-ops-mgmt/v1/servers/{serverId}?include-all-data=true

Authenticate to SUM and get access token

Check whether the target server is already registered

Discover target server if it is not already registered

Register/onboard the target server using iLO credentials

Check whether the firmware baseline already exists

Import/upload firmware baseline from --use_location

Run dry-run firmware analysis. No firmware update is applied

Monitor discovery, onboard, baseline import and dry-run analysis jobs

Read dry-run analysis result

Firmware update of multiple Server's against a single baseline

smartupdate --s
--target <ip_address_1>
--user <userid_1>
--passwd <password_1>
--target <ip_address_2>
--user <userid_2>
--passwd <password_2>
--use_location <baseline_directory_path>
smartupdate --s
--target <ip_address_1>
--user <userid_1>
--passwd <password_1>
--target <ip_address_2>
--user <userid_2>
--passwd <password_2>
--use_location <baseline_directory_path>

POST /compute-ops-mgmt/v1/auth/login

GET /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/firmware-bundles

GET /compute-ops-mgmt/v1/jobs/{jobId}

GET /compute-ops-mgmt/v1/servers

POST /compute-ops-mgmt/v1/jobs

POST /compute-ops-mgmt/v1/discovered-servers/actions/onboard

GET /compute-ops-mgmt/v1/jobs/{jobId}

POST /compute-ops-mgmt/v1/analyze-firmware-update

POST /compute-ops-mgmt/v1/jobs

GET /compute-ops-mgmt/v1/jobs/{jobId}

GET /compute-ops-mgmt/v1/servers/{serverId}?include-all-data=true

Authenticate to SUM and get access token

Check whether the single firmware baseline already exists

Import/upload the single baseline from --use_location, if not already present

Monitor baseline import job

Check whether each target server is already registered

Discover each target server if not already registered

Register/onboard each target server using its credentials

Monitor discovery and onboard jobs for each server

Run firmware analysis/dependency check for each server against the same baseline

Start firmware update job for each server using the same bundle_id

Monitor each firmware update job

Read final firmware update result for each server

Generate a deploy preview report

smartupdate --s
--target <ip_address>
--user <userid> 
--passwd <password> 
--use_location <baseline_directory_path> 
--report --reportdir <report_directory_path>
smartupdate --s
--target <ip_address>
--user <userid> 
--passwd <password> 
--use_location <baseline_directory_path> 
--report --reportdir <report_directory_path>

POST /compute-ops-mgmt/v1/auth/login

GET /compute-ops-mgmt/v1/servers

POST /compute-ops-mgmt/v1/jobs

POST /compute-ops-mgmt/v1/discovered-servers/actions/onboard

GET /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/analyze-firmware-update

GET /compute-ops-mgmt/v1/jobs/{jobId}

GET /compute-ops-mgmt/v1/servers/{serverId}?include-all-data=true

Authenticate to SUM and get access token

Check whether the target server is already registered

Discover target server if it is not already registered

Register/onboard the target server using iLO credentials

Check whether the firmware baseline already exists

Import/upload firmware baseline from --use_location

Generate deploy preview analysis. No firmware update is applied

Monitor discovery, onboard, baseline import, and deploy-preview analysis jobs

Read deploy preview data from lastAnalysisOperation

Generate installed updates report

smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path> 
--installed_report --reportdir <report_directory_path>
smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path> 
--installed_report --reportdir <report_directory_path>

POST /compute-ops-mgmt/v1/auth/login

GET /compute-ops-mgmt/v1/servers

POST /compute-ops-mgmt/v1/jobs

POST /compute-ops-mgmt/v1/discovered-servers/actions/onboard

GET /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/analyze-firmware-update

POST /compute-ops-mgmt/v1/jobs

GET /compute-ops-mgmt/v1/jobs/{jobId}

GET /compute-ops-mgmt/v1/servers/{serverId}?include-all-data=true

Authenticate to CFM and get access token

Check whether the target server is already registered

Discover target server if it is not already registered

Register/onboard the target server using iLO credentials

Check whether the firmware baseline already exists

Import/upload firmware baseline from --use_location

Run firmware analysis and dependency check before update

Start firmware update job

Monitor discovery, onboard, baseline import, analysis, and firmware update jobs

Read installed update result from lastFirmwareUpdate

Firmware update of server with Power off the server after an update

Not Applicable

smartupdate --s
--target <ip_address>
--user <userid>
--passwd <password>
--use_location <baseline_directory_path>
--power_off --reboot

Same APIs as Firmware update of Single Server. The only difference is in the firmware update job payload sent to POST /compute-ops-mgmt/v1/jobs, where jobParams.power_off is set to true.

Firmware update of localhost server

smartupdate --s
--target localhost 
--user <userid>
--passwd <password>
--use_location <baseline_directory_path>
smartupdate --s
--target localhost 
--user <userid>
--passwd <password>
--use_location <baseline_directory_path>

POST /compute-ops-mgmt/v1/auth/login

GET /compute-ops-mgmt/v1/servers

POST /compute-ops-mgmt/v1/discovered-servers/actions/onboard

GET /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/firmware-bundles

POST /compute-ops-mgmt/v1/analyze-firmware-update

POST /compute-ops-mgmt/v1/jobs

GET /compute-ops-mgmt/v1/jobs/{jobId}

GET /compute-ops-mgmt/v1/servers/{serverId}?include-all-data=true

Authenticate to SUM and get access token

Check whether localhost is already registered

Register/onboard localhost if credentials are required

Check whether the firmware baseline already exists

Import/upload firmware baseline from --use_location

Run firmware analysis and dependency check for localhost

Start firmware update job for localhost

Monitor onboarding, baseline import, analysis, and firmware update jobs

Read final firmware update result for localhost

Exit codes

Exit Code SUM CLI 12.x Exit code SUM CLI 20.x Linux ($?) Windows (%ERRORLEVEL) Meaning Exit Code (const) 20.x Description 20.x
0 0 0 0 SUCCESS — all updates applied, no reboot needed ExitSuccess SUCCESS_NO_REBOOT
1 1 1 1 SUCCESS — updates applied, reboot required to activate ExitReboot SUCCESS_REBOOT
3 3 3 3 SUCCESS — firmware already current, no updates needed ExitNotRequired SUCCESS_NOT_REQUIRED
-1 -1 255 -1 FAILURE — general error (auth, server unreachable, etc.) ExitGeneral FAILURE_GENERAL
-2 -2 254 -2 FAILURE — bad or missing CLI parameter / input file option ExitBadParam FAILURE_BAD_PARM
-3 -3 253 -3 FAILURE — one or more component installations failed ExitComponentFailed FAILURE_COMPONENT_FAILED
-4 -4 252 -4 FAILURE — update command failed (job submission, polling timeout, etc.) ExitCommandFailed FAILURE_COMMAND_FAILED