Skip to content
// terraform-for-labs

Deploy real lab infrastructure without writing Ansible or touching libvirt

rodeo-cli is a declarative CLI that turns a YAML file into a working lab on KVM: Harvester HCI clusters, Rancher Prime, or a full SUSE Edge stack. Point it at a Linux host, pick a profile, run one command.

6
Bundled profiles
318
Tests passing
1
Command to deploy
Apache-2.0
License

Why it exists

Standing up a Harvester cluster or a Rancher Prime instance for a demo, a workshop, or a test usually means writing Ansible, wiring libvirt networks by hand, and re-learning the same iPXE boot chain every time. rodeo-cli replaces all of that with one idea borrowed from Terraform: describe the lab you want, and let a plan/apply pipeline build it.

A profile is a config-dir with two YAML files. rodeo-plan.yaml sets resources and credentials. definition.yaml describes the topology: nodes, network, exposed services, boot order. The CLI reads those, runs rodeo plan to show you the diff against the host, and rodeo deploy to converge it — idempotently, so re-running after an edit only touches what changed.

Main features

Declarative

Plan, then apply

rodeo plan diffs your YAML against the live host before anything changes. No surprises, no guessing what a re-run will touch.

Batteries included

6 bundled profiles

Rancher Prime on K3s, single or multi-node Harvester HCI, Harvester + Rancher, and a full SUSE Edge stack — Elemental, EIB, edge nodes and all.

Yours to shape

Custom rodeos

rodeo new mylab --from harvester scaffolds an editable profile. Change the topology, re-run, and the lab converges to match — no forking the tool.

Built for real hosts

One-command on-ramp

rodeo up checks the host, picks a lab that fits the available RAM, generates secrets, self-escalates with sudo, and wraps itself in tmux so a dropped SSH session does not kill a live deploy.

No surprises

Secrets stay out of git

Credentials live in ~/.rodeo/secrets.yaml, chmod 600, referenced from plans with ??key placeholders. Nothing sensitive ever needs to touch a repo.

Day-2 ready

Manage, not just deploy

rodeo status, rodeo stop/start, rodeo set-password, rodeo install-extensions, rodeo clean — the lab is a thing you operate, not a one-shot script.

Workshops

Fleet fan-out

rodeo fleet runs the same lab across many remote KVM hosts over SSH — doctor, deploy, diagnose, retry, student URL sheets, and AWS provision (F4a MVP). Next: MCP (F3); GCP → Vultr Bare Metal → Hetzner (F4b–d). See Fleet and Fleet roadmap.

See it in one command

bash
$ curl -fsSL https://raw.githubusercontent.com/avaleror/rodeo-cli/main/install.sh | bash $ rodeo up → checking host resources... → picking a profile that fits (harvester-ha, ~52 GiB) → generating secrets... → deploying... Lab is up. URLs and credentials printed below.

Ready to try it? Head to Get started, or jump straight to a profile guide.

Apache-2.0 Python 3.10+ KVM / libvirt Ansible under the hood