workspacesdk
packageThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
Documentation¶
Index¶
- Constants
- Variables
- func ExistsViaCoderConnect(ctx context.Context, hostname string) (bool, error)
- func WithTestOnlyCoderContextResolver(ctx context.Context, r Resolver) context.Context
- type AgentConn
- func (c *AgentConn) AwaitReachable(ctx context.Context) bool
- func (c *AgentConn) Close() error
- func (c *AgentConn) DebugLogs(ctx context.Context) ([]byte, error)
- func (c *AgentConn) DebugMagicsock(ctx context.Context) ([]byte, error)
- func (c *AgentConn) DebugManifest(ctx context.Context) ([]byte, error)
- func (c *AgentConn) DialContext(ctx context.Context, network string, addr string) (net.Conn, error)
- func (c *AgentConn) GetPeerDiagnostics() tailnet.PeerDiagnostics
- func (c *AgentConn) ListContainers(ctx context.Context) (codersdk.WorkspaceAgentListContainersResponse, error)
- func (c *AgentConn) ListeningPorts(ctx context.Context) (codersdk.WorkspaceAgentListeningPortsResponse, error)
- func (c *AgentConn) Netcheck(ctx context.Context) (healthsdk.AgentNetcheckReport, error)
- func (c *AgentConn) Ping(ctx context.Context) (time.Duration, bool, *ipnstate.PingResult, error)
- func (c *AgentConn) PrometheusMetrics(ctx context.Context) ([]byte, error)
- func (c *AgentConn) ReconnectingPTY(ctx context.Context, id uuid.UUID, height, width uint16, command string, ...) (net.Conn, error)
- func (c *AgentConn) RecreateDevcontainer(ctx context.Context, containerIDOrName string) (codersdk.Response, error)
- func (c *AgentConn) SSH(ctx context.Context) (*gonet.TCPConn, error)
- func (c *AgentConn) SSHClient(ctx context.Context) (*ssh.Client, error)
- func (c *AgentConn) SSHClientOnPort(ctx context.Context, port uint16) (*ssh.Client, error)
- func (c *AgentConn) SSHOnPort(ctx context.Context, port uint16) (*gonet.TCPConn, error)
- func (c *AgentConn) Speedtest(ctx context.Context, direction speedtest.Direction, duration time.Duration) ([]speedtest.Result, error)
- type AgentConnOptions
- type AgentConnectionInfo
- type AgentReconnectingPTYInit
- type AgentReconnectingPTYInitOption
- type Client
- func (c *Client) AgentConnectionInfo(ctx context.Context, agentID uuid.UUID) (AgentConnectionInfo, error)
- func (c *Client) AgentConnectionInfoGeneric(ctx context.Context) (AgentConnectionInfo, error)
- func (c *Client) AgentReconnectingPTY(ctx context.Context, opts WorkspaceAgentReconnectingPTYOpts) (net.Conn, error)
- func (c *Client) DialAgent(dialCtx context.Context, agentID uuid.UUID, options *DialAgentOptions) (agentConn *AgentConn, err error)
- func (c *Client) IsCoderConnectRunning(ctx context.Context, o CoderConnectQueryOptions) (bool, error)
- type CoderConnectQueryOptions
- type DialAgentOptions
- type ReconnectingPTYRequest
- type Resolver
- type WebsocketDialer
- type WebsocketDialerOption
- type WorkspaceAgentReconnectingPTYOpts
Constants¶
const (AgentSSHPort =tailnet.WorkspaceAgentSSHPortAgentStandardSSHPort =tailnet.WorkspaceAgentStandardSSHPortAgentReconnectingPTYPort =tailnet.WorkspaceAgentReconnectingPTYPortAgentSpeedtestPort =tailnet.WorkspaceAgentSpeedtestPort// AgentHTTPAPIServerPort serves a HTTP server with endpoints for e.g.// gathering agent statistics.AgentHTTPAPIServerPort = 4// AgentMinimumListeningPort is the minimum port that the listening-ports// endpoint will return to the client, and the minimum port that is accepted// by the proxy applications endpoint. Coder consumes ports 1-4 at the// moment, and we reserve some extra ports for future use. Port 9 and up are// available for the user.//// This is not enforced in the CLI intentionally as we don't really care// *that* much. The user could bypass this in the CLI by using SSH instead// anyways.AgentMinimumListeningPort = 9)
const (AgentAPIMismatchMessage = "Unknown or unsupported API version"CoordinateAPIInvalidResumeToken = "Invalid resume token")
Variables¶
var AgentIgnoredListeningPorts = map[uint16]struct{}{0: {},1: {},2: {},3: {},4: {},5: {},6: {},7: {},8: {},20: {},21: {},22: {},23: {},25: {},53: {},110: {},143: {},179: {},389: {},636: {},465: {},587: {},989: {},990: {},993: {},995: {},3306: {},3389: {},5432: {},27017: {},27018: {},27019: {},28017: {},}
AgentIgnoredListeningPorts contains a list of ports to ignore when looking forrunning applications inside a workspace. We want to ignore non-HTTP servers,so we pre-populate this list with common ports that are not HTTP servers.
This is implemented as a map for fast lookup.
var ErrSkipClose =xerrors.New("skip tailnet close")
Functions¶
funcExistsViaCoderConnect¶added inv2.22.0
ExistsViaCoderConnect checks if the given hostname exists via Coder Connect. This doesn't guarantee theworkspace is actually reachable, if, for example, its agent is unhealthy, but rather that Coder Connect knows aboutthe workspace and advertises the hostname via DNS.
Types¶
typeAgentConn¶
AgentConn represents a connection to a workspace agent.@typescript-ignore AgentConn
funcNewAgentConn¶
func NewAgentConn(conn *tailnet.Conn, optsAgentConnOptions) *AgentConn
NewAgentConn creates a new WorkspaceAgentConn. `conn` may be uniqueto the WorkspaceAgentConn, or it may be shared in the case of coderd. If theconn is shared and closing it is undesirable, you may return ErrNoClose fromopts.CloseFunc. This will ensure the underlying conn is not closed.
func (*AgentConn)AwaitReachable¶
AwaitReachable waits for the agent to be reachable.
func (*AgentConn)DebugMagicsock¶
DebugMagicsock makes a request to the workspace agent's magicsock debug endpoint.
func (*AgentConn)DebugManifest¶
DebugManifest returns the agent's in-memory manifest. Unfortunately this mustbe returns as a []byte to avoid an import cycle.
func (*AgentConn)DialContext¶
DialContext dials the address provided in the workspace agent.The network must be "tcp" or "udp".
func (*AgentConn)GetPeerDiagnostics¶
func (c *AgentConn) GetPeerDiagnostics()tailnet.PeerDiagnostics
func (*AgentConn)ListContainers¶added inv2.20.0
func (c *AgentConn) ListContainers(ctxcontext.Context) (codersdk.WorkspaceAgentListContainersResponse,error)
ListContainers returns a response from the agent's containers endpoint
func (*AgentConn)ListeningPorts¶
func (c *AgentConn) ListeningPorts(ctxcontext.Context) (codersdk.WorkspaceAgentListeningPortsResponse,error)
ListeningPorts lists the ports that are currently in use by the workspace.
func (*AgentConn)Netcheck¶added inv2.15.0
Netcheck returns a network check report from the workspace agent.
func (*AgentConn)Ping¶
Ping pings the agent and returns the round-trip time.The bool returns true if the ping was made P2P.
func (*AgentConn)PrometheusMetrics¶
PrometheusMetrics returns a response from the agent's prometheus metrics endpoint
func (*AgentConn)ReconnectingPTY¶
func (c *AgentConn) ReconnectingPTY(ctxcontext.Context, iduuid.UUID, height, widthuint16, commandstring, initOpts ...AgentReconnectingPTYInitOption) (net.Conn,error)
ReconnectingPTY spawns a new reconnecting terminal session.`ReconnectingPTYRequest` should be JSON marshaled and written to the returned net.Conn.Raw terminal output will be read from the returned net.Conn.
func (*AgentConn)RecreateDevcontainer¶added inv2.23.0
func (c *AgentConn) RecreateDevcontainer(ctxcontext.Context, containerIDOrNamestring) (codersdk.Response,error)
RecreateDevcontainer recreates a devcontainer with the given container.This is a blocking call and will wait for the container to be recreated.
func (*AgentConn)SSH¶
SSH pipes the SSH protocol over the returned net.Conn.This connects to the built-in SSH server in the workspace agent.
func (*AgentConn)SSHClientOnPort¶added inv2.20.0
SSHClientOnPort calls SSH to create a client on a specific port
typeAgentConnOptions¶
@typescript-ignore AgentConnOptions
typeAgentConnectionInfo¶
type AgentConnectionInfo struct {DERPMap *tailcfg.DERPMap `json:"derp_map"`DERPForceWebSocketsbool `json:"derp_force_websockets"`DisableDirectConnectionsbool `json:"disable_direct_connections"`HostnameSuffixstring `json:"hostname_suffix,omitempty"`}
AgentConnectionInfo returns required information for establishinga connection with a workspace.@typescript-ignore AgentConnectionInfo
typeAgentReconnectingPTYInit¶
type AgentReconnectingPTYInit struct {IDuuid.UUIDHeightuint16Widthuint16Commandstring// Container, if set, will attempt to exec into a running container visible to the agent.// This should be a unique container ID (implementation-dependent).Containerstring// ContainerUser, if set, will set the target user when execing into a container.// This can be a username or UID, depending on the underlying implementation.// This is ignored if Container is not set.ContainerUserstringBackendTypestring}
AgentReconnectingPTYInit initializes a new reconnecting PTY session.@typescript-ignore AgentReconnectingPTYInit
typeAgentReconnectingPTYInitOption¶added inv2.21.0
type AgentReconnectingPTYInitOption func(*AgentReconnectingPTYInit)
AgentReconnectingPTYInitOption is a functional option for AgentReconnectingPTYInit.
funcAgentReconnectingPTYInitWithContainer¶added inv2.21.0
func AgentReconnectingPTYInitWithContainer(container, containerUserstring)AgentReconnectingPTYInitOption
AgentReconnectingPTYInitWithContainer sets the container and container user for the reconnecting PTY session.
typeClient¶
type Client struct {// contains filtered or unexported fields}
func (*Client)AgentConnectionInfo¶
func (*Client)AgentConnectionInfoGeneric¶
func (c *Client) AgentConnectionInfoGeneric(ctxcontext.Context) (AgentConnectionInfo,error)
func (*Client)AgentReconnectingPTY¶
func (c *Client) AgentReconnectingPTY(ctxcontext.Context, optsWorkspaceAgentReconnectingPTYOpts) (net.Conn,error)
AgentReconnectingPTY spawns a PTY that reconnects using the token provided.It communicates using `agent.ReconnectingPTYRequest` marshaled as JSON.Responses are PTY output that can be rendered.
func (*Client)IsCoderConnectRunning¶added inv2.22.0
IsCoderConnectRunning checks if Coder Connect (OS level tunnel to workspaces) is running on the system. If youalready know the hostname suffix your deployment uses, you can pass it in the CoderConnectQueryOptions to avoid anAPI call to AgentConnectionInfoGeneric.
typeCoderConnectQueryOptions¶added inv2.22.0
type CoderConnectQueryOptions struct {HostnameSuffixstring}
typeDialAgentOptions¶
type DialAgentOptions struct {Loggerslog.Logger// BlockEndpoints forced a direct connection through DERP. The Client may// have DisableDirect set which will override this value.BlockEndpointsbool// CaptureHook is a callback that captures Disco packets and packets sent// into the tailnet tunnel.CaptureHookcapture.Callback// Whether the client will send network telemetry events.// Enable instead of Disable so it's initialized to false (in tests).EnableTelemetrybool}
@typescript-ignore DialAgentOptions
typeReconnectingPTYRequest¶
type ReconnectingPTYRequest struct {Datastring `json:"data,omitempty"`Heightuint16 `json:"height,omitempty"`Widthuint16 `json:"width,omitempty"`}
ReconnectingPTYRequest is sent from the client to the serverto pipe data to a PTY.@typescript-ignore ReconnectingPTYRequest
typeWebsocketDialer¶added inv2.18.0
type WebsocketDialer struct {// contains filtered or unexported fields}
funcNewWebsocketDialer¶added inv2.18.0
func NewWebsocketDialer(loggerslog.Logger, u *url.URL, websocketOptions *websocket.DialOptions,dialerOptions ...WebsocketDialerOption,) *WebsocketDialer
func (*WebsocketDialer)Connected¶added inv2.18.0
func (w *WebsocketDialer) Connected() <-chanerror
func (*WebsocketDialer)Dial¶added inv2.18.0
func (w *WebsocketDialer) Dial(ctxcontext.Context, rtailnet.ResumeTokenController,) (tailnet.ControlProtocolClients,error,)
typeWebsocketDialerOption¶added inv2.18.0
type WebsocketDialerOption func(*WebsocketDialer)
funcWithWorkspaceUpdates¶added inv2.18.0
func WithWorkspaceUpdates(req *proto.WorkspaceUpdatesRequest)WebsocketDialerOption
typeWorkspaceAgentReconnectingPTYOpts¶
type WorkspaceAgentReconnectingPTYOpts struct {AgentIDuuid.UUIDReconnectuuid.UUIDWidthuint16Heightuint16Commandstring// SignedToken is an optional signed token from the// issue-reconnecting-pty-signed-token endpoint. If set, the session token// on the client will not be sent.SignedTokenstring// Experimental: Container, if set, will attempt to exec into a running container// visible to the agent. This should be a unique container ID// (implementation-dependent).// ContainerUser is the user as which to exec into the container.// NOTE: This feature is currently experimental and is currently "opt-in".// In order to use this feature, the agent must have the environment variable// CODER_AGENT_DEVCONTAINERS_ENABLE set to "true".ContainerstringContainerUserstring// BackendType is the type of backend to use for the PTY. If not set, the// workspace agent will attempt to determine the preferred backend type.// Supported values are "screen" and "buffered".BackendTypestring}
@typescript-ignore:WorkspaceAgentReconnectingPTYOpts