Files
coder/docs/reference/api/agents.md
Ethan b1298a3c1e feat: add WorkspaceUpdates tailnet RPC (#14847)
Closes #14716
Closes #14717

Adds a new user-scoped tailnet API endpoint (`api/v2/tailnet`) with a new RPC stream for receiving updates on workspaces owned by a specific user, as defined in #14716. 

When a stream is started, the `WorkspaceUpdatesProvider` will begin listening on the user-scoped pubsub events implemented in #14964. When a relevant event type is seen (such as a workspace state transition), the provider will query the DB for all the workspaces (and agents) owned by the user. This gets compared against the result of the previous query to produce a set of workspace updates. 

Workspace updates can be requested for any user ID, however only workspaces the authorised user is permitted to `ActionRead` will have their updates streamed.
Opening a tunnel to an agent requires that the user can perform `ActionSSH` against the workspace containing it.
2024-11-01 14:53:53 +11:00

27 KiB
Generated

Agents

Get DERP map updates

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/derp-map \
  -H 'Coder-Session-Token: API_KEY'

GET /derp-map

Responses

Status Meaning Description Schema
101 Switching Protocols Switching Protocols

To perform this operation, you must be authenticated. Learn more.

User-scoped tailnet RPC connection

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/tailnet \
  -H 'Coder-Session-Token: API_KEY'

GET /tailnet

Responses

Status Meaning Description Schema
101 Switching Protocols Switching Protocols

To perform this operation, you must be authenticated. Learn more.

Authenticate agent on AWS instance

Code samples

# Example request using curl
curl -X POST http://coder-server:8080/api/v2/workspaceagents/aws-instance-identity \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

POST /workspaceagents/aws-instance-identity

Body parameter

{
	"document": "string",
	"signature": "string"
}

Parameters

Name In Type Required Description
body body agentsdk.AWSInstanceIdentityToken true Instance identity token

Example responses

200 Response

{
	"session_token": "string"
}

Responses

Status Meaning Description Schema
200 OK OK agentsdk.AuthenticateResponse

To perform this operation, you must be authenticated. Learn more.

Authenticate agent on Azure instance

Code samples

# Example request using curl
curl -X POST http://coder-server:8080/api/v2/workspaceagents/azure-instance-identity \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

POST /workspaceagents/azure-instance-identity

Body parameter

{
	"encoding": "string",
	"signature": "string"
}

Parameters

Name In Type Required Description
body body agentsdk.AzureInstanceIdentityToken true Instance identity token

Example responses

200 Response

{
	"session_token": "string"
}

Responses

Status Meaning Description Schema
200 OK OK agentsdk.AuthenticateResponse

To perform this operation, you must be authenticated. Learn more.

Authenticate agent on Google Cloud instance

Code samples

# Example request using curl
curl -X POST http://coder-server:8080/api/v2/workspaceagents/google-instance-identity \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

POST /workspaceagents/google-instance-identity

Body parameter

{
	"json_web_token": "string"
}

Parameters

Name In Type Required Description
body body agentsdk.GoogleInstanceIdentityToken true Instance identity token

Example responses

200 Response

{
	"session_token": "string"
}

Responses

Status Meaning Description Schema
200 OK OK agentsdk.AuthenticateResponse

To perform this operation, you must be authenticated. Learn more.

Get workspace agent external auth

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/me/external-auth?match=string&id=string \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/me/external-auth

Parameters

Name In Type Required Description
match query string true Match
id query string true Provider ID
listen query boolean false Wait for a new token to be issued

Example responses

200 Response

{
	"access_token": "string",
	"password": "string",
	"token_extra": {},
	"type": "string",
	"url": "string",
	"username": "string"
}

Responses

Status Meaning Description Schema
200 OK OK agentsdk.ExternalAuthResponse

To perform this operation, you must be authenticated. Learn more.

Removed: Get workspace agent git auth

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/me/gitauth?match=string&id=string \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/me/gitauth

Parameters

Name In Type Required Description
match query string true Match
id query string true Provider ID
listen query boolean false Wait for a new token to be issued

Example responses

200 Response

{
	"access_token": "string",
	"password": "string",
	"token_extra": {},
	"type": "string",
	"url": "string",
	"username": "string"
}

Responses

Status Meaning Description Schema
200 OK OK agentsdk.ExternalAuthResponse

To perform this operation, you must be authenticated. Learn more.

Get workspace agent Git SSH key

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/me/gitsshkey \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/me/gitsshkey

Example responses

200 Response

{
	"private_key": "string",
	"public_key": "string"
}

Responses

Status Meaning Description Schema
200 OK OK agentsdk.GitSSHKey

To perform this operation, you must be authenticated. Learn more.

Post workspace agent log source

Code samples

# Example request using curl
curl -X POST http://coder-server:8080/api/v2/workspaceagents/me/log-source \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

POST /workspaceagents/me/log-source

Body parameter

{
	"display_name": "string",
	"icon": "string",
	"id": "string"
}

Parameters

Name In Type Required Description
body body agentsdk.PostLogSourceRequest true Log source request

Example responses

200 Response

{
	"created_at": "2019-08-24T14:15:22Z",
	"display_name": "string",
	"icon": "string",
	"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
	"workspace_agent_id": "7ad2e618-fea7-4c1a-b70a-f501566a72f1"
}

Responses

Status Meaning Description Schema
200 OK OK codersdk.WorkspaceAgentLogSource

To perform this operation, you must be authenticated. Learn more.

Patch workspace agent logs

Code samples

# Example request using curl
curl -X PATCH http://coder-server:8080/api/v2/workspaceagents/me/logs \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

PATCH /workspaceagents/me/logs

Body parameter

{
	"log_source_id": "string",
	"logs": [
		{
			"created_at": "string",
			"level": "trace",
			"output": "string"
		}
	]
}

Parameters

Name In Type Required Description
body body agentsdk.PatchLogs true logs

Example responses

200 Response

{
	"detail": "string",
	"message": "string",
	"validations": [
		{
			"detail": "string",
			"field": "string"
		}
	]
}

Responses

Status Meaning Description Schema
200 OK OK codersdk.Response

To perform this operation, you must be authenticated. Learn more.

Get workspace agent by ID

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent} \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/{workspaceagent}

Parameters

Name In Type Required Description
workspaceagent path string(uuid) true Workspace agent ID

Example responses

200 Response

{
	"api_version": "string",
	"apps": [
		{
			"command": "string",
			"display_name": "string",
			"external": true,
			"health": "disabled",
			"healthcheck": {
				"interval": 0,
				"threshold": 0,
				"url": "string"
			},
			"hidden": true,
			"icon": "string",
			"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
			"sharing_level": "owner",
			"slug": "string",
			"subdomain": true,
			"subdomain_name": "string",
			"url": "string"
		}
	],
	"architecture": "string",
	"connection_timeout_seconds": 0,
	"created_at": "2019-08-24T14:15:22Z",
	"directory": "string",
	"disconnected_at": "2019-08-24T14:15:22Z",
	"display_apps": ["vscode"],
	"environment_variables": {
		"property1": "string",
		"property2": "string"
	},
	"expanded_directory": "string",
	"first_connected_at": "2019-08-24T14:15:22Z",
	"health": {
		"healthy": false,
		"reason": "agent has lost connection"
	},
	"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
	"instance_id": "string",
	"last_connected_at": "2019-08-24T14:15:22Z",
	"latency": {
		"property1": {
			"latency_ms": 0,
			"preferred": true
		},
		"property2": {
			"latency_ms": 0,
			"preferred": true
		}
	},
	"lifecycle_state": "created",
	"log_sources": [
		{
			"created_at": "2019-08-24T14:15:22Z",
			"display_name": "string",
			"icon": "string",
			"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
			"workspace_agent_id": "7ad2e618-fea7-4c1a-b70a-f501566a72f1"
		}
	],
	"logs_length": 0,
	"logs_overflowed": true,
	"name": "string",
	"operating_system": "string",
	"ready_at": "2019-08-24T14:15:22Z",
	"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
	"scripts": [
		{
			"cron": "string",
			"display_name": "string",
			"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
			"log_path": "string",
			"log_source_id": "4197ab25-95cf-4b91-9c78-f7f2af5d353a",
			"run_on_start": true,
			"run_on_stop": true,
			"script": "string",
			"start_blocks_login": true,
			"timeout": 0
		}
	],
	"started_at": "2019-08-24T14:15:22Z",
	"startup_script_behavior": "blocking",
	"status": "connecting",
	"subsystems": ["envbox"],
	"troubleshooting_url": "string",
	"updated_at": "2019-08-24T14:15:22Z",
	"version": "string"
}

Responses

Status Meaning Description Schema
200 OK OK codersdk.WorkspaceAgent

To perform this operation, you must be authenticated. Learn more.

Get connection info for workspace agent

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent}/connection \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/{workspaceagent}/connection

Parameters

Name In Type Required Description
workspaceagent path string(uuid) true Workspace agent ID

Example responses

200 Response

{
	"derp_force_websockets": true,
	"derp_map": {
		"homeParams": {
			"regionScore": {
				"property1": 0,
				"property2": 0
			}
		},
		"omitDefaultRegions": true,
		"regions": {
			"property1": {
				"avoid": true,
				"embeddedRelay": true,
				"nodes": [
					{
						"canPort80": true,
						"certName": "string",
						"derpport": 0,
						"forceHTTP": true,
						"hostName": "string",
						"insecureForTests": true,
						"ipv4": "string",
						"ipv6": "string",
						"name": "string",
						"regionID": 0,
						"stunonly": true,
						"stunport": 0,
						"stuntestIP": "string"
					}
				],
				"regionCode": "string",
				"regionID": 0,
				"regionName": "string"
			},
			"property2": {
				"avoid": true,
				"embeddedRelay": true,
				"nodes": [
					{
						"canPort80": true,
						"certName": "string",
						"derpport": 0,
						"forceHTTP": true,
						"hostName": "string",
						"insecureForTests": true,
						"ipv4": "string",
						"ipv6": "string",
						"name": "string",
						"regionID": 0,
						"stunonly": true,
						"stunport": 0,
						"stuntestIP": "string"
					}
				],
				"regionCode": "string",
				"regionID": 0,
				"regionName": "string"
			}
		}
	},
	"disable_direct_connections": true
}

Responses

Status Meaning Description Schema
200 OK OK workspacesdk.AgentConnectionInfo

To perform this operation, you must be authenticated. Learn more.

Coordinate workspace agent

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent}/coordinate \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/{workspaceagent}/coordinate

Parameters

Name In Type Required Description
workspaceagent path string(uuid) true Workspace agent ID

Responses

Status Meaning Description Schema
101 Switching Protocols Switching Protocols

To perform this operation, you must be authenticated. Learn more.

Get listening ports for workspace agent

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent}/listening-ports \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/{workspaceagent}/listening-ports

Parameters

Name In Type Required Description
workspaceagent path string(uuid) true Workspace agent ID

Example responses

200 Response

{
	"ports": [
		{
			"network": "string",
			"port": 0,
			"process_name": "string"
		}
	]
}

Responses

Status Meaning Description Schema
200 OK OK codersdk.WorkspaceAgentListeningPortsResponse

To perform this operation, you must be authenticated. Learn more.

Get logs by workspace agent

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent}/logs \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/{workspaceagent}/logs

Parameters

Name In Type Required Description
workspaceagent path string(uuid) true Workspace agent ID
before query integer false Before log id
after query integer false After log id
follow query boolean false Follow log stream
no_compression query boolean false Disable compression for WebSocket connection

Example responses

200 Response

[
	{
		"created_at": "2019-08-24T14:15:22Z",
		"id": 0,
		"level": "trace",
		"output": "string",
		"source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81"
	}
]

Responses

Status Meaning Description Schema
200 OK OK array of codersdk.WorkspaceAgentLog

Response Schema

Status Code 200

Name Type Required Restrictions Description
[array item] array false
» created_at string(date-time) false
» id integer false
» level codersdk.LogLevel false
» output string false
» source_id string(uuid) false

Enumerated Values

Property Value
level trace
level debug
level info
level warn
level error

To perform this operation, you must be authenticated. Learn more.

Open PTY to workspace agent

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent}/pty \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/{workspaceagent}/pty

Parameters

Name In Type Required Description
workspaceagent path string(uuid) true Workspace agent ID

Responses

Status Meaning Description Schema
101 Switching Protocols Switching Protocols

To perform this operation, you must be authenticated. Learn more.

Removed: Get logs by workspace agent

Code samples

# Example request using curl
curl -X GET http://coder-server:8080/api/v2/workspaceagents/{workspaceagent}/startup-logs \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'

GET /workspaceagents/{workspaceagent}/startup-logs

Parameters

Name In Type Required Description
workspaceagent path string(uuid) true Workspace agent ID
before query integer false Before log id
after query integer false After log id
follow query boolean false Follow log stream
no_compression query boolean false Disable compression for WebSocket connection

Example responses

200 Response

[
	{
		"created_at": "2019-08-24T14:15:22Z",
		"id": 0,
		"level": "trace",
		"output": "string",
		"source_id": "ae50a35c-df42-4eff-ba26-f8bc28d2af81"
	}
]

Responses

Status Meaning Description Schema
200 OK OK array of codersdk.WorkspaceAgentLog

Response Schema

Status Code 200

Name Type Required Restrictions Description
[array item] array false
» created_at string(date-time) false
» id integer false
» level codersdk.LogLevel false
» output string false
» source_id string(uuid) false

Enumerated Values

Property Value
level trace
level debug
level info
level warn
level error

To perform this operation, you must be authenticated. Learn more.