1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: Apache-2.0
15 "github.com/sirupsen/logrus"
18 type APIEndpoint struct {
21 // "new attributes" key for create/update requests
26 EndpointConfigGet = APIEndpoint{"GET", "arvados/v1/config", ""}
27 EndpointVocabularyGet = APIEndpoint{"GET", "arvados/v1/vocabulary", ""}
28 EndpointDiscoveryDocument = APIEndpoint{"GET", "discovery/v1/apis/arvados/v1/rest", ""}
29 EndpointLogin = APIEndpoint{"GET", "login", ""}
30 EndpointLogout = APIEndpoint{"GET", "logout", ""}
31 EndpointAuthorizedKeyCreate = APIEndpoint{"POST", "arvados/v1/authorized_keys", "authorized_key"}
32 EndpointAuthorizedKeyUpdate = APIEndpoint{"PATCH", "arvados/v1/authorized_keys/{uuid}", "authorized_key"}
33 EndpointAuthorizedKeyGet = APIEndpoint{"GET", "arvados/v1/authorized_keys/{uuid}", ""}
34 EndpointAuthorizedKeyList = APIEndpoint{"GET", "arvados/v1/authorized_keys", ""}
35 EndpointAuthorizedKeyDelete = APIEndpoint{"DELETE", "arvados/v1/authorized_keys/{uuid}", ""}
36 EndpointCollectionCreate = APIEndpoint{"POST", "arvados/v1/collections", "collection"}
37 EndpointCollectionUpdate = APIEndpoint{"PATCH", "arvados/v1/collections/{uuid}", "collection"}
38 EndpointCollectionGet = APIEndpoint{"GET", "arvados/v1/collections/{uuid}", ""}
39 EndpointCollectionList = APIEndpoint{"GET", "arvados/v1/collections", ""}
40 EndpointCollectionProvenance = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/provenance", ""}
41 EndpointCollectionUsedBy = APIEndpoint{"GET", "arvados/v1/collections/{uuid}/used_by", ""}
42 EndpointCollectionDelete = APIEndpoint{"DELETE", "arvados/v1/collections/{uuid}", ""}
43 EndpointCollectionTrash = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/trash", ""}
44 EndpointCollectionUntrash = APIEndpoint{"POST", "arvados/v1/collections/{uuid}/untrash", ""}
45 EndpointComputedPermissionList = APIEndpoint{"GET", "arvados/v1/computed_permissions", ""}
46 EndpointContainerCreate = APIEndpoint{"POST", "arvados/v1/containers", "container"}
47 EndpointContainerUpdate = APIEndpoint{"PATCH", "arvados/v1/containers/{uuid}", "container"}
48 EndpointContainerPriorityUpdate = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/update_priority", "container"}
49 EndpointContainerGet = APIEndpoint{"GET", "arvados/v1/containers/{uuid}", ""}
50 EndpointContainerList = APIEndpoint{"GET", "arvados/v1/containers", ""}
51 EndpointContainerDelete = APIEndpoint{"DELETE", "arvados/v1/containers/{uuid}", ""}
52 EndpointContainerLock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""}
53 EndpointContainerUnlock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""}
54 EndpointContainerSSH = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/ssh", ""}
55 EndpointContainerSSHCompat = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/ssh", ""} // for compatibility with arvados <2.7
56 EndpointContainerGatewayTunnel = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/gateway_tunnel", ""}
57 EndpointContainerGatewayTunnelCompat = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/gateway_tunnel", ""} // for compatibility with arvados <2.7
58 EndpointContainerRequestCreate = APIEndpoint{"POST", "arvados/v1/container_requests", "container_request"}
59 EndpointContainerRequestUpdate = APIEndpoint{"PATCH", "arvados/v1/container_requests/{uuid}", "container_request"}
60 EndpointContainerRequestGet = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}", ""}
61 EndpointContainerRequestList = APIEndpoint{"GET", "arvados/v1/container_requests", ""}
62 EndpointContainerRequestDelete = APIEndpoint{"DELETE", "arvados/v1/container_requests/{uuid}", ""}
63 EndpointContainerRequestContainerStatus = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}/container_status", ""}
64 EndpointContainerRequestLog = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}/log{path:|/.*}", ""}
65 EndpointGroupCreate = APIEndpoint{"POST", "arvados/v1/groups", "group"}
66 EndpointGroupUpdate = APIEndpoint{"PATCH", "arvados/v1/groups/{uuid}", "group"}
67 EndpointGroupGet = APIEndpoint{"GET", "arvados/v1/groups/{uuid}", ""}
68 EndpointGroupList = APIEndpoint{"GET", "arvados/v1/groups", ""}
69 EndpointGroupContents = APIEndpoint{"GET", "arvados/v1/groups/contents", ""}
70 EndpointGroupContentsUUIDInPath = APIEndpoint{"GET", "arvados/v1/groups/{uuid}/contents", ""} // Alternative HTTP route; client-side code should always use EndpointGroupContents instead
71 EndpointGroupShared = APIEndpoint{"GET", "arvados/v1/groups/shared", ""}
72 EndpointGroupDelete = APIEndpoint{"DELETE", "arvados/v1/groups/{uuid}", ""}
73 EndpointGroupTrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/trash", ""}
74 EndpointGroupUntrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/untrash", ""}
75 EndpointLinkCreate = APIEndpoint{"POST", "arvados/v1/links", "link"}
76 EndpointLinkUpdate = APIEndpoint{"PATCH", "arvados/v1/links/{uuid}", "link"}
77 EndpointLinkGet = APIEndpoint{"GET", "arvados/v1/links/{uuid}", ""}
78 EndpointLinkList = APIEndpoint{"GET", "arvados/v1/links", ""}
79 EndpointLinkDelete = APIEndpoint{"DELETE", "arvados/v1/links/{uuid}", ""}
80 EndpointLogCreate = APIEndpoint{"POST", "arvados/v1/logs", "log"}
81 EndpointLogUpdate = APIEndpoint{"PATCH", "arvados/v1/logs/{uuid}", "log"}
82 EndpointLogGet = APIEndpoint{"GET", "arvados/v1/logs/{uuid}", ""}
83 EndpointLogList = APIEndpoint{"GET", "arvados/v1/logs", ""}
84 EndpointLogDelete = APIEndpoint{"DELETE", "arvados/v1/logs/{uuid}", ""}
85 EndpointSysTrashSweep = APIEndpoint{"POST", "sys/trash_sweep", ""}
86 EndpointUserActivate = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""}
87 EndpointUserCreate = APIEndpoint{"POST", "arvados/v1/users", "user"}
88 EndpointUserCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
89 EndpointUserDelete = APIEndpoint{"DELETE", "arvados/v1/users/{uuid}", ""}
90 EndpointUserGet = APIEndpoint{"GET", "arvados/v1/users/{uuid}", ""}
91 EndpointUserGetCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""}
92 EndpointUserGetSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
93 EndpointUserList = APIEndpoint{"GET", "arvados/v1/users", ""}
94 EndpointUserMerge = APIEndpoint{"POST", "arvados/v1/users/merge", ""}
95 EndpointUserSetup = APIEndpoint{"POST", "arvados/v1/users/setup", "user"}
96 EndpointUserSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""}
97 EndpointUserUnsetup = APIEndpoint{"POST", "arvados/v1/users/{uuid}/unsetup", ""}
98 EndpointUserUpdate = APIEndpoint{"PATCH", "arvados/v1/users/{uuid}", "user"}
99 EndpointUserBatchUpdate = APIEndpoint{"PATCH", "arvados/v1/users/batch_update", ""}
100 EndpointUserAuthenticate = APIEndpoint{"POST", "arvados/v1/users/authenticate", ""}
101 EndpointAPIClientAuthorizationCurrent = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/current", ""}
102 EndpointAPIClientAuthorizationCreate = APIEndpoint{"POST", "arvados/v1/api_client_authorizations", "api_client_authorization"}
103 EndpointAPIClientAuthorizationUpdate = APIEndpoint{"PUT", "arvados/v1/api_client_authorizations/{uuid}", "api_client_authorization"}
104 EndpointAPIClientAuthorizationList = APIEndpoint{"GET", "arvados/v1/api_client_authorizations", ""}
105 EndpointAPIClientAuthorizationDelete = APIEndpoint{"DELETE", "arvados/v1/api_client_authorizations/{uuid}", ""}
106 EndpointAPIClientAuthorizationGet = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/{uuid}", ""}
109 type ContainerSSHOptions struct {
110 UUID string `json:"uuid"`
111 DetachKeys string `json:"detach_keys"`
112 LoginUsername string `json:"login_username"`
113 NoForward bool `json:"no_forward"`
116 type ConnectionResponse struct {
117 Conn net.Conn `json:"-"`
118 Bufrw *bufio.ReadWriter `json:"-"`
119 Logger logrus.FieldLogger `json:"-"`
120 Header http.Header `json:"-"`
123 type ContainerGatewayTunnelOptions struct {
124 UUID string `json:"uuid"`
125 AuthSecret string `json:"auth_secret"`
128 type GetOptions struct {
129 UUID string `json:"uuid,omitempty"`
130 Select []string `json:"select"`
131 IncludeTrash bool `json:"include_trash"`
132 ForwardedFor string `json:"forwarded_for,omitempty"`
133 Remote string `json:"remote,omitempty"`
136 type UntrashOptions struct {
137 UUID string `json:"uuid"`
138 EnsureUniqueName bool `json:"ensure_unique_name"`
141 type ListOptions struct {
142 ClusterID string `json:"cluster_id"`
143 Select []string `json:"select"`
144 Filters []Filter `json:"filters"`
145 Where map[string]interface{} `json:"where"`
146 Limit int64 `json:"limit"`
147 Offset int64 `json:"offset"`
148 Order []string `json:"order"`
149 Distinct bool `json:"distinct"`
150 Count string `json:"count"`
151 IncludeTrash bool `json:"include_trash"`
152 IncludeOldVersions bool `json:"include_old_versions"`
153 BypassFederation bool `json:"bypass_federation"`
154 ForwardedFor string `json:"forwarded_for,omitempty"`
155 Include []string `json:"include"`
158 type CreateOptions struct {
159 ClusterID string `json:"cluster_id"`
160 EnsureUniqueName bool `json:"ensure_unique_name"`
161 Select []string `json:"select"`
162 Attrs map[string]interface{} `json:"attrs"`
163 // ReplaceFiles and ReplaceSegments only apply when creating a
165 ReplaceFiles map[string]string `json:"replace_files"`
166 ReplaceSegments map[BlockSegment]BlockSegment `json:"replace_segments"`
169 type UpdateOptions struct {
170 UUID string `json:"uuid"`
171 Attrs map[string]interface{} `json:"attrs"`
172 Select []string `json:"select"`
173 BypassFederation bool `json:"bypass_federation"`
174 // ReplaceFiles and ReplaceSegments only apply when updating a
176 ReplaceFiles map[string]string `json:"replace_files"`
177 ReplaceSegments map[BlockSegment]BlockSegment `json:"replace_segments"`
180 type GroupContentsOptions struct {
181 ClusterID string `json:"cluster_id"`
182 UUID string `json:"uuid,omitempty"`
183 Select []string `json:"select"`
184 Filters []Filter `json:"filters"`
185 Limit int64 `json:"limit"`
186 Offset int64 `json:"offset"`
187 Order []string `json:"order"`
188 Distinct bool `json:"distinct"`
189 Count string `json:"count"`
190 Include []string `json:"include"`
191 Recursive bool `json:"recursive"`
192 IncludeTrash bool `json:"include_trash"`
193 IncludeOldVersions bool `json:"include_old_versions"`
194 ExcludeHomeProject bool `json:"exclude_home_project"`
197 type UserActivateOptions struct {
198 UUID string `json:"uuid"`
201 type UserSetupOptions struct {
202 UUID string `json:"uuid,omitempty"`
203 Email string `json:"email,omitempty"`
204 OpenIDPrefix string `json:"openid_prefix,omitempty"`
205 RepoName string `json:"repo_name,omitempty"`
206 VMUUID string `json:"vm_uuid,omitempty"`
207 SendNotificationEmail bool `json:"send_notification_email,omitempty"`
208 Attrs map[string]interface{} `json:"attrs"`
211 type UserMergeOptions struct {
212 NewUserUUID string `json:"new_user_uuid,omitempty"`
213 OldUserUUID string `json:"old_user_uuid,omitempty"`
214 NewOwnerUUID string `json:"new_owner_uuid,omitempty"`
215 NewUserToken string `json:"new_user_token,omitempty"`
216 RedirectToNewUser bool `json:"redirect_to_new_user"`
219 type UserBatchUpdateOptions struct {
220 Updates map[string]map[string]interface{} `json:"updates"`
223 type UserBatchUpdateResponse struct{}
225 type DeleteOptions struct {
226 UUID string `json:"uuid"`
229 type LoginOptions struct {
230 ReturnTo string `json:"return_to"` // On success, redirect to this target with api_token=xxx query param
231 Remote string `json:"remote,omitempty"` // Salt token for remote Cluster ID
232 Code string `json:"code,omitempty"` // OAuth2 callback code
233 State string `json:"state,omitempty"` // OAuth2 callback state
236 type UserAuthenticateOptions struct {
237 Username string `json:"username,omitempty"` // PAM username
238 Password string `json:"password,omitempty"` // PAM password
241 type LogoutOptions struct {
242 ReturnTo string `json:"return_to"` // Redirect to this URL after logging out
245 type BlockReadOptions struct {
248 LocalLocator func(string)
251 type BlockWriteOptions struct {
254 Reader io.Reader // Must be set if Data is nil.
255 DataSize int // Must be set if Data is nil.
257 StorageClasses []string
262 type BlockWriteResponse struct {
265 StorageClasses map[string]int
268 type WebDAVOptions struct {
274 type ContainerLogOptions struct {
275 UUID string `json:"uuid"`
276 NoForward bool `json:"no_forward"`
280 type RepackOptions struct {
288 ConfigGet(ctx context.Context) (json.RawMessage, error)
289 VocabularyGet(ctx context.Context) (Vocabulary, error)
290 Login(ctx context.Context, options LoginOptions) (LoginResponse, error)
291 Logout(ctx context.Context, options LogoutOptions) (LogoutResponse, error)
292 AuthorizedKeyCreate(ctx context.Context, options CreateOptions) (AuthorizedKey, error)
293 AuthorizedKeyUpdate(ctx context.Context, options UpdateOptions) (AuthorizedKey, error)
294 AuthorizedKeyGet(ctx context.Context, options GetOptions) (AuthorizedKey, error)
295 AuthorizedKeyList(ctx context.Context, options ListOptions) (AuthorizedKeyList, error)
296 AuthorizedKeyDelete(ctx context.Context, options DeleteOptions) (AuthorizedKey, error)
297 CollectionCreate(ctx context.Context, options CreateOptions) (Collection, error)
298 CollectionUpdate(ctx context.Context, options UpdateOptions) (Collection, error)
299 CollectionGet(ctx context.Context, options GetOptions) (Collection, error)
300 CollectionList(ctx context.Context, options ListOptions) (CollectionList, error)
301 CollectionProvenance(ctx context.Context, options GetOptions) (map[string]interface{}, error)
302 CollectionUsedBy(ctx context.Context, options GetOptions) (map[string]interface{}, error)
303 CollectionDelete(ctx context.Context, options DeleteOptions) (Collection, error)
304 CollectionTrash(ctx context.Context, options DeleteOptions) (Collection, error)
305 CollectionUntrash(ctx context.Context, options UntrashOptions) (Collection, error)
306 ComputedPermissionList(ctx context.Context, options ListOptions) (ComputedPermissionList, error)
307 ContainerCreate(ctx context.Context, options CreateOptions) (Container, error)
308 ContainerUpdate(ctx context.Context, options UpdateOptions) (Container, error)
309 ContainerPriorityUpdate(ctx context.Context, options UpdateOptions) (Container, error)
310 ContainerGet(ctx context.Context, options GetOptions) (Container, error)
311 ContainerList(ctx context.Context, options ListOptions) (ContainerList, error)
312 ContainerDelete(ctx context.Context, options DeleteOptions) (Container, error)
313 ContainerLock(ctx context.Context, options GetOptions) (Container, error)
314 ContainerUnlock(ctx context.Context, options GetOptions) (Container, error)
315 ContainerSSH(ctx context.Context, options ContainerSSHOptions) (ConnectionResponse, error)
316 ContainerGatewayTunnel(ctx context.Context, options ContainerGatewayTunnelOptions) (ConnectionResponse, error)
317 ContainerRequestCreate(ctx context.Context, options CreateOptions) (ContainerRequest, error)
318 ContainerRequestUpdate(ctx context.Context, options UpdateOptions) (ContainerRequest, error)
319 ContainerRequestGet(ctx context.Context, options GetOptions) (ContainerRequest, error)
320 ContainerRequestList(ctx context.Context, options ListOptions) (ContainerRequestList, error)
321 ContainerRequestDelete(ctx context.Context, options DeleteOptions) (ContainerRequest, error)
322 ContainerRequestContainerStatus(ctx context.Context, options GetOptions) (ContainerStatus, error)
323 ContainerRequestLog(ctx context.Context, options ContainerLogOptions) (http.Handler, error)
324 GroupCreate(ctx context.Context, options CreateOptions) (Group, error)
325 GroupUpdate(ctx context.Context, options UpdateOptions) (Group, error)
326 GroupGet(ctx context.Context, options GetOptions) (Group, error)
327 GroupList(ctx context.Context, options ListOptions) (GroupList, error)
328 GroupContents(ctx context.Context, options GroupContentsOptions) (ObjectList, error)
329 GroupShared(ctx context.Context, options ListOptions) (GroupList, error)
330 GroupDelete(ctx context.Context, options DeleteOptions) (Group, error)
331 GroupTrash(ctx context.Context, options DeleteOptions) (Group, error)
332 GroupUntrash(ctx context.Context, options UntrashOptions) (Group, error)
333 LinkCreate(ctx context.Context, options CreateOptions) (Link, error)
334 LinkUpdate(ctx context.Context, options UpdateOptions) (Link, error)
335 LinkGet(ctx context.Context, options GetOptions) (Link, error)
336 LinkList(ctx context.Context, options ListOptions) (LinkList, error)
337 LinkDelete(ctx context.Context, options DeleteOptions) (Link, error)
338 LogCreate(ctx context.Context, options CreateOptions) (Log, error)
339 LogUpdate(ctx context.Context, options UpdateOptions) (Log, error)
340 LogGet(ctx context.Context, options GetOptions) (Log, error)
341 LogList(ctx context.Context, options ListOptions) (LogList, error)
342 LogDelete(ctx context.Context, options DeleteOptions) (Log, error)
343 SysTrashSweep(ctx context.Context, options struct{}) (struct{}, error)
344 UserCreate(ctx context.Context, options CreateOptions) (User, error)
345 UserUpdate(ctx context.Context, options UpdateOptions) (User, error)
346 UserMerge(ctx context.Context, options UserMergeOptions) (User, error)
347 UserActivate(ctx context.Context, options UserActivateOptions) (User, error)
348 UserSetup(ctx context.Context, options UserSetupOptions) (map[string]interface{}, error)
349 UserUnsetup(ctx context.Context, options GetOptions) (User, error)
350 UserGet(ctx context.Context, options GetOptions) (User, error)
351 UserGetCurrent(ctx context.Context, options GetOptions) (User, error)
352 UserGetSystem(ctx context.Context, options GetOptions) (User, error)
353 UserList(ctx context.Context, options ListOptions) (UserList, error)
354 UserDelete(ctx context.Context, options DeleteOptions) (User, error)
355 UserBatchUpdate(context.Context, UserBatchUpdateOptions) (UserList, error)
356 UserAuthenticate(ctx context.Context, options UserAuthenticateOptions) (APIClientAuthorization, error)
357 APIClientAuthorizationCurrent(ctx context.Context, options GetOptions) (APIClientAuthorization, error)
358 APIClientAuthorizationCreate(ctx context.Context, options CreateOptions) (APIClientAuthorization, error)
359 APIClientAuthorizationList(ctx context.Context, options ListOptions) (APIClientAuthorizationList, error)
360 APIClientAuthorizationDelete(ctx context.Context, options DeleteOptions) (APIClientAuthorization, error)
361 APIClientAuthorizationUpdate(ctx context.Context, options UpdateOptions) (APIClientAuthorization, error)
362 APIClientAuthorizationGet(ctx context.Context, options GetOptions) (APIClientAuthorization, error)
363 DiscoveryDocument(ctx context.Context) (DiscoveryDocument, error)