Commands · reference

vmlab pull

3 min read · 2026-09-02 · vmlab 0.9

vmlab pull downloads every registry template and container image the lab still needs, without starting any machine. It is the part of vmlab up that can take a long time, split out so you can run it ahead of time or on a metered link.

sh
vmlab pull [VMS]...
OptionMeaning
[VMS]...Machines to pull for. With none given, every machine in the lab.
-h, --helpPrint help.

What it does

Like up, the verb validates the lab file first and starts the lab daemon if none is running. The daemon then runs the same deferred-download step up runs, streaming a progress line per download to the terminal and the same progress events to the event feed. A template lands in the store under its resolved name and version; a container image lands in the digest-addressed image cache. When nothing is pending the verb returns at once. On success it prints lab "<name>": templates ready.

pull downloads what the lab file declares now. When vmlab.wcl has changed since the lab daemon loaded it, the verb replaces the daemon first, exactly as vmlab up does, so an edited template or image line is what gets fetched.

Pressing Ctrl-C cancels the downloads rather than abandoning them. The daemon outlives this process, so an interrupt that simply walked away would leave transfers running with nobody watching. The cancel only covers the machines this invocation asked for, so interrupting vmlab pull web does not take down a download another terminal started. The verb then exits with interrupted — cancelled the download for .... A cancelled download stays pending in the daemon's ledger; the next up or pull retries it from scratch.

Templates from the local store need no pull

Only template = "registry/..." references and container images are downloaded. A template you built with vmlab template build is already in the store, and pull has nothing to do for it.

Examples

Fetch everything the lab needs before a demo:

sh
vmlab pull

Fetch only the image one container uses:

sh
vmlab pull web

Exit status

Exit status is 0 when every download completed or nothing was pending. A validation failure, an unreachable registry, a failed download and an interrupt all exit 1 (failed). Exit 5 (conflict) means the supervisor tracks a lab with this name from another directory. A usage error exits 2.