X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f26e039288e744510a6478b7b2597d3c494fb2d1..79870ba994f0606c8ed13806f00cb8b23d9b2c83:/sdk/go/arvados/api.go?ds=sidebyside diff --git a/sdk/go/arvados/api.go b/sdk/go/arvados/api.go index 0c5d32e8b7..0fdc13d198 100644 --- a/sdk/go/arvados/api.go +++ b/sdk/go/arvados/api.go @@ -5,8 +5,13 @@ package arvados import ( + "bufio" "context" "encoding/json" + "io" + "net" + + "github.com/sirupsen/logrus" ) type APIEndpoint struct { @@ -18,6 +23,7 @@ type APIEndpoint struct { var ( EndpointConfigGet = APIEndpoint{"GET", "arvados/v1/config", ""} + EndpointVocabularyGet = APIEndpoint{"GET", "arvados/v1/vocabulary", ""} EndpointLogin = APIEndpoint{"GET", "login", ""} EndpointLogout = APIEndpoint{"GET", "logout", ""} EndpointCollectionCreate = APIEndpoint{"POST", "arvados/v1/collections", "collection"} @@ -41,6 +47,27 @@ var ( EndpointContainerDelete = APIEndpoint{"DELETE", "arvados/v1/containers/{uuid}", ""} EndpointContainerLock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""} EndpointContainerUnlock = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""} + EndpointContainerSSH = APIEndpoint{"GET", "arvados/v1/connect/{uuid}/ssh", ""} // move to /containers after #17014 fixes routing + EndpointContainerRequestCreate = APIEndpoint{"POST", "arvados/v1/container_requests", "container_request"} + EndpointContainerRequestUpdate = APIEndpoint{"PATCH", "arvados/v1/container_requests/{uuid}", "container_request"} + EndpointContainerRequestGet = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}", ""} + EndpointContainerRequestList = APIEndpoint{"GET", "arvados/v1/container_requests", ""} + EndpointContainerRequestDelete = APIEndpoint{"DELETE", "arvados/v1/container_requests/{uuid}", ""} + EndpointGroupCreate = APIEndpoint{"POST", "arvados/v1/groups", "group"} + EndpointGroupUpdate = APIEndpoint{"PATCH", "arvados/v1/groups/{uuid}", "group"} + EndpointGroupGet = APIEndpoint{"GET", "arvados/v1/groups/{uuid}", ""} + EndpointGroupList = APIEndpoint{"GET", "arvados/v1/groups", ""} + EndpointGroupContents = APIEndpoint{"GET", "arvados/v1/groups/contents", ""} + EndpointGroupContentsUUIDInPath = APIEndpoint{"GET", "arvados/v1/groups/{uuid}/contents", ""} // Alternative HTTP route; client-side code should always use EndpointGroupContents instead + EndpointGroupShared = APIEndpoint{"GET", "arvados/v1/groups/shared", ""} + EndpointGroupDelete = APIEndpoint{"DELETE", "arvados/v1/groups/{uuid}", ""} + EndpointGroupTrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/trash", ""} + EndpointGroupUntrash = APIEndpoint{"POST", "arvados/v1/groups/{uuid}/untrash", ""} + EndpointLinkCreate = APIEndpoint{"POST", "arvados/v1/links", "link"} + EndpointLinkUpdate = APIEndpoint{"PATCH", "arvados/v1/links/{uuid}", "link"} + EndpointLinkGet = APIEndpoint{"GET", "arvados/v1/links/{uuid}", ""} + EndpointLinkList = APIEndpoint{"GET", "arvados/v1/links", ""} + EndpointLinkDelete = APIEndpoint{"DELETE", "arvados/v1/links/{uuid}", ""} EndpointUserActivate = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""} EndpointUserCreate = APIEndpoint{"POST", "arvados/v1/users", "user"} EndpointUserCurrent = APIEndpoint{"GET", "arvados/v1/users/current", ""} @@ -54,17 +81,29 @@ var ( EndpointUserSystem = APIEndpoint{"GET", "arvados/v1/users/system", ""} EndpointUserUnsetup = APIEndpoint{"POST", "arvados/v1/users/{uuid}/unsetup", ""} EndpointUserUpdate = APIEndpoint{"PATCH", "arvados/v1/users/{uuid}", "user"} - EndpointUserUpdateUUID = APIEndpoint{"POST", "arvados/v1/users/{uuid}/update_uuid", ""} - EndpointUserBatchUpdate = APIEndpoint{"PATCH", "arvados/v1/users/batch", ""} + EndpointUserBatchUpdate = APIEndpoint{"PATCH", "arvados/v1/users/batch_update", ""} + EndpointUserAuthenticate = APIEndpoint{"POST", "arvados/v1/users/authenticate", ""} EndpointAPIClientAuthorizationCurrent = APIEndpoint{"GET", "arvados/v1/api_client_authorizations/current", ""} ) +type ContainerSSHOptions struct { + UUID string `json:"uuid"` + DetachKeys string `json:"detach_keys"` + LoginUsername string `json:"login_username"` +} + +type ContainerSSHConnection struct { + Conn net.Conn `json:"-"` + Bufrw *bufio.ReadWriter `json:"-"` + Logger logrus.FieldLogger `json:"-"` +} + type GetOptions struct { - UUID string `json:"uuid"` + UUID string `json:"uuid,omitempty"` Select []string `json:"select"` IncludeTrash bool `json:"include_trash"` - ForwardedFor string `json:"forwarded_for"` - Remote string `json:"remote"` + ForwardedFor string `json:"forwarded_for,omitempty"` + Remote string `json:"remote,omitempty"` } type UntrashOptions struct { @@ -77,13 +116,16 @@ type ListOptions struct { Select []string `json:"select"` Filters []Filter `json:"filters"` Where map[string]interface{} `json:"where"` - Limit int `json:"limit"` - Offset int `json:"offset"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` Order []string `json:"order"` Distinct bool `json:"distinct"` Count string `json:"count"` IncludeTrash bool `json:"include_trash"` IncludeOldVersions bool `json:"include_old_versions"` + BypassFederation bool `json:"bypass_federation"` + ForwardedFor string `json:"forwarded_for,omitempty"` + Include string `json:"include"` } type CreateOptions struct { @@ -94,13 +136,27 @@ type CreateOptions struct { } type UpdateOptions struct { - UUID string `json:"uuid"` - Attrs map[string]interface{} `json:"attrs"` + UUID string `json:"uuid"` + Attrs map[string]interface{} `json:"attrs"` + Select []string `json:"select"` + BypassFederation bool `json:"bypass_federation"` } -type UpdateUUIDOptions struct { - UUID string `json:"uuid"` - NewUUID string `json:"new_uuid"` +type GroupContentsOptions struct { + ClusterID string `json:"cluster_id"` + UUID string `json:"uuid,omitempty"` + Select []string `json:"select"` + Filters []Filter `json:"filters"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` + Order []string `json:"order"` + Distinct bool `json:"distinct"` + Count string `json:"count"` + Include string `json:"include"` + Recursive bool `json:"recursive"` + IncludeTrash bool `json:"include_trash"` + IncludeOldVersions bool `json:"include_old_versions"` + ExcludeHomeProject bool `json:"exclude_home_project"` } type UserActivateOptions struct { @@ -142,12 +198,34 @@ type LoginOptions struct { State string `json:"state,omitempty"` // OAuth2 callback state } +type UserAuthenticateOptions struct { + Username string `json:"username,omitempty"` // PAM username + Password string `json:"password,omitempty"` // PAM password +} + type LogoutOptions struct { ReturnTo string `json:"return_to"` // Redirect to this URL after logging out } +type BlockWriteOptions struct { + Hash string + Data []byte + Reader io.Reader + DataSize int // Must be set if Data is nil. + RequestID string + StorageClasses []string + Replicas int + Attempts int +} + +type BlockWriteResponse struct { + Locator string + Replicas int +} + type API interface { ConfigGet(ctx context.Context) (json.RawMessage, error) + VocabularyGet(ctx context.Context) (Vocabulary, error) Login(ctx context.Context, options LoginOptions) (LoginResponse, error) Logout(ctx context.Context, options LogoutOptions) (LogoutResponse, error) CollectionCreate(ctx context.Context, options CreateOptions) (Collection, error) @@ -166,6 +244,26 @@ type API interface { ContainerDelete(ctx context.Context, options DeleteOptions) (Container, error) ContainerLock(ctx context.Context, options GetOptions) (Container, error) ContainerUnlock(ctx context.Context, options GetOptions) (Container, error) + ContainerSSH(ctx context.Context, options ContainerSSHOptions) (ContainerSSHConnection, error) + ContainerRequestCreate(ctx context.Context, options CreateOptions) (ContainerRequest, error) + ContainerRequestUpdate(ctx context.Context, options UpdateOptions) (ContainerRequest, error) + ContainerRequestGet(ctx context.Context, options GetOptions) (ContainerRequest, error) + ContainerRequestList(ctx context.Context, options ListOptions) (ContainerRequestList, error) + ContainerRequestDelete(ctx context.Context, options DeleteOptions) (ContainerRequest, error) + GroupCreate(ctx context.Context, options CreateOptions) (Group, error) + GroupUpdate(ctx context.Context, options UpdateOptions) (Group, error) + GroupGet(ctx context.Context, options GetOptions) (Group, error) + GroupList(ctx context.Context, options ListOptions) (GroupList, error) + GroupContents(ctx context.Context, options GroupContentsOptions) (ObjectList, error) + GroupShared(ctx context.Context, options ListOptions) (GroupList, error) + GroupDelete(ctx context.Context, options DeleteOptions) (Group, error) + GroupTrash(ctx context.Context, options DeleteOptions) (Group, error) + GroupUntrash(ctx context.Context, options UntrashOptions) (Group, error) + LinkCreate(ctx context.Context, options CreateOptions) (Link, error) + LinkUpdate(ctx context.Context, options UpdateOptions) (Link, error) + LinkGet(ctx context.Context, options GetOptions) (Link, error) + LinkList(ctx context.Context, options ListOptions) (LinkList, error) + LinkDelete(ctx context.Context, options DeleteOptions) (Link, error) SpecimenCreate(ctx context.Context, options CreateOptions) (Specimen, error) SpecimenUpdate(ctx context.Context, options UpdateOptions) (Specimen, error) SpecimenGet(ctx context.Context, options GetOptions) (Specimen, error) @@ -173,7 +271,6 @@ type API interface { SpecimenDelete(ctx context.Context, options DeleteOptions) (Specimen, error) UserCreate(ctx context.Context, options CreateOptions) (User, error) UserUpdate(ctx context.Context, options UpdateOptions) (User, error) - UserUpdateUUID(ctx context.Context, options UpdateUUIDOptions) (User, error) UserMerge(ctx context.Context, options UserMergeOptions) (User, error) UserActivate(ctx context.Context, options UserActivateOptions) (User, error) UserSetup(ctx context.Context, options UserSetupOptions) (map[string]interface{}, error) @@ -184,5 +281,6 @@ type API interface { UserList(ctx context.Context, options ListOptions) (UserList, error) UserDelete(ctx context.Context, options DeleteOptions) (User, error) UserBatchUpdate(context.Context, UserBatchUpdateOptions) (UserList, error) + UserAuthenticate(ctx context.Context, options UserAuthenticateOptions) (APIClientAuthorization, error) APIClientAuthorizationCurrent(ctx context.Context, options GetOptions) (APIClientAuthorization, error) }