Merge branch '18874-merge-wb2'
[arvados.git] / lib / crunchrun / executor.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4 package crunchrun
5
6 import (
7         "context"
8         "io"
9
10         "git.arvados.org/arvados.git/sdk/go/arvados"
11 )
12
13 type bindmount struct {
14         HostPath string
15         ReadOnly bool
16 }
17
18 type containerSpec struct {
19         Image           string
20         VCPUs           int
21         RAM             int64
22         WorkingDir      string
23         Env             map[string]string
24         BindMounts      map[string]bindmount
25         Command         []string
26         EnableNetwork   bool
27         CUDADeviceCount int
28         NetworkMode     string // docker network mode, normally "default"
29         CgroupParent    string
30         Stdin           io.Reader
31         Stdout          io.Writer
32         Stderr          io.Writer
33 }
34
35 // containerExecutor is an interface to a container runtime
36 // (docker/singularity).
37 type containerExecutor interface {
38         // ImageLoad loads the image from the given tarball such that
39         // it can be used to create/start a container.
40         LoadImage(imageID string, imageTarballPath string, container arvados.Container, keepMount string,
41                 containerClient *arvados.Client) error
42
43         // Wait for the container process to finish, and return its
44         // exit code. If applicable, also remove the stopped container
45         // before returning.
46         Wait(context.Context) (int, error)
47
48         // Create a container, but don't start it yet.
49         Create(containerSpec) error
50
51         // Start the container
52         Start() error
53
54         // Process ID of a process in the container.  Return 0 if
55         // container is finished or no process has started yet.
56         Pid() int
57
58         // Stop the container immediately
59         Stop() error
60
61         // Release resources (temp dirs, stopped containers)
62         Close()
63
64         // Name and version of runtime engine ("docker 20.10.16", "singularity-ce version 3.9.9")
65         Runtime() string
66
67         GatewayTarget
68 }