@@ -70,11 +70,11 @@ Server Enrollment → Redfish Inspection → Oslo Event Bus → Argo Events Sens
7070
71715 . ** Workflow Trigger**
7272 - Sensor creates an Argo Workflow named ` update-nautobot-* `
73- - Workflow uses template ` update-nautobot-on- openstack-oslo-event`
73+ - Workflow uses template ` openstack-oslo-event `
7474 - Event data is passed as workflow parameter
7575
76766 . ** Data Processing**
77- - Workflow executes ` update-nautobot-on- openstack-oslo-event` script
77+ - Workflow executes ` openstack-oslo-event ` script
7878 - Script fetches full inventory data from Ironic API using node UUID
7979 - Inventory data is parsed and transformed into Nautobot format
8080
@@ -88,7 +88,7 @@ Server Enrollment → Redfish Inspection → Oslo Event Bus → Argo Events Sens
8888
8989### Sensor Configuration
9090
91- ** File:** ` components/site-workflows/sensors/sensor-ironic-oslo-inspecting- event.yaml `
91+ ** File:** ` components/site-workflows/sensors/sensor-ironic-oslo-event.yaml `
9292
9393The sensor configuration defines:
9494
@@ -99,11 +99,11 @@ The sensor configuration defines:
9999
100100### Workflow Template
101101
102- ** File:** ` workflows/argo-events/workflowtemplates/update-nautobot-on- openstack-oslo-event.yaml `
102+ ** File:** ` workflows/argo-events/workflowtemplates/openstack-oslo-event.yaml `
103103
104104The workflow template:
105105
106- - Runs the ` update-nautobot-on- openstack-oslo-event` command
106+ - Runs the ` openstack-oslo-event ` command
107107- Mounts Nautobot token and OpenStack credentials
108108- Passes event JSON as input file
109109- Uses service account with appropriate permissions
@@ -135,86 +135,47 @@ LLDP (Link Layer Discovery Protocol) data is extracted from inspection results:
135135- ** Port ID (Type 2)** : Remote switch port name
136136- ** Port Description (Type 4)** : Alternative port identifier
137137
138- The system requires a minimum of 3 LLDP neighbors to be discovered for validation.
139-
140138#### Device Information
141139
142140The following device attributes are extracted:
143141
144- - ** Manufacturer** : System vendor (e.g., Dell)
145- - ** Model** : Product name
146- - ** Serial Number** : System serial number
147- - ** BMC IP Address** : Out-of-band management IP
148- - ** BIOS Version** : Firmware version
149- - ** Memory** : Total RAM in GiB
150- - ** CPU** : Processor model
151-
152- ### Nautobot Device Creation
153-
154- ** Module:** ` understack_workflows.nautobot_device `
155-
156- #### Device Creation Process
157-
158- 1 . ** Switch Discovery**
159- - Identifies switches using LLDP MAC addresses
160- - Queries Nautobot for devices with matching ` chassis_mac_address ` custom field
161- - Validates all switches are in the same location/rack
162-
163- 2 . ** Device Lookup**
164- - Searches for existing device by serial number
165- - If not found, creates new device with:
166- - Status: "Planned"
167- - Role: "server"
168- - Location and rack from connected switches
169- - Device type based on manufacturer and model
170-
171- 3 . ** Interface Creation**
172- - Creates or updates network interfaces
173- - Sets MAC addresses
174- - Assigns interface types:
175- - BMC interfaces: ` 1000base-t `
176- - Server interfaces: ` 25gbase-x-sfp28 `
177- - Sets status to "Active"
178-
179- 4 . ** Cable Documentation**
180- - Creates cables between server and switch interfaces
181- - Uses LLDP data to identify correct switch ports
182- - Sets cable status to "Connected"
183-
184- 5 . ** IP Address Assignment**
185- - Assigns IP addresses to BMC interfaces
186- - Associates IP with interface in Nautobot IPAM
187- - Converts DHCP leases to static assignments if applicable
188-
189- ## Validation and Error Handling
190-
191- ### LLDP Neighbor Validation
192-
193- The system validates that sufficient LLDP neighbors are discovered:
194-
195- ``` python
196- MIN_REQUIRED_NEIGHBOR_COUNT = 3
197- ```
198-
199- If fewer than 3 neighbors are found, the workflow fails with a detailed error message showing which interfaces have LLDP data.
200-
201- ### Location Consistency
202-
203- All connected switches must be in the same location and rack. If switches span multiple locations, the workflow fails to prevent topology errors.
204-
205- ### IP Address Conflicts
206-
207- The system detects and prevents:
208-
209- - IP addresses already assigned to different interfaces
210- - Interfaces already associated with different IP addresses
211-
212- ### Switch Port Conflicts
213-
214- When creating cables, the system validates:
215-
216- - Switch interface exists in Nautobot
217- - Switch port is not already connected to another device
142+ - ** Manufacturer** : System vendor from ` system_vendor.manufacturer ` (e.g., Dell)
143+ - ** Model Number** : Product name from ` system_vendor.product_name ` (stripped of parenthetical suffixes)
144+ - ** Serial Number** : System serial number from ` system_vendor.serial_number `
145+ - ** BMC IP Address** : Out-of-band management IP from ` bmc_address `
146+ - ** BMC MAC Address** : BMC interface MAC address from ` bmc_mac `
147+ - ** BIOS Version** : Firmware version from ` system_vendor.firmware.version `
148+ - ** Memory** : Total RAM in GiB (converted from ` memory.physical_mb ` )
149+ - ** CPU** : Processor model from ` cpu.model_name `
150+ - ** Power State** : Assumed to be powered on during inspection
151+ - ** Hostname** : System hostname from inventory
152+
153+ #### Interface Information
154+
155+ For each network interface discovered during inspection, the following attributes are extracted:
156+
157+ ** BMC Interface (iDRAC):**
158+
159+ - ** Name** : "iDRAC"
160+ - ** Description** : "Dedicated iDRAC interface"
161+ - ** MAC Address** : From ` bmc_mac ` (normalized to uppercase)
162+ - ** Hostname** : System hostname
163+ - ** IPv4 Address** : From ` bmc_address ` (assumed /26 subnet)
164+ - ** IPv4 Gateway** : Not set for Ironic-sourced data
165+ - ** DHCP** : False (assumed static)
166+ - ** LLDP Data** : Not collected for BMC interface
167+
168+ ** Server Interfaces:**
169+
170+ - ** Name** : Linux interface name converted to Redfish format (e.g., ` eno8303 ` → ` NIC.Embedded.1-1-1 ` )
171+ - ** Description** : Network driver name + " interface" (e.g., "bnxt_en interface")
172+ - ** MAC Address** : From interface ` mac_address ` (normalized to uppercase)
173+ - ** Hostname** : System hostname
174+ - ** IPv4 Address** : Not collected for server interfaces (only BMC has IP)
175+ - ** LLDP Neighbor Data** (parsed from LLDP TLVs):
176+ - ** Remote Switch MAC Address** : From LLDP TLV Type 1 (Chassis ID, subtype 4 - MAC address)
177+ - ** Remote Switch Port Name** : From LLDP TLV Type 2 (Port ID) or Type 4 (Port Description)
178+ - ** Data Staleness** : Marked as fresh (not stale) for Ironic inspection data
218179
219180## Monitoring and Troubleshooting
220181
@@ -266,13 +227,13 @@ This will publish the Oslo event and trigger Nautobot synchronization.
266227You can manually trigger the Nautobot update workflow for testing:
267228
268229``` bash
269- # Capture an event from Ironic
270- openstack baremetal node show < node-uuid > -f json > node.json
230+ # To view inspect inventory data
231+ openstack baremetal node inventory save [--file < filename > ] < node>
271232
272233# Submit workflow manually
273234argo -n argo-events submit \
274- --from workflowtemplate/update-nautobot-on- openstack-oslo-event \
275- -p event-json " $( cat node.json ) "
235+ --from workflowtemplate/openstack-oslo-event \
236+ -p event-json ' {"event_type":"baremetal. node.provision_set.end","payload":{"ironic_object.data":{"uuid":"<node-uuid>", "previous_provision_state":"inspecting"}}} '
276237```
277238
278239### Verifying Results
0 commit comments