> ## Documentation Index
> Fetch the complete documentation index at: https://sambanova-systems.mintlify.site/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Power Operations

The `snctl power` command group controls and monitors DC power for SN40L nodes. Power operations live in their own top-level command group, separate from `snctl node`.

<Info>
  Power operations affect **actual hardware**. They perform **DC cycle** operations through management interfaces (IPMI, Redfish, or SSH), and do **not** control AC power (PDUs), network switches, serial console servers, or other infrastructure components.
</Info>

***

## Key concepts

Read this section once. Everything after it depends on these five things.

### Prerequisites

Every power command authenticates to the target devices, so device credentials must be registered first. If they are missing or wrong, the command fails to authenticate.

```bash theme={}
snctl secret set --device-type bmc
snctl secret set --device-type card
snctl secret set --device-type host
snctl secret set --device-type xrdu
```

See [Device credentials](srm-device-credentials) for details.

### What each `--type` targets

| `--type` | Targets                                                 | Notes                                                                                   |
| -------- | ------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| `node`   | The complete physical unit — host CPU **and** all XRDUs | Default. This is the ordering firmware procedures expect before a BIOS or XRDU upgrade. |
| `host`   | The host system only                                    |                                                                                         |
| `xrdu`   | The SambaNova execution units only                      |                                                                                         |

`snctl power cycle` does **not** accept `--type` — it always targets the whole node.

### Choosing a target

<Note>
  Either `--node` or `--group` must be specified. They are mutually exclusive.
</Note>

| Flag                       | Accepts                                              |
| -------------------------- | ---------------------------------------------------- |
| `--node <name_or_rack_id>` | A node name (`sn40l-16-001-n1`) or a rack ID (`001`) |
| `--group <name>`           | A group name — targets every node in that group      |

### The SambaNova Daemon check

`snctl power on` and `snctl power cycle` wait for `snd.service` (the SambaNova Daemon) to become active before returning, so a successful exit means the node is ready for work rather than merely powered.

Pass `--skip-snd-check` to return as soon as power is applied, without waiting for the daemon. Use it when powering on hardware that is not expected to boot into a working SambaStack environment — for example, immediately before a firmware upgrade.

```bash theme={}
snctl power on --node sn40l-16-001-n1 --type node --skip-snd-check
```

`snctl power off` and `snctl power state` do not wait for the daemon and have no `--skip-snd-check` flag.

### Flags

| Flag                          | Description                                                           | Applies to           |
| ----------------------------- | --------------------------------------------------------------------- | -------------------- |
| `--node <name_or_rack_id>`    | Target a single node by name or rack ID                               | All                  |
| `--group <name>`              | Target all nodes in a named group                                     | All                  |
| `--type <device_type>`        | `node` (default), `host`, or `xrdu`                                   | `state`, `on`, `off` |
| `-o, --output <format>`       | `text` (default), `wide`, or `json`                                   | All                  |
| `--protocol <protocol>`       | Override the default management protocol: `ipmi`, `ssh`, or `redfish` | All                  |
| `--skip-snd-check`            | Return without waiting for `snd.service`                              | `on`, `cycle`        |
| `-p, --parallelism-racks <n>` | Max racks processed simultaneously (`0` = uncapped)                   | All                  |
| `--parallelism-devices <n>`   | Global max nodes in-flight across all racks (`0` = uncapped)          | All                  |

### Concurrency defaults

`--parallelism-racks` caps how many racks are processed at once, and its default differs per subcommand:

| Subcommand    | Default `--parallelism-racks`                  |
| ------------- | ---------------------------------------------- |
| `power state` | `0` (uncapped — all racks queried in parallel) |
| `power on`    | `4`                                            |
| `power off`   | `1`                                            |
| `power cycle` | `1`                                            |

```bash theme={}
# Process up to 4 racks at a time (power on default)
snctl power on --group production --type node --parallelism-racks 4

# Process racks one at a time (safer for power off / cycle)
snctl power off --group production --type node --parallelism-racks 1

# No limit — start all racks at once
snctl power state --group production --type node --parallelism-racks 0
```

`--parallelism-devices` is a separate, global cap on nodes in-flight across **all** racks at once, regardless of how many racks are being processed. Use it to limit the total number of simultaneous IPMI, Redfish, and SSH sessions against your management network:

```bash theme={}
# Allow up to 8 racks in parallel, but cap total nodes at 5
snctl power on --group large-cluster --parallelism-racks 8 --parallelism-devices 5
```

***

## Check power state

Query the current power state of a node or its components. This is read-only and safe to run at any time.

```bash theme={}
snctl power state \
  [--node <node_name_or_rack_id>] \
  [--group <group_name>] \
  [--type <device_type>]
```

Each cell reports `On`, `Off`, or `Unknown`. A component that could not be reached shows `Error`, with the reason listed as a note below the table.

**Single node:**

```bash theme={}
snctl power state --node sn40l-16-001-n1 --type node
```

```powershell theme={}
Node (Rack)            Host  XRDU/0  XRDU/1  XRDU/2  XRDU/3  XRDU/4  XRDU/5  XRDU/6  XRDU/7
---------------------  ----  ------  ------  ------  ------  ------  ------  ------  ------
sn40l-16-001-n1 (001)  On    On      On      On      On      On      On      On      On
```

**Every node in a group:**

```bash theme={}
snctl power state --group production --type node
```

```powershell theme={}
Node (Rack)            Host  XRDU/0  XRDU/1  XRDU/2  XRDU/3  XRDU/4  XRDU/5  XRDU/6  XRDU/7
---------------------  ----  ------  ------  ------  ------  ------  ------  ------  ------
sn40l-16-001-n1 (001)  On    On      On      On      On      On      On      On      On
sn40l-16-002-n1 (002)  On    On      On      On      On      On      On      On      On
```

**Host only:**

```bash theme={}
snctl power state --node sn40l-16-001-n1 --type host
```

```powershell theme={}
Node (Rack)            Host
---------------------  ----
sn40l-16-001-n1 (001)  On
```

**Including the protocol that answered each query:**

```bash theme={}
snctl power state --node sn40l-16-001-n1 --type node -o wide
```

With `-o wide`, the protocol is appended inline to each state rather than added as a separate column, because the table is pivoted with one column per component:

```powershell theme={}
Node (Rack)  Host     XRDU/0   XRDU/1   XRDU/2   XRDU/3   XRDU/4   XRDU/5   XRDU/6   XRDU/7
-----------  -------  -------  -------  -------  -------  -------  -------  -------  -------
sn40l-16-001-n1 (001)  On (ipmi)  On (redfish)  On (redfish)  On (redfish)  On (redfish)  On (redfish)  On (redfish)  On (redfish)  On (redfish)
```

***

## Power on

Turn on a node, its host, or its XRDUs.

```bash theme={}
snctl power on \
  [--node <node_name_or_rack_id>] \
  [--group <group_name>] \
  [--type <device_type>] \
  [--skip-snd-check]
```

```bash theme={}
# Power on an entire node
snctl power on --node sn40l-16-001-n1 --type node
```

```powershell theme={}
#Expected Output
sn40l-16-001-n1 (001)
  Powering on XRDUs  OK
  Powering on Host  OK
  Waiting for Host to Boot  OK
  Waiting for snd.service to start  OK
```

```bash theme={}
# Power on the host only
snctl power on --node sn40l-16-001-n1 --type host

# Power on every node in a group
snctl power on --group production --type node
```

***

## Power off

Turn off a node, its host, or its XRDUs.

```bash theme={}
snctl power off \
  [--node <node_name_or_rack_id>] \
  [--group <group_name>] \
  [--type <device_type>]
```

```bash theme={}
# Power off an entire node (host and XRDUs)
snctl power off --node sn40l-16-001-n1 --type node
```

```powershell theme={}
#Expected Output
sn40l-16-001-n1 (001)
  Powering off Host  OK
  Powering off Node  OK
```

```bash theme={}
# Power off the host only
snctl power off --node sn40l-16-001-n1 --type host

# Power off every node in a group
snctl power off --group production --type node
```

***

## Power cycle

Power-cycle the entire node. Unlike the other subcommands, `power cycle` always targets the whole node — it does not accept a component `--type`.

```bash theme={}
snctl power cycle \
  [--node <node_name_or_rack_id>] \
  [--group <group_name>] \
  [--skip-snd-check]
```

```bash theme={}
# Power cycle a single node
snctl power cycle --node sn40l-16-001-n1
```

```powershell theme={}
#Expected Output
sn40l-16-001-n1 (001)
  Powering off Host  OK
  Powering off XRDUs  OK
  Waiting before power-on  OK
  Powering on XRDUs  OK
  Powering on Host  OK
  Waiting for Host to Boot  OK
  Waiting for snd.service to start  OK
```

```bash theme={}
# Power cycle every node in a group
snctl power cycle --group production
```

***

## Next step

To check or upgrade firmware on these nodes, see [Firmware Updates](srm-firmware-updates).
