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: SUSE Virtualization (Harvester HCI) clusters, Rancher Prime with K3s and RKE2 clusters, or a full SUSE Edge stack. Run it on a SLES 16 host, or from your laptop on AWS. Pick a profile, run one command.

10
Bundled profiles
1,000+
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

10 bundled profiles

Two to three-node Harvester HCI with or without Rancher, the SUSE Virtualization workshop lab, Rancher Prime with K3s and RKE2 clusters, and a full SUSE Edge stack with Elemental, EIB and edge nodes.

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.

Cloud

AWS from your laptop

rodeo up --profile harvester --target aws creates the EC2 host, picks the region, subnet and size, and builds the lab. Every cloud host terminates itself after 6 hours unless you say otherwise. Works from macOS or any Linux. See Install.

Workshops

A lab per attendee

rodeo fleet builds the same lab on many hosts in parallel, with status, retry and diagnose per lab. A claim portal lets each attendee grab their own lab with a workshop code. See Fleet.

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