LAVA Test Rig
2026 · Ansible · Docker Compose · LAVA · Mender OTA · Grafana · Loki · Hardware-in-the-loop CI
Provisioning and runtime for the illumibot LAVA test rig: one repository owns the Ansible roles, inventory, and secrets that build it, the docker-compose LAVA stack that runs it, and the Mender OTA pipeline that upgrades 20 physical boards on every release.
- 20
- Devices Under Test
- 5
- Dispatcher Workers
- 4
- DUT Racks
- 12
- Ansible Playbooks
- 8
- Recovery Phases
First look

What I built
Provisioning & Recovery
The LAVA test rig is provisioned and maintained through a combination of Ansible and Docker Compose. Twelve Ansible playbooks provision five dispatcher workers and four colour-coded DUT racks from bare metal, so the bench rebuilds from the repository rather than from memory. Live logs and DUT metrics stream into Grafana and Loki beside an always-on camera preview.
- Built DUT-originated projector control over both IR and PJLink, reusing the production control libraries rather than reimplementing them.
- Provisioned the rig through Ansible.
- Shipped an always-on camera preview so the rig’s physical state is visible from the dashboard.
- Streamed live logs and DUT metrics into Grafana and Loki.
What came of it
- Hardware-only failures now reproduce in CI instead of in the field.
- Traced a phantom ‘IR dongle not present’ from inside the device, a corrupted systemd journal, and a projector locked behind a password that survived repeated factory resets.
- A failing run can be read without walking over to the bench.
The other plates


Ansible · Docker Compose · LAVA · Mender OTA · Grafana · Loki · Hardware-in-the-loop CI