CLI: LOAD mode

LOAD projects contain only .eve-iac.yml. Use them when a pipeline or script must operate an existing EVE lab without owning topology in Git.

Create the project (local only)

eve-iac load writes the marker. It does not call eve-iac-agent and does not need EVE_IAC_URL.

eve-iac load /Customers/OSPF.unl
eve-iac load /Customers/OSPF.unl ./IaC/ospf-watch
eve-iac load /Customers/OSPF.unl --name ospf-watch
eve-iac load /Customers/OSPF.unl ./IaC/ospf --force

JSON output (--json):

{"project": "/path/to/IaC/OSPF", "source_lab": "/Customers/OSPF.unl", "mode": "load"}

Idempotent: running load again on the same directory with the same source.lab succeeds without changing the marker. Use --force to replace an existing marker.

Allowed agent operations

After EVE_IAC_URL, TLS pin, and token are set:

Command LOAD
status yes
inspect yes (--refresh optional)
exec start\|stop\|wipe yes (wipe needs --yes)
validate no (CLI rejects before agent)
import no
plan / reconcile no
deploy / destroy no

Example session:

export EVE_IAC_URL=https://eve.example:8787
export EVE_IAC_CA_FILE=./eve-iac-ca.pem
eve-iac --json login --username admin --password "$EVE_IAC_PASSWORD"
export EVE_IAC_TOKEN
eve-iac load /Customers/OSPF.unl ./IaC/ospf
eve-iac inspect ./IaC/ospf --json
eve-iac exec ./IaC/ospf start
eve-iac exec ./IaC/ospf wipe --yes

Rejected locally:

eve-iac plan ./IaC/ospf
# plan is not allowed in mode load (allowed: status, inspect, exec start|stop|wipe)

Exit code 2 (usage), code operation_not_allowed.

Payload shape

pack_lab on a LOAD directory sends only lab (from source.lab) and manifest to the agent — no yaml or files. Python:

from eveiac import init_load, pack_lab

root = init_load("/Customers/OSPF.unl", "./IaC/ospf")
packed = pack_lab(root)
# packed.payload == {"lab": "/Customers/OSPF.unl", "manifest": "..."}

vs import in CI

eve-iac import ./lab eve-iac load /path.unl
Prerequisite IMPORT marker + Git files from VSIX or hand-written EVE lab path only
Agent on init yes (import_project) no
Topology in Git yes no
Later edits plan/reconcile lifecycle only

For GitOps, use CREATE or IMPORT. For runbooks that start/stop/wipe existing labs, use LOAD.

See also: Recipes, project structure.