Skip to content
// declarative lab deployment

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
424
Tests passing
1
Command to deploy
GPL-3.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: 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. Re-runs are safe: deploy reconciles VM memory/vCPU drift by default (--no-reconcile to opt out); use --force or --from when you need a broader re-apply.

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: 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.

GPL-3.0 Python 3.10+ KVM / libvirt Ansible under the hood