Python examples

Generated from eve-iac OpenAPI/semantics. Do not edit manually.

Task-oriented examples using the current public SDK. These snippets are generated with the API reference.

Import versus from_eve

  • Import (importProject / import_project / ImportProject) clones an existing EVE source lab into a new IaC project and a managed working copy. It must not mutate source_lab.
  • from_eve is reconcileProject with direction: "from_eve". It updates files in an existing project from that project's managed lab. It is not Import.

Create a client

from eveiac import EveIacClient

client = EveIacClient(
    url="https://eve.example:8787",
    token="",
    ca_pem=open("ca.pem", encoding="utf-8").read(),
    timeout_ms=15000,
)

Authenticate / login

from eveiac import EveIacClient, LoginRequest

client = EveIacClient(url=url, ca_pem=ca_pem)
session = client.login(LoginRequest(username="admin", password="secret"))
client = EveIacClient(url=url, token=session.token, ca_pem=ca_pem)

Get session

session = client.get_session()

List templates

from eveiac import ListTemplatesQuery

templates = client.list_templates()
provisioned = client.list_templates(ListTemplatesQuery(provisioned="true"))

Import an existing EVE-NG lab

from eveiac import ImportProjectRequest, pack_lab

packed = pack_lab("./imported-lab")
imported = client.import_project(ImportProjectRequest(**packed.payload))
# imported.managed_lab is the working copy. Never mutate source_lab.

Validate

from eveiac import ValidateProjectRequest, pack_lab

packed = pack_lab("./my-lab")
result = client.validate_project(ValidateProjectRequest(**packed.payload))

Plan

from eveiac import PlanProjectRequest, pack_lab

packed = pack_lab("./my-lab")
plan = client.plan_project(PlanProjectRequest(**packed.payload))
# Omitted direction is to_eve. Plan never writes Local files or EVE.

Deploy

from eveiac import DeployProjectRequest, pack_lab

packed = pack_lab("./my-lab")
deployed = client.deploy_project(DeployProjectRequest(**packed.payload))

Reconcile to_eve

from eveiac import ReconcileProjectRequest, pack_lab

packed = pack_lab("./my-lab")
body = dict(packed.payload)
body["direction"] = "to_eve"
applied = client.reconcile_project(ReconcileProjectRequest(**body))

Reconcile from_eve

from eveiac import ReconcileProjectRequest, pack_lab, commit_pulled, should_persist_from_eve

packed = pack_lab("./my-lab")
body = dict(packed.payload)
body["direction"] = "from_eve"
pulled = client.reconcile_project(ReconcileProjectRequest(**body))
if should_persist_from_eve(pulled):
    commit_pulled(packed.root, pulled)

Status

from eveiac import GetProjectStatusRequest, pack_lab

packed = pack_lab("./my-lab")
status = client.get_project_status(GetProjectStatusRequest(**packed.payload))

Inspect

from eveiac import InspectProjectRequest, pack_lab

packed = pack_lab("./my-lab")
observed = client.inspect_project(InspectProjectRequest(**packed.payload))

Start nodes

from eveiac import ExecProjectRequest, pack_lab

packed = pack_lab("./my-lab")
result = client.exec_project(ExecProjectRequest(**{**packed.payload, "action": "start"}))

Stop nodes

from eveiac import ExecProjectRequest, pack_lab

packed = pack_lab("./my-lab")
result = client.exec_project(ExecProjectRequest(**{**packed.payload, "action": "stop"}))

Wipe nodes

from eveiac import ExecProjectRequest, pack_lab

packed = pack_lab("./my-lab")
result = client.exec_project(ExecProjectRequest(**{**packed.payload, "action": "wipe"}))

List consoles

from eveiac import ListProjectConsolesRequest, pack_lab

packed = pack_lab("./my-lab")
consoles = client.list_project_consoles(ListProjectConsolesRequest(**packed.payload))

Execute a console command

from eveiac import ExecConsoleRequest, pack_lab

packed = pack_lab("./my-lab")
data = client.exec_console(ExecConsoleRequest(**{**packed.payload, "node": "n_1", "command": "show version"}))

Stream console

from eveiac import AttachConsoleRequest, pack_lab

packed = pack_lab("./my-lab")
attached = client.attach_console(AttachConsoleRequest(**{**packed.payload, "node": "n_1"}))
sock = client.stream_console(attached.stream.split("/")[-1])

Error handling

from eveiac import AgentError, is_auth_error

try:
    client.get_session()
except AgentError as exc:
    if is_auth_error(exc):
        raise SystemExit(f"auth failed: {exc.code}") from exc
    raise