Warning

This documentation is actively being updated as the project evolves and may not be complete in all areas.

Network adapters

Network adapters are for transforming network connections exposed by drivers

jumpstarter_driver_network.adapters.TcpPortforwardAdapter(*, client: DriverClient, method: str = 'connect', local_host: str = '127.0.0.1', local_port: int = 0)
jumpstarter_driver_network.adapters.UnixPortforwardAdapter(*, client: DriverClient, method: str = 'connect', path: PathLike | None = None)
jumpstarter_driver_network.adapters.NovncAdapter(*, client: DriverClient, method: str = 'connect')
jumpstarter_driver_network.adapters.PexpectAdapter(*, client: DriverClient, method: str = 'connect')
jumpstarter_driver_network.adapters.FabricAdapter(*, client: DriverClient, method: str = 'connect', user: str | None = None, config: Config | None = None, forward_agent: bool | None = None, connect_timeout: int | None = None, connect_kwargs: dict[str, Any] | None = None, inline_ssh_env: bool | None = None)

Examples

export:
  tcp_port:
    type: "jumpstarter_driver_network.driver.TcpNetwork"
    config:
      host: localhost
      port: 80
  unix_socket:
    type: "jumpstarter_driver_network.driver.UnixNetwork"
    config:
      path: /tmp/test.sock

Forward a remote TCP port to a local TCP port

>>> # random port on localhost
>>> with TcpPortforwardAdapter(client=client.tcp_port) as addr:
...     print(addr[0], addr[1])
127.0.0.1 ...
>>>
>>> # specific address and port
>>> with TcpPortforwardAdapter(client=client.tcp_port, local_host="127.0.0.2", local_port=8080) as addr:
...     print(addr[0], addr[1])
127.0.0.2 8080

Forward a remote Unix domain socket to a local socket

>>> with UnixPortforwardAdapter(client=client.unix_socket) as addr:
...     print(addr)
/.../socket
>>> # the type of the remote socket and the local one doesn't have to match
>>> # e.g. forward a remote Unix domain socket to a local TCP port
>>> with TcpPortforwardAdapter(client=client.unix_socket) as addr:
...     print(addr[0], addr[1])
127.0.0.1 ...

Connect to a remote TCP port with a web-based VNC client

>>> with NovncAdapter(client=client.tcp_port) as url:
...     print(url) # open the url in browser to access the VNC client
https://novnc.com/noVNC/vnc.html?autoconnect=1&reconnect=1&host=127.0.0.1&port=...

Interact with a remote TCP port as if it’s a serial console

See pexpect for API documentation

>>> # the server echos all inputs
>>> with PexpectAdapter(client=client.tcp_port) as expect:
...     assert expect.send("hello") == 5 # written 5 bytes
...     assert expect.expect(["hi", "hello"]) == 1 # found string at index 1

Connect to a remote TCP port with the fabric SSH client

See fabric for API documentation

with FabricAdapter(client=client.tcp_port, connect_kwargs={"password": "secret"}) as conn:
    conn.run("uname")