The configuration model is the feature#
Every other selling point on this site follows from one design decision: the interface does not apply changes. It stages them, shows them to you as commands, and hands the whole set to the router as a single transaction when you say so.
One working set#
Editors call stage. The staging area lives in the agent, not in a browser tab, so it is
shared: a second tab sees it, a colleague signed in elsewhere sees it, and so does the
CLI (wheelhouse-agent apply --agent-url …) and the optional reconcile loop. Every call
that changes the queue returns the whole queue, because a client that only appended
locally could later un-stage by an index that meant a different operation on the agent.
The queue holds set and delete and nothing else. An operation the Commit Bar could
not spell honestly is refused when it is offered, with a reason, rather than at commit
time in the router's voice
(agent/staging.go, agent/main.go).
One Commit Bar#
The bar sits at the bottom of every page. Closed, it says how many operations are staged
and shows the most recent one. Open, it is the working diff: one line per operation, +
for a set and − for a delete, an × on each to remove just that one, and beneath them
the same lines again as a block you can copy into a configure session.
It is the only component in the product that commits
(ui/src/components/CommitBar.tsx).
Commit-confirm, from the operating system#
Two buttons: Commit, and Commit-confirm (2m). The second passes a confirm_time
to VyOS' /configure, which arms the platform's own mechanism. If nobody confirms, the
router reboots into the previous configuration — not a silent revert, a reboot. That
distinction matters, because it means the safety net does not depend on the agent still
running, the browser still being open, or the network still working.
While a window is open the Commit Bar becomes a countdown that outranks everything else on screen, and states the reasoning: if you can still read this page, the change worked.
The bar decides which button to emphasise by inspecting the paths in the working set.
firewall, nat, system login, pki, high-availability, policy route,
load-balancing, protocols failover, anything touching an address or the default route
— when one of those is present, the bar says so and the plain Commit is styled as
destructive (ui/src/lib/format.ts isDangerousPath).
A revision for every commit#
VyOS archives each commit. Revision 0 is the running configuration; revision 1 is the
commit before it. The System page lists them with who made each and how, shows the diff
for any one, and rolls back by loading that archived configuration — the same effect as
the CLI's rollback, reached the same way, because the HTTP API has no rollback
operation of its own and pretending otherwise would have been a lie that worked until it
did not.
A configuration download and a save-to-boot are there as well.
Why this cannot be retrofitted#
An appliance whose configuration is a document translated into daemon configuration at save time has nowhere for a transaction to live and nothing coherent to roll back to. The staged diff, the single transaction, the confirm window and the revision list are all one property of the platform, seen from four angles. Wheelhouse's contribution is refusing to cover it up.
Read on#
- How it works — the same thing as four steps, with the API calls.
- Every click shows its commands.
- The wiki, in detail: staging, the Commit Bar, commit-confirm, revisions and rollback, and the Commit Bar reference.