|
| 1 | +# sno-2-bm Scenario |
| 2 | + |
| 3 | +## Overview |
| 4 | + |
| 5 | +A Single Node OpenShift (SNO) scenario designed to test OpenStack Ironic bare |
| 6 | +metal provisioning with 2 dedicated Ironic nodes. This scenario validates the |
| 7 | +complete OpenStack bare metal lifecycle including node enrollment, |
| 8 | +provisioning, and comprehensive Tempest testing. |
| 9 | + |
| 10 | +## Architecture |
| 11 | + |
| 12 | +<!-- markdownlint-disable MD013 --> |
| 13 | +```mermaid |
| 14 | +graph TD |
| 15 | + Internet[("Internet")] |
| 16 | + Router{{"Neutron<br/>Router"}} |
| 17 | +
|
| 18 | + MachineNet["Machine Network<br/>192.168.32.0/24"] |
| 19 | + CtlPlane["CtlPlane Network<br/>192.168.122.0/24"] |
| 20 | + VLANNets["VLAN Trunk Networks<br/>Internal API: 172.17.0.0/24<br/>Storage: 172.18.0.0/24<br/>Tenant: 172.19.0.0/24"] |
| 21 | + IronicNet["Ironic Network<br/>172.20.1.0/24"] |
| 22 | +
|
| 23 | + Controller["Controller<br/>192.168.32.254<br/>DNS/HAProxy"] |
| 24 | + Master["SNO Master<br/>192.168.32.10"] |
| 25 | + IronicNodes["Ironic Nodes x2<br/>Virtual Baremetal"] |
| 26 | +
|
| 27 | + LVM["TopoLVM<br/>20GB"] |
| 28 | + CinderVols["Cinder Volumes x3<br/>20GB each"] |
| 29 | +
|
| 30 | + Internet --- Router |
| 31 | +
|
| 32 | + Router --- MachineNet |
| 33 | + Router --- CtlPlane |
| 34 | + Router --- VLANNets |
| 35 | + Router --- IronicNet |
| 36 | +
|
| 37 | + MachineNet --- Controller |
| 38 | + MachineNet --- Master |
| 39 | + CtlPlane --- Master |
| 40 | + VLANNets --- Master |
| 41 | + IronicNet --- Master |
| 42 | + IronicNet --- IronicNodes |
| 43 | +
|
| 44 | + Master --- LVM |
| 45 | + Master --- CinderVols |
| 46 | +
|
| 47 | + style Controller fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#fff |
| 48 | + style Master fill:#F5A623,stroke:#C87D0E,stroke-width:3px,color:#fff |
| 49 | + style IronicNodes fill:#9B59B6,stroke:#6C3A82,stroke-width:2px,color:#fff |
| 50 | + style Router fill:#27AE60,stroke:#1E8449,stroke-width:3px,color:#fff |
| 51 | +``` |
| 52 | +<!-- markdownlint-enable MD013 --> |
| 53 | + |
| 54 | +### Component Details |
| 55 | + |
| 56 | +- **Controller**: Hotstack controller providing DNS, load balancing, and |
| 57 | + orchestration services |
| 58 | +- **SNO Master**: Single-node OpenShift cluster running the complete OpenStack |
| 59 | + control plane |
| 60 | +- **Ironic Nodes**: 2 virtual bare metal nodes for testing Ironic provisioning workflows |
| 61 | + |
| 62 | +## Features |
| 63 | + |
| 64 | +- OpenStack Ironic bare metal provisioning service |
| 65 | +- Virtual BMC using sushy-tools for RedFish emulation |
| 66 | +- Comprehensive Tempest testing (scenario and API tests) |
| 67 | +- Complete OpenStack service stack (Nova, Neutron, Glance, Swift, etc.) |
| 68 | +- TopoLVM for local storage management |
| 69 | +- Multi-network setup for OpenStack services |
| 70 | +- Automatic node enrollment and lifecycle management |
| 71 | + |
| 72 | +## Networks |
| 73 | + |
| 74 | +- **machine-net**: 192.168.32.0/24 (OpenShift cluster network) |
| 75 | +- **ctlplane-net**: 192.168.122.0/24 (OpenStack control plane) |
| 76 | +- **internal-api-net**: 172.17.0.0/24 (OpenStack internal services) |
| 77 | +- **storage-net**: 172.18.0.0/24 (Storage backend communication) |
| 78 | +- **tenant-net**: 172.19.0.0/24 (Tenant network traffic) |
| 79 | +- **ironic-net**: 172.20.1.0/24 (Bare metal provisioning network) |
| 80 | + |
| 81 | +## OpenStack Services |
| 82 | + |
| 83 | +This scenario deploys a comprehensive OpenStack environment: |
| 84 | + |
| 85 | +### Core Services |
| 86 | + |
| 87 | +- **Keystone**: Identity service with LoadBalancer on Internal API |
| 88 | +- **Nova**: Compute service with Ironic driver for bare metal |
| 89 | +- **Neutron**: Networking service with OVN backend |
| 90 | +- **Glance**: Image service with Swift backend |
| 91 | +- **Swift**: Object storage service |
| 92 | +- **Placement**: Resource placement service |
| 93 | + |
| 94 | +### Bare Metal Services |
| 95 | + |
| 96 | +- **Ironic**: Bare metal provisioning service |
| 97 | +- **Ironic Inspector**: Hardware inspection service |
| 98 | +- **Ironic Neutron Agent**: Network management for bare metal |
| 99 | + |
| 100 | +## Ironic Testing |
| 101 | + |
| 102 | +### Node Configuration |
| 103 | + |
| 104 | +- **2 Ironic Nodes**: Virtual instances with sushy-tools RedFish BMC |
| 105 | +- **Flavor**: hotstack.medium (configurable) |
| 106 | +- **Network**: Connected to dedicated Ironic provisioning network |
| 107 | + |
| 108 | +### Test Scenarios |
| 109 | + |
| 110 | +The scenario includes Tempest testing: |
| 111 | + |
| 112 | +#### Scenario Tests |
| 113 | + |
| 114 | +- Baremetal basic operations testing |
| 115 | +- Instance lifecycle management |
| 116 | +- Network connectivity validation |
| 117 | +- Power management testing |
| 118 | + |
| 119 | +#### API Tests |
| 120 | + |
| 121 | +- Ironic API functionality validation |
| 122 | +- Node management operations |
| 123 | +- Port and allocation management |
| 124 | +- Hardware inspection workflows |
| 125 | + |
| 126 | +## Storage Configuration |
| 127 | + |
| 128 | +- **TopoLVM**: Local volume management for OpenStack services |
| 129 | +- **Cinder Volumes**: Additional block storage on `/dev/vdc`, `/dev/vdd`, `/dev/vde` |
| 130 | +- **Swift Storage**: Object storage for Glance images |
| 131 | +- **Database Storage**: Persistent storage for Galera clusters |
| 132 | + |
| 133 | +## Usage |
| 134 | + |
| 135 | +```bash |
| 136 | +# Deploy the scenario |
| 137 | +ansible-playbook -i inventory.yml bootstrap.yml \ |
| 138 | + -e @scenarios/sno-2-bm/bootstrap_vars.yml \ |
| 139 | + -e @~/cloud-secrets.yaml |
| 140 | + |
| 141 | +# Run comprehensive tests |
| 142 | +ansible-playbook -i inventory.yml 06-test-operator.yml \ |
| 143 | + -e @scenarios/sno-2-bm/bootstrap_vars.yml \ |
| 144 | + -e @~/cloud-secrets.yaml |
| 145 | +``` |
| 146 | + |
| 147 | +## Ironic Boot Interface |
| 148 | + |
| 149 | +Three boot interface modes are supported for the virtual Ironic nodes: |
| 150 | + |
| 151 | +- **`redfish-virtual-media`** (default): Virtual media boot via sushy-tools. Uses `heat_template.yaml`. |
| 152 | +- **`ipxe`**: Rescue-based iPXE network boot via sushy-tools Nova rescue mode. Uses `heat_template_ipxe.yaml`. |
| 153 | +- **`pxe`**: Traditional PXE boot with TFTP/shim (BIOS mode). Uses `heat_template_pxe.yaml`. |
| 154 | + |
| 155 | +To switch modes, set `stack_template_path` in `bootstrap_vars.yml` to point to the desired template. |
| 156 | + |
| 157 | +## Configuration Files |
| 158 | + |
| 159 | +- `bootstrap_vars.yml`: Infrastructure and OpenShift configuration. |
| 160 | +- `automation-vars.yml`: Hotloop deployment stages |
| 161 | +- `heat_template.yaml`: OpenStack infrastructure template (redfish-virtual-media) |
| 162 | +- `heat_template_ipxe.yaml`: OpenStack infrastructure template (iPXE boot) |
| 163 | +- `heat_template_pxe.yaml`: OpenStack infrastructure template (PXE boot, BIOS mode) |
| 164 | +- `manifests/control-plane/control-plane.yaml`: OpenStack service configuration |
| 165 | +- `test-operator/automation-vars.yml`: Comprehensive test automation |
| 166 | +- `test-operator/tempest-tests.yml`: Tempest test specifications |
| 167 | + |
| 168 | +This scenario provides a complete environment for validating OpenStack bare |
| 169 | +metal provisioning capabilities in a single-node OpenShift deployment with |
| 170 | +comprehensive testing automation. |
0 commit comments