staging bootstrap role: host archetype for box-hosted staging VMs
#22
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:bootstrap
scope:coolify
scope:db
scope:docs
scope:drill
scope:installer
scope:labels
scope:platform
scope:runner
scope:users
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/rig#22
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
The fleet's
staging-server(M900) — the machine that hosts staging VMs, each registered in the control plane (Coolify) as a server — is bootstrapped ad-hoc today. This issue adds a first-class host archetype for it.Design
Layering (companion box issue linked below):
stagingalongsidecontrol-plane/workload/runner: a machine whose job is to host staging boxes — Incus VMs minted bybox(heavy-duty/box) from its newstagingtemplate — each of which is later converged from inside withrig bootstrap workload.staging(convention: default = role name); default tagtag:local; hard-refusestag:server(precedent: therunnerrole refusestag:server) — hosts are never managed by the control plane, their guests are. The fleet has already been bitten once by a host wrongly carryingtag:server.setup-hostowns Incus config (single owner; avoids two tools converging the same daemon). The role asserts/dev/kvmpresence (warn, not fail — the box may be rehearsed in a container) and prints a next-step pointer to box's installer.rig bootstrap workloadis already the staging-box role (it is rehearsed inside Incus instances in the incubator migration runbook).devrole for dev-box hosts — same plumbing, honest name, matching the existing precedent of near-identical roles kept distinct for name honesty (control-planevsworkload).What changes
commands/bootstrap.sh: addstagingto the role case; tag defaulttag:local;tag:serverrefusal;/dev/kvmadvisory + box pointer in the closing log.test/cli.sh: arg/refusal assertions (usage paths;staging+--ts-tag tag:server→ exit 1 before any root check).docs/plans/2026-07-17-staging-role.md: design/implementation plan per repo convention.README.md: role table update.Non-goals
devrole yet.Acceptance
rig bootstrap staging --ts-tag tag:serverexits 1 with a refusal, before the root check (testable as non-root).rig bootstrap stagingon a pristine Debian box converges: hardened sshd drop-in, tailnet join astag:local, hostname set; second run is a no-op.bash test/cli.shgreen.Companion box issue: https://github.com/heavy-duty/box/issues/68