Templates are stopped VM instances that the runner clones from for each scenario run. Each template is a Debian 12 base image pre-provisioned with specific software. Cloning is fast (a few seconds); provisioning only happens once, when the template is first created.
Template instances are named template-{name} in incus/lima (e.g. template-debian-docker).
Available Templates
| Template | vCPUs | RAM | Description |
|---|
debian-base | 1 | 1 GB | Debian 12 with basic tools (curl, wget, python3, vim, git) |
debian-docker | 1 | 2 GB | Debian 12 with Docker CE pre-installed |
debian-podman | 1 | 2 GB | Debian 12 with Podman pre-installed (rootful, cgroupfs) |
debian-k3s | 2 | 2 GB | Debian 12 with k3s (lightweight Kubernetes) pre-installed |
debian-localstack | 1 | 2 GB | Debian 12 with AWS CLI v2 and moto server on port 4566 |
All templates use a 10 GB disk.
Auto-Initialization
Templates are created automatically the first time a scenario references them. When the runner starts and a referenced template doesn’t exist as a stopped instance, it:
- Boots a fresh VM from the Debian 12 cloud image
- Runs the provisioning playbooks (installs Docker, k3s, etc.)
- Stops and saves the VM as
template-{name}
This happens once per template per machine. Subsequent runs clone from the existing template and start in seconds.
Listing Templates
Check which templates have been initialized:
limactl list | grep template-
Deleting a Template
Delete a template to force re-initialization on the next run. Useful if a template becomes stale or you want to pick up a newer base image.
incus delete template-debian-docker
limactl delete template-debian-docker
Deleting a template does not affect existing VM clones. The next run that references the deleted template will re-provision it from scratch, which takes a few minutes.
Purging Stale Clones
If a run or sandbox prepare session is interrupted, clone VMs may be left behind. Use purge-vms to clean them up. Template instances are never touched.
2501-runner sandbox purge-vms [-m incus|lima]
If -m is omitted, both providers are tried.