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 mutatesource_lab. - from_eve is
reconcileProjectwithdirection: "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