Wheelhouse

The configuration model is the foundation#

Every other selling point on this site follows from one design decision: the interface does not apply changes. It adds them to one list, says each one in a sentence, and hands the whole list to the router as a single transaction when you say so. You never have to read the configuration model to use it; it is what makes the rest of this page possible.

How to get the image How it works

One list of pending changes#

An editor's Save, Add or Delete adds operations to the pending changes. The list lives in the agent rather than in a browser tab, so it is shared: a second tab sees it, a colleague signed in elsewhere sees it, and so do the CLI (wheelhouse-agent apply --agent-url …) and the optional reconcile loop. Every call that changes the list returns the whole list.

The list holds set and delete and nothing else. Anything else is refused when it is offered, with a reason, rather than at commit time in the router's voice.

One Commit Bar#

The bar floats at the foot of the page while anything is pending, and is not drawn when nothing is. Closed, it says how many changes are pending and names the most recent one. Review changes opens the list, grouped by area: one sentence per change, + for an addition, ~ for a change and − for a removal, with a Remove on each that takes that object's operations back out.

In Advanced mode the same list is the operations themselves: one set or delete per line with an × on each, and beneath them the whole set again as a block you can copy into a configure session.

It is the only component in the product that applies anything.

Nine operations, none of them on the router

The picture is from 0.6.2, before 0.9.1, and shows the bar open with the nine operations listed as commands and repeated as a block to copy: what Advanced mode shows today. Without Advanced mode the same nine read as two sentences, one for the port forward and one for the rule that lets it through.

Auto-revert, from the operating system#

Two buttons: Apply changes, and Apply with auto-revert (2 min). The second passes a confirm_time to VyOS' /configure, which arms the platform's own commit-confirm. Unless Keep changes is pressed in time, the router restarts with its saved configuration — not a silent revert, a restart. 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 the countdown, and states the test: if this page still responds, the changes work.

The bar decides which button to emphasise by looking at what the pending changes touch: firewall rules, NAT, the SSH, HTTPS and API services, an interface's addresses, anything on an uplink, the router's own DNS servers, default routes, failover, load balancing and policy routing, high availability, certificates and router accounts. When one of those is present, the list says the changes could cut off your connection, and Apply changes is styled as destructive.

A revision for every change applied#

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, says in sentences what each one changed — the router's own diff, in Advanced mode — and rolls back by loading that archived configuration. That is the same effect as the CLI's rollback; the HTTP API has no rollback operation of its own.

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 pending changes, the single transaction, the confirm window and the revision list are one property of the platform seen from four angles. Wheelhouse puts forms on top of it and takes none of it away.

See it on a box of your own

Nothing above is a preview build. Install the image, make a change, and read it in the Commit Bar before you apply it.

How to get the image How it works