Console SDK¶
All examples use the generated client methods from the OpenAPI contract. Method names differ by language — see SDK operation index.
Shared session and exec model: Console sessions, Exec, wait, run.
Replace packed with your lab payload (pack_lab("./my-lab") in Python, or equivalent project fields in other languages). Authentication and TLS pinning are omitted for brevity.
Python¶
from eveiac import (
ConsoleRunStep,
CloseConsoleSessionRequest,
CreateConsoleSessionRequest,
ExecConsoleRequest,
GetConsoleHistoryRequest,
RunConsoleRequest,
WaitConsoleRequest,
pack_lab,
)
packed = pack_lab("./IaC/my-lab")
base = packed.payload
# 1. Create session (default mode interact)
sess = client.create_console_session(CreateConsoleSessionRequest(**{**base, "node": "n_1"}))
sid = sess.session_id
# 2. Exec with explicit session
client.exec_console(ExecConsoleRequest(**{**base, "node": "n_1", "session_id": sid, "command": "show version"}))
# 3. Wait for prompt
client.wait_console(WaitConsoleRequest(**{**base, "node": "n_1", "session_id": sid, "pattern": r"Router[#>]", "timeout_ms": 120_000}))
# 4. Run expect/send
client.run_console(RunConsoleRequest(**{
**base,
"node": "n_1",
"session_id": sid,
"steps": [
ConsoleRunStep(expect="Router>", send="enable"),
ConsoleRunStep(expect="Password:", send_secret="example-placeholder"),
ConsoleRunStep(expect="Router#", send="terminal length 0"),
],
}))
# 5. History tail
client.get_console_history(GetConsoleHistoryRequest(**{**base, "node": "n_1", "session_id": sid, "max_bytes": 8192}))
# 6. Close session
client.close_console_session(CloseConsoleSessionRequest(**{**base, "session_id": sid}))
Full generated reference: Python API.
TypeScript¶
import { createEveIacClient } from "@eve-iac/sdk";
const client = createEveIacClient({ url, token, caPem });
const packed = { lab, manifest, yaml, files };
const sess = await client.createConsoleSession({ ...packed, node: "n_1", mode: "interact" });
const sid = sess.session_id!;
await client.execConsole({ ...packed, node: "n_1", session_id: sid, command: "show version" });
await client.waitConsole({ ...packed, node: "n_1", session_id: sid, pattern: "Router[#>]", timeout_ms: 120_000 });
await client.runConsole({
...packed,
node: "n_1",
session_id: sid,
steps: [
{ expect: "Router>", send: "enable" },
{ expect: "Password:", send_secret: "example-placeholder" },
{ expect: "Router#", send: "terminal length 0" },
],
});
await client.getConsoleHistory({ ...packed, node: "n_1", session_id: sid, max_bytes: 8192 });
await client.closeConsoleSession({ ...packed, session_id: sid });
Full generated reference: TypeScript API.
Go¶
sess, err := client.CreateConsoleSession(ctx, eveiac.CreateConsoleSessionRequest{
Lab: packed.Lab, Node: eveiac.Ptr("n_1"), Mode: eveiac.Ptr(eveiac.ConsoleWriteModeInteract),
})
sid := *sess.SessionID
_, err = client.ExecConsole(ctx, eveiac.ExecConsoleRequest{
Lab: packed.Lab, Node: eveiac.Ptr("n_1"), SessionID: &sid, Command: eveiac.Ptr("show version"),
})
_, err = client.WaitConsole(ctx, eveiac.WaitConsoleRequest{
Lab: packed.Lab, Node: eveiac.Ptr("n_1"), SessionID: &sid,
Pattern: eveiac.Ptr(`Router[#>]`), TimeoutMs: eveiac.Ptr(120_000),
})
_, err = client.RunConsole(ctx, eveiac.RunConsoleRequest{
Lab: packed.Lab, Node: eveiac.Ptr("n_1"), SessionID: &sid,
Steps: []eveiac.ConsoleRunStep{
{Expect: eveiac.Ptr("Router>"), Send: eveiac.Ptr("enable")},
{Expect: eveiac.Ptr("Password:"), SendSecret: eveiac.Ptr("example-placeholder")},
{Expect: eveiac.Ptr("Router#"), Send: eveiac.Ptr("terminal length 0")},
},
})
_, err = client.GetConsoleHistory(ctx, eveiac.GetConsoleHistoryRequest{
Lab: packed.Lab, Node: eveiac.Ptr("n_1"), SessionID: &sid, MaxBytes: eveiac.Ptr(8192),
})
_, err = client.CloseConsoleSession(ctx, eveiac.CloseConsoleSessionRequest{
Lab: packed.Lab, SessionID: &sid,
})
Full generated reference: Go API.
One-shot exec (no session)¶
Omitted session_id on execConsole / exec_console / ExecConsole uses a separate one-shot Telnet connection — useful for quick checks without holding a Hub open.
Interactive streaming (attach + streamConsole, 101 eve-telnet) is documented in the generated attach/stream sections; VSIX and CLI wrap that path.