Project structure¶
A lab is a Git directory with a marker. The agent never sees the workstation filesystem path.
Marker .eve-iac.yml¶
version: 1
mode: create # create | import | load (default create)
topology: topology.yml
eve:
lab: /IaC/my-lab.unl
| Mode | Source | Managed lab | Mutation |
|---|---|---|---|
| create | none | eve.lab (clients write /IaC/<slug>.unl) |
full |
| import | source.lab immutable |
working copy, default /IaC/<basename>.unl |
managed only |
| load | existing lab | that lab | lifecycle + live link quality/suspend + console + inspect; no deploy/reconcile/destroy |
Never mutate source_lab. A client-supplied lab path does not establish ownership. Import records the managed path and does not create that lab; deploy does.
On the workstation, labs live under IaC/<name>/. IaC/ is a container, not a lab.
Payload sent to the agent¶
Packed fields typically include lab, yaml, files, manifest, state, source. dir and out are rejected. LOAD may send only manifest.
Python: pack_lab("./my-lab") builds that payload. The CLI uses the same helper.
Sidecars¶
| File | Commit? | Role |
|---|---|---|
.eve-iac-state.json |
no | IaC key → EVE numeric id |
.eve-iac-source.json |
no | IMPORT only |
.eve-iac/oob/ |
no | OOB SSH files for one agent session. OOB SSH |
.eve-iac/inventory/ |
no | Generated Ansible or Netmiko inventory. Inventory export |
Send them back on later mutating/console calls. They are not identity in YAML.
configs/¶
Startup-config library blobs. configsets.<set>.<node> maps a node to a file. nodes.<node>.configset is the independent boot selector (none = EVE config=0). Listing a path in the library does not select it for boot.
default is the built-in EVE store (config id 1). It is not a named library, even when the YAML also has Solved. Named sets start at id 2. Reconcile creates a named set YAML adds, including an empty one, and deletes a named set YAML removes. default and none are not deleted.