Skip to content

Commit c462bbf

Browse files
authored
Merge pull request #1283 from rackerlabs/ironic_node_inspect
docs: baremetal node operation steps
2 parents d38895e + 772a005 commit c462bbf

File tree

5 files changed

+247
-34
lines changed

5 files changed

+247
-34
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# Runbook: Configure Dell Node Boot Interface (HTTP/iPXE)
2+
3+
**Goal:** Ensure Dell baremetal nodes are configured to boot with `http-ipxe` (with PXE fallback enabled).
4+
**Applies To:** Dell nodes managed via OpenStack Ironic.
5+
6+
## TL;DR
7+
8+
```bash
9+
openstack baremetal node manage <NODE>
10+
openstack baremetal node clean --clean-steps dell-boot-config.yaml <NODE>
11+
openstack baremetal node set --boot-interface http-ipxe <NODE>
12+
openstack baremetal node provide <NODE>
13+
```
14+
15+
---
16+
17+
## Step 1: Put node into manageable state
18+
19+
```bash
20+
openstack baremetal node manage <NODE>
21+
```
22+
23+
---
24+
25+
## Step 2: Apply BIOS configuration
26+
27+
Save `dell-boot-config.yaml`:
28+
29+
```yaml
30+
---
31+
- interface: bios
32+
step: apply_configuration
33+
args:
34+
settings:
35+
- name: PxeDev1EnDis
36+
value: Enabled
37+
- name: PxeDev1Interface
38+
value: NIC.Slot.1-1
39+
- name: HttpDev1EnDis
40+
value: Enabled
41+
- name: HttpDev1Interface
42+
value: NIC.Slot.1-1
43+
- name: HttpDev1TlsMode
44+
value: None
45+
- name: TimeZone
46+
value: UTC
47+
order: 1
48+
```
49+
50+
Run cleaning with the runbook:
51+
52+
```bash
53+
openstack baremetal node clean \
54+
--clean-steps dell-boot-config.yaml \
55+
<NODE>
56+
```
57+
58+
---
59+
60+
## Step 3: Monitor Cleaning Progress
61+
62+
```bash
63+
openstack baremetal node show <NODE> -f value -c provision_state
64+
```
65+
66+
Check the provision state until it returns to `manageable`:
67+
68+
Expected transitions:
69+
70+
- `cleaning`
71+
- `clean wait`
72+
- `manageable`
73+
74+
---
75+
76+
- If provision_state is `clean failed`: check the error
77+
78+
```bash
79+
openstack baremetal node show <NODE> -f value -c last_error
80+
```
81+
82+
---
83+
84+
## Step 4: Switch node to HTTP iPXE boot
85+
86+
```bash
87+
openstack baremetal node set --boot-interface http-ipxe <NODE>
88+
```
89+
90+
---
91+
92+
## Step 5: Provide the node (make it available)
93+
94+
```bash
95+
openstack baremetal node provide <NODE>
96+
```
97+
98+
---
99+
100+
### (Optional) We can also use runbooks for Cleaning & Servicing
101+
102+
For detailed information, refer to the official OpenStack Ironic runbooks documentation:
103+
[OpenStack Ironic Runbooks](https://docs.openstack.org/ironic/latest/admin/runbooks.html/)
104+
105+
To run these commands [baremetal Standalone Command-Line Interface (CLI)](https://docs.openstack.org/python-ironicclient/latest/cli/standalone.html) is required
106+
107+
### Check for Existing Runbooks
108+
109+
Before creating a new runbook, verify if it already exists:
110+
111+
```bash
112+
baremetal runbook list
113+
```
114+
115+
### Create a New Runbook
116+
117+
```bash
118+
baremetal runbook create \
119+
--name CUSTOM_PXE_INTERFACE_CONFIG \
120+
--steps scripts/runbooks/bios_pxe_interface_config.yaml
121+
```
122+
123+
[scripts/runbooks/bios_pxe_interface_config.yaml](https://raw.githubusercontent.com/rackerlabs/understack/refs/heads/main/scripts/runbooks/bios_pxe_interface_config.yaml)
124+
125+
### Using a Runbook
126+
127+
```bash
128+
# Using a runbook name
129+
baremetal node clean --runbook CUSTOM_PXE_INTERFACE_CONFIG node-0
130+
131+
# Or using a runbook UUID
132+
baremetal node clean --runbook 8aba8375-a08b-4e89-9bae-291a8aa100b0 node-0
133+
```
134+
135+
---
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# Ironic Redfish Inspection Guide
2+
3+
This guide explains how to set a Baremetal node in OpenStack Ironic to use the Redfish inspection interface, run inspection, and view the gathered inspection data.
4+
5+
---
6+
7+
## 1. Set the Node to Use Redfish Inspect
8+
9+
First, update the node to use the `redfish` (or vendor-specific, e.g., `idrac-redfish`) inspect interface:
10+
11+
```bash
12+
openstack baremetal node set <NODE_UUID_OR_NAME> --inspect-interface idrac-redfish
13+
```
14+
15+
Note: By default, all our nodes have the following inspection interface:
16+
17+
```json
18+
"inspect_interface": "idrac-redfish"
19+
```
20+
21+
---
22+
23+
## 2. Run Inspection
24+
25+
Trigger inspection on the node:
26+
27+
```bash
28+
openstack baremetal node inspect <NODE_UUID_OR_NAME> --wait
29+
```
30+
31+
This command tells Ironic to boot the node into the inspection environment and gather hardware details via Redfish.
32+
33+
### Argo Workflow Integration
34+
35+
Our Argo [enroll-server](https://github.com/rackerlabs/understack/blob/05b7fb1a8ab9efd3b2f6544b5c62874ed39a3de5/workflows/argo-events/workflowtemplates/enroll-server.yaml#L41) workflow already runs Redfish inspection.
36+
Therefore, just running `openstack baremetal node inventory save` is enough to retrieve the inspection data.
37+
38+
---
39+
40+
## 3. Show Inspection Data
41+
42+
After inspection completes, you can view the data Ironic collected.
43+
44+
```bash
45+
openstack baremetal node inventory save <NODE_UUID_OR_NAME> --file inspection-data.json
46+
```
47+
48+
Sample inventory data:
49+
50+
```json
51+
{
52+
"inventory": {
53+
"memory": {
54+
"physical_mb": 98304
55+
},
56+
"cpu": {
57+
"count": 32,
58+
"model_name": "AMD EPYC 9124 16-Core Processor",
59+
"frequency": 4400,
60+
"architecture": "x86_64"
61+
},
62+
"disks": [
63+
{
64+
"name": "Solid State Disk 0:1:0",
65+
"size": 479559942144
66+
},
67+
{
68+
"name": "Solid State Disk 0:1:1",
69+
"size": 479559942144
70+
}
71+
],
72+
"interfaces": [
73+
{
74+
"mac_address": "D4:CB:E1:BF:8E:21"
75+
},
76+
{
77+
"mac_address": "D4:CB:E1:BF:8E:20"
78+
}
79+
],
80+
"system_vendor": {
81+
"product_name": "System",
82+
"serial_number": "MXVX4003C100KL",
83+
"manufacturer": "Dell Inc."
84+
},
85+
"boot": {
86+
"current_boot_mode": "uefi"
87+
}
88+
},
89+
"plugin_data": {}
90+
}
91+
```
92+
93+
This will save the inspection data (hardware details, NICs, storage, CPU, etc.) to a JSON file.
94+
95+
You can also query directly:
96+
97+
```bash
98+
openstack baremetal node show <NODE_UUID_OR_NAME> -f json
99+
```
100+
101+
Look under fields like `properties`, `extra`, and `driver_internal_info` for inspection results.
102+
103+
---

mkdocs.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ nav:
150150
- operator-guide/index.md
151151
- 'OpenStack':
152152
- operator-guide/openstack-ironic.md
153+
- operator-guide/openstack-ironic-inspection-guide.md
154+
- operator-guide/openstack-ironic-change-boot-interface.md
153155
- operator-guide/openstack-neutron.md
154156
- operator-guide/openstack-placement.md
155157
- 'Networking':

scripts/runbooks/README.md

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
11
---
2+
# Runbook Name: Dell Boot Interface Reconfiguration
3+
# Purpose: Ensure Dell baremetal nodes boot via HTTP (http-ipxe) with fallback PXE enabled.
24

35
- interface: bios
46
step: apply_configuration
57
args:
68
settings:
9+
# Enable PXE boot on NIC 1-1
710
- name: PxeDev1EnDis
811
value: Enabled
912
- name: PxeDev1Interface
1013
value: NIC.Slot.1-1
14+
15+
# Enable HTTP boot on NIC 1-1
1116
- name: HttpDev1EnDis
1217
value: Enabled
1318
- name: HttpDev1Interface
1419
value: NIC.Slot.1-1
1520
- name: HttpDev1TlsMode
1621
value: None
22+
23+
# Set timezone to UTC
1724
- name: TimeZone
1825
value: UTC
1926
order: 1

0 commit comments

Comments
 (0)