Why EVE IaC?

EVE IaC is a desired-state and interaction automation layer for EVE-NG. It is not “EVE-NG IaC support” and it is not “Terraform for EVE-NG”.

Define the infrastructure. Define how to interact with it. Automate both.

YAML, Git, an API, AI chat, and link impairment exist elsewhere. The combination below is what this project actually implements.

What is different

EVE IaC
Safe reconciliation Plan is a dry-run. Remaining requires_stop work needs confirmation and a matching plan_identity. If live state changed, the plan is stale. Partial convergence is normal: live-safe work can apply while stop work waits.
Brownfield import Import adopts an existing EVE lab once (Git project + managed copy). Later reverse sync is explicit from_eve. There is no magical bidirectional merge.
Day-0 console The agent owns the EVE serial/console path. Attach, observe, wait, expect, send, and run work before management IP, SSH, NETCONF, or gNMI exist.
Interaction as Code Consoles and live link quality/suspend are operational, not fake desired-state YAML. A 30-second link cut is something that happens to the lab, not a permanent property of it.
One contract VSIX, CLI, Python, TypeScript, Go, and HTTP share eve-iac/v1. MCP exposes bounded tools on that contract. There is no raw PTY for the model.

AI is a consumer of those primitives — CLI, SDK, and CI work without it.

Positioning that does not fit

Phrase Why it is wrong
EVE-NG IaC support Sounds like a VS Code helper around the native GUI. The agent is a control plane with plan identity, drift, and import.
Terraform for EVE-NG Explains validate → plan → apply, and hides Day-0 console and Interaction as Code.
GitOps platform Git is desired state. There is no pull-based continuous reconciler. See Git-driven workflow.

What this is not (yet, or by design)

Documented non-goals reduce architectural misunderstandings.

  • The Cockpit is not a source of truth.
  • Native EVE numeric ids are not IaC identity.
  • Import is not from_eve.
  • Plan does not write Git or EVE.
  • from_eve does not mutate runtime.
  • Interaction as Code is not necessarily desired state.
  • MCP does not expose an unbounded terminal.
  • --insecure is not persistent and is not for CI.
  • eve-iac/v1 is not a published freeze.
  • There is no Terraform-style module registry, Policy as Code engine, or shared remote state backend in this tree.
  • V1 has no durable console transcript / audit log.

Reusable lab components and a first-class test/assert language for Interaction as Code are not documented products today.

Next: Architecture, Interaction as Code, Plan / reconcile.