Dell iDRAC (Redfish)
v0.2.5Monitor and operate a Dell iDRAC over its Redfish REST API with curl — system identity and health rollup, the Dell subsystem rollup, storage controllers and drives, power and thermal telemetry, firmware inventory, the System Event Log and Lifecycle Controller log, and the Lifecycle Controller job queue. Plus gated mutators: power control (ComputerSystem.Reset), clear / delete a job, and clear the SEL. Targets an iDRAC by hostname/IP; credentials come from the runner environment. Reads are read-only GETs.
curl
Install
emisar pack install
fetches this pack, re-validates it, and verifies its content hash against the
--hash
below — the exact bytes this page was rendered against, so a tampered copy is
rejected — before copying it into the runner's packs dir. The command reloads a
running daemon itself; no manual restart.
sudo emisar pack install dell-idrac --hash sha256:77bf347e730d904f624b87a802384354c4a53e605ebecfa324a566fabef12c70
Setup
Every action calls the iDRAC Redfish API at https://{{ args.host }}/redfish via curl on the runner host. The target must be listed exactly in
IDRAC_ALLOWED_HOSTS
. Auth is HTTP Basic from
IDRAC_USER
and
IDRAC_PASSWORD
(sent as an Authorization header over curl stdin, never in argv or the audit log).
Environment
Set these on the runner host, then add each name to
execution.inherit_env
so the value reaches the action.
-
IDRAC_ALLOWED_HOSTSrequiredComma-separated exact iDRAC hostnames or IPv4 addresses that actions may target. Hostname matching is ASCII case-insensitive; entries do not accept wildcards, CIDRs, URLs, or spaces.
-
IDRAC_USERrequirediDRAC account name. Provision a dedicated least-privilege account: a read-only role covers every read; the job and reset mutators need an Operator/ConfigureComponents role.
-
IDRAC_PASSWORDrequirediDRAC account password. Sent as an HTTP Basic Authorization header piped to curl over stdin, so it never lands in argv, a
pslisting, or the audit log. -
IDRAC_INSECURESet to exactly "true" to skip TLS verification of the iDRAC certificate. Unset (and any other value) verifies — the secure default, since credentials travel over this channel. iDRAC ships a Dell self-signed cert, so either install a CA-signed cert on the iDRAC (preferred) or set this escape hatch explicitly for a self-signed fleet.
Notes
- Create the account in the iDRAC web UI under iDRAC Settings → Users → Local Users: take a free slot, enable it, and give it the Read Only role for the reads or Operator for the job and reset mutators.
-
IDRAC_ALLOWED_HOSTS,IDRAC_USER,IDRAC_PASSWORD, and anyIDRAC_INSECUREoverride must also be allowlisted in the runner'sexecution.inherit_env— the action env is scrubbed to PATH/LANG/LC_ALL/TERM by default, so a variable present on the host but not inherited is silently dropped and the call is refused or fails to authenticate. - Auth is HTTP Basic on purpose. It consumes no iDRAC session slot, whereas X-Auth-Token sessions draw from the shared web/Redfish session budget (iDRAC9: 8 concurrent, iDRAC8: 6); monitoring tools that open sessions and never close them are the classic cause of a 'maximum number of user sessions reached' lockout of the GUI/admin. Stateless Basic polls avoid that entirely.
- Redfish API access (health, power/thermal, SEL/LC logs, firmware inventory, job queue, power control) is available at the iDRAC Basic license tier — this pack needs no Enterprise/Datacenter license. Streaming telemetry (SSE) would; plain polling does not.
- Resource IDs are the stable embedded primaries System.Embedded.1 (system/chassis) and iDRAC.Embedded.1 (manager), unchanged across iDRAC8 and iDRAC9. The power/thermal reads use the universal /Power and /Thermal resources; newer firmware also exposes /PowerSubsystem, /ThermalSubsystem, and /Sensors, reachable via the generic get action.
Verify it works
Runs idrac.system, a low-risk
read that confirms the pack can reach its target. Run it on the host once the pack
is installed; pack install runs it for
you.
sudo emisar pack verify dell-idrac
Install and configure a pack walks through the whole sequence on a host.
Actions 15 total
View on GitHub-
idrac.clear_job_queue script high High — service-affecting
Clear the Lifecycle Controller job queue
Clear the iDRAC job queue — POST /redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/DellJobService/Actions/DellJobService.DeleteJobQueue. JID_CLEARALL deletes all scheduled jobs and the pending attribute values attached to them; JID_CLEARALL_FORCE additionally restarts the Lifecycle Controller services — a last resort when the iDRAC/LC is wedged. Use to unstick a queue that is blocking new config or firmware jobs. Inspect the queue with jobs first; this can cancel work that is mid-flight.
View source on GitHub -
idrac.clear_sel script high High — service-affecting
Clear the System Event Log
Erase the iDRAC System Event Log — POST /redfish/v1/Managers/iDRAC.Embedded.1/LogServices/Sel/Actions/LogService.ClearLog. IRREVERSIBLE: every SEL entry is wiped and cannot be recovered. Pull the log with sel first if you need a record. Routine after addressing the faults a server logged, but it destroys forensic history, so it is gated. (The Lifecycle Controller log is append-only and is intentionally not clearable here.)
View source on GitHub -
idrac.delete_job script medium Medium — changes state, easily reversible
Delete one Lifecycle Controller job
Delete a single job from the queue by id — DELETE /redfish/v1/Managers/iDRAC.Embedded.1/Jobs/JID_xxxxxxxxxxxx. The surgical alternative to clear_job_queue: remove one stuck or unwanted job (find its JID with jobs) without touching the rest of the queue. Deleting a scheduled job discards its pending change; it does not undo a job that already completed.
View source on GitHub -
idrac.firmware script low Low — read-only or trivially reversible
List installed firmware versions
List the firmware inventory — GET /redfish/v1/UpdateService/FirmwareInventory?$expand=*($levels=1). Returns one member per component (BIOS, iDRAC, NIC, PERC, PSU, drives, …) with its Version and whether it is Updateable. Members are prefixed Installed- (running), Available- (staged/pending), or Previous- (rollback image). The answer to "what firmware is on this box and is anything pending?".
View source on GitHub -
idrac.get script low Low — read-only or trivially reversible
GET an arbitrary Redfish resource
Get any Redfish resource by path — a read-only GET under /redfish/v1 that the curated reads do not cover. Give a path like /Chassis/System.Embedded.1/Sensors or /Systems/System.Embedded.1/Memory?$expand=*($levels=1), including a query string ($expand, $skip, $filter). Use it to reach newer subsystems (/PowerSubsystem, /ThermalSubsystem), page a long log (?$skip=50), or read a single job (/Managers/iDRAC.Embedded.1/Jobs/JID_xx…). Read-only — it only ever issues a GET.
View source on GitHub -
idrac.health script low Low — read-only or trivially reversible
Show per-subsystem health rollup
Show the Dell subsystem health rollup in one call — GET /redfish/v1/Systems/System.Embedded.1/Oem/Dell/DellRollupStatus. Returns a member per subsystem (Processor, Memory, Storage, Fan, PowerSupply, Voltage, Intrusion, …), each with a SubSystem name and its RollupStatus (Ok / Warning / Critical), so one read tells you exactly which subsystem is degraded. The fastest "what is unhealthy on this box?" answer.
View source on GitHub -
idrac.jobs script low Low — read-only or trivially reversible
List Lifecycle Controller jobs
List the Lifecycle Controller job queue — GET /redfish/v1/Managers/iDRAC.Embedded.1/Jobs?$expand=*($levels=1). Each job is expanded inline with its Id (JID_...), JobState (Scheduled / Running / Completed / Failed), PercentComplete, and Message. The answer to "what config/firmware jobs are queued or running, and how far along?". A queued job shows JobState Scheduled — read PercentComplete for true progress. Read-only.
View source on GitHub -
idrac.lclog script low Low — read-only or trivially reversible
List Lifecycle Controller log entries
List the Lifecycle Controller log — GET /redfish/v1/Managers/iDRAC.Embedded.1/LogServices/Lclog/Entries. The LC log is the iDRAC's own activity history: configuration changes, firmware updates, job results, and component events, each with Created, Severity, MessageId, and Message. Broader than the SEL (which is hardware faults only). Read-only.
View source on GitHub -
idrac.manager script low Low — read-only or trivially reversible
Show iDRAC manager state and firmware
Show the iDRAC controller itself — GET /redfish/v1/Managers/iDRAC.Embedded.1. Returns the iDRAC firmware version, model, date/time, and its own Status.Health. Use to confirm the management controller's firmware level and that the iDRAC is healthy, as distinct from the server it manages.
View source on GitHub -
idrac.power script low Low — read-only or trivially reversible
Show power supplies and consumption
Show power telemetry — GET /redfish/v1/Chassis/System.Embedded.1/Power. Returns each power supply (model, capacity, line input, Status.Health) and their redundancy, the system voltages, and the current/average power consumed in watts. Use to check PSU health/redundancy and draw. (Newer iDRAC firmware also serves /PowerSubsystem; this universal /Power resource works on iDRAC8 and iDRAC9.)
View source on GitHub -
idrac.power_control script critical Critical — data loss or irreversible
Reset / power-control the server
Change the server's power state via Redfish — POST /redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset with the chosen ResetType. GracefulShutdown and GracefulRestart ask the OS to stop cleanly; ForceOff, ForceRestart, PowerCycle, and Nmi are abrupt and can lose in-flight data. On (power up) and PushPowerButton (toggle) are also available. Check the current state with system (PowerState) first. The exact ResetType set varies by iDRAC firmware — the iDRAC rejects an unsupported value with an error.
View source on GitHub -
idrac.sel script low Low — read-only or trivially reversible
List System Event Log entries
List the System Event Log — GET /redfish/v1/Managers/iDRAC.Embedded.1/LogServices/Sel/Entries. Each entry has Created, Severity (OK / Warning / Critical), Message, MessageId, and the sensor that raised it — the hardware-fault history (ECC, PSU, thermal, intrusion). Read-only. For a long log, page with the generic get action and ?$skip=N, or filter with ?$filter=Severity eq 'Critical'.
View source on GitHub -
idrac.storage script low Low — read-only or trivially reversible
Show storage controllers and drives
List the storage subsystem with controllers and drives expanded in one call — GET /redfish/v1/Systems/System.Embedded.1/Storage?$expand=*($levels=1). Returns each controller (e.g. PERC) and its physical drives with capacity, media type, and Status.Health, so you can spot a predicted or failed drive. Read-only.
View source on GitHub -
idrac.system script low Low — read-only or trivially reversible
Show system identity, power state, health
Show the server's top-line state — GET /redfish/v1/Systems/System.Embedded.1. Returns model, service tag (SKU), BIOS version, PowerState (On/Off), the overall Status.HealthRollup (OK / Warning / Critical, aggregating subordinate subsystems), and the inline ProcessorSummary and MemorySummary health. The starting point for "what is this server and is it healthy?", and the action to verify the pack can reach and authenticate to an iDRAC.
View source on GitHub -
idrac.thermal script low Low — read-only or trivially reversible
Show fans and temperatures
Show thermal telemetry — GET /redfish/v1/Chassis/System.Embedded.1/Thermal. Returns each temperature sensor (inlet, exhaust, CPU) in Celsius with its thresholds and each fan's RPM and Status.Health, plus fan redundancy. Use to check for a hot inlet, a failed fan, or lost cooling redundancy. (Newer iDRAC firmware also serves /ThermalSubsystem; this universal /Thermal resource works on iDRAC8 and iDRAC9.)
View source on GitHub