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
- 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)
- func (c *Client) RewriteDERPMap(derpMap *tailcfg.DERPMap)
- 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¶
type AgentConn interface {TailnetConn() *tailnet.ConnAwaitReachable(ctxcontext.Context)boolClose()errorDebugLogs(ctxcontext.Context) ([]byte,error)DebugMagicsock(ctxcontext.Context) ([]byte,error)DebugManifest(ctxcontext.Context) ([]byte,error)DialContext(ctxcontext.Context, networkstring, addrstring) (net.Conn,error)GetPeerDiagnostics()tailnet.PeerDiagnosticsListContainers(ctxcontext.Context) (codersdk.WorkspaceAgentListContainersResponse,error)ListeningPorts(ctxcontext.Context) (codersdk.WorkspaceAgentListeningPortsResponse,error)Netcheck(ctxcontext.Context) (healthsdk.AgentNetcheckReport,error)Ping(ctxcontext.Context) (time.Duration,bool, *ipnstate.PingResult,error)PrometheusMetrics(ctxcontext.Context) ([]byte,error)ReconnectingPTY(ctxcontext.Context, iduuid.UUID, heightuint16, widthuint16, commandstring, initOpts ...AgentReconnectingPTYInitOption) (net.Conn,error)RecreateDevcontainer(ctxcontext.Context, devcontainerIDstring) (codersdk.Response,error)SSH(ctxcontext.Context) (*gonet.TCPConn,error)SSHClient(ctxcontext.Context) (*ssh.Client,error)SSHClientOnPort(ctxcontext.Context, portuint16) (*ssh.Client,error)SSHOnPort(ctxcontext.Context, portuint16) (*gonet.TCPConn,error)Speedtest(ctxcontext.Context, directionspeedtest.Direction, durationtime.Duration) ([]speedtest.Result,error)WatchContainers(ctxcontext.Context, loggerslog.Logger) (<-chancodersdk.WorkspaceAgentListContainersResponse,io.Closer,error)}
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.
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.
func (*Client)RewriteDERPMap¶added inv2.25.0
RewriteDERPMap rewrites the DERP map to use the configured access URL of theclient as the "embedded relay" access URL.
See tailnet.RewriteDERPMapDefaultRelay for more details on why this isnecessary.
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
Directories¶
Path | Synopsis |
---|---|
Package agentconnmock is a generated GoMock package. | Package agentconnmock is a generated GoMock package. |