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.