Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
| ... | ... |
@@ -15,7 +15,7 @@ import ( |
| 15 | 15 |
"syscall" |
| 16 | 16 |
"time" |
| 17 | 17 |
|
| 18 |
- "github.com/containerd/containerd" |
|
| 18 |
+ "github.com/containerd/containerd/cio" |
|
| 19 | 19 |
containertypes "github.com/docker/docker/api/types/container" |
| 20 | 20 |
mounttypes "github.com/docker/docker/api/types/mount" |
| 21 | 21 |
networktypes "github.com/docker/docker/api/types/network" |
| ... | ... |
@@ -1004,7 +1004,7 @@ func (container *Container) CloseStreams() error {
|
| 1004 | 1004 |
} |
| 1005 | 1005 |
|
| 1006 | 1006 |
// InitializeStdio is called by libcontainerd to connect the stdio. |
| 1007 |
-func (container *Container) InitializeStdio(iop *libcontainerd.IOPipe) (containerd.IO, error) {
|
|
| 1007 |
+func (container *Container) InitializeStdio(iop *libcontainerd.IOPipe) (cio.IO, error) {
|
|
| 1008 | 1008 |
if err := container.startLogging(); err != nil {
|
| 1009 | 1009 |
container.Reset(false) |
| 1010 | 1010 |
return nil, err |
| ... | ... |
@@ -1020,7 +1020,7 @@ func (container *Container) InitializeStdio(iop *libcontainerd.IOPipe) (containe |
| 1020 | 1020 |
} |
| 1021 | 1021 |
} |
| 1022 | 1022 |
|
| 1023 |
- return &cio{IO: iop, sc: container.StreamConfig}, nil
|
|
| 1023 |
+ return &rio{IO: iop, sc: container.StreamConfig}, nil
|
|
| 1024 | 1024 |
} |
| 1025 | 1025 |
|
| 1026 | 1026 |
// SecretMountPath returns the path of the secret mount for the container |
| ... | ... |
@@ -1078,19 +1078,19 @@ func (container *Container) CreateDaemonEnvironment(tty bool, linkedEnv []string |
| 1078 | 1078 |
return env |
| 1079 | 1079 |
} |
| 1080 | 1080 |
|
| 1081 |
-type cio struct {
|
|
| 1082 |
- containerd.IO |
|
| 1081 |
+type rio struct {
|
|
| 1082 |
+ cio.IO |
|
| 1083 | 1083 |
|
| 1084 | 1084 |
sc *stream.Config |
| 1085 | 1085 |
} |
| 1086 | 1086 |
|
| 1087 |
-func (i *cio) Close() error {
|
|
| 1087 |
+func (i *rio) Close() error {
|
|
| 1088 | 1088 |
i.IO.Close() |
| 1089 | 1089 |
|
| 1090 | 1090 |
return i.sc.CloseStreams() |
| 1091 | 1091 |
} |
| 1092 | 1092 |
|
| 1093 |
-func (i *cio) Wait() {
|
|
| 1093 |
+func (i *rio) Wait() {
|
|
| 1094 | 1094 |
i.sc.Wait() |
| 1095 | 1095 |
|
| 1096 | 1096 |
i.IO.Wait() |
| ... | ... |
@@ -4,7 +4,7 @@ import ( |
| 4 | 4 |
"runtime" |
| 5 | 5 |
"sync" |
| 6 | 6 |
|
| 7 |
- "github.com/containerd/containerd" |
|
| 7 |
+ "github.com/containerd/containerd/cio" |
|
| 8 | 8 |
"github.com/docker/docker/container/stream" |
| 9 | 9 |
"github.com/docker/docker/libcontainerd" |
| 10 | 10 |
"github.com/docker/docker/pkg/stringid" |
| ... | ... |
@@ -43,26 +43,26 @@ func NewConfig() *Config {
|
| 43 | 43 |
} |
| 44 | 44 |
} |
| 45 | 45 |
|
| 46 |
-type cio struct {
|
|
| 47 |
- containerd.IO |
|
| 46 |
+type rio struct {
|
|
| 47 |
+ cio.IO |
|
| 48 | 48 |
|
| 49 | 49 |
sc *stream.Config |
| 50 | 50 |
} |
| 51 | 51 |
|
| 52 |
-func (i *cio) Close() error {
|
|
| 52 |
+func (i *rio) Close() error {
|
|
| 53 | 53 |
i.IO.Close() |
| 54 | 54 |
|
| 55 | 55 |
return i.sc.CloseStreams() |
| 56 | 56 |
} |
| 57 | 57 |
|
| 58 |
-func (i *cio) Wait() {
|
|
| 58 |
+func (i *rio) Wait() {
|
|
| 59 | 59 |
i.sc.Wait() |
| 60 | 60 |
|
| 61 | 61 |
i.IO.Wait() |
| 62 | 62 |
} |
| 63 | 63 |
|
| 64 | 64 |
// InitializeStdio is called by libcontainerd to connect the stdio. |
| 65 |
-func (c *Config) InitializeStdio(iop *libcontainerd.IOPipe) (containerd.IO, error) {
|
|
| 65 |
+func (c *Config) InitializeStdio(iop *libcontainerd.IOPipe) (cio.IO, error) {
|
|
| 66 | 66 |
c.StreamConfig.CopyToPipe(iop) |
| 67 | 67 |
|
| 68 | 68 |
if c.StreamConfig.Stdin() == nil && !c.Tty && runtime.GOOS == "windows" {
|
| ... | ... |
@@ -73,7 +73,7 @@ func (c *Config) InitializeStdio(iop *libcontainerd.IOPipe) (containerd.IO, erro |
| 73 | 73 |
} |
| 74 | 74 |
} |
| 75 | 75 |
|
| 76 |
- return &cio{IO: iop, sc: c.StreamConfig}, nil
|
|
| 76 |
+ return &rio{IO: iop, sc: c.StreamConfig}, nil
|
|
| 77 | 77 |
} |
| 78 | 78 |
|
| 79 | 79 |
// CloseStreams closes the stdio streams for the exec |
| ... | ... |
@@ -7,7 +7,7 @@ import ( |
| 7 | 7 |
"os/exec" |
| 8 | 8 |
"path/filepath" |
| 9 | 9 |
|
| 10 |
- "github.com/containerd/containerd/linux/runcopts" |
|
| 10 |
+ "github.com/containerd/containerd/linux/runctypes" |
|
| 11 | 11 |
"github.com/docker/docker/container" |
| 12 | 12 |
"github.com/pkg/errors" |
| 13 | 13 |
) |
| ... | ... |
@@ -42,7 +42,7 @@ func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Contain |
| 42 | 42 |
if err != nil {
|
| 43 | 43 |
return nil, err |
| 44 | 44 |
} |
| 45 |
- opts := &runcopts.RuncOptions{
|
|
| 45 |
+ opts := &runctypes.RuncOptions{
|
|
| 46 | 46 |
Runtime: path, |
| 47 | 47 |
RuntimeRoot: filepath.Join(daemon.configStore.ExecRoot, |
| 48 | 48 |
fmt.Sprintf("runtime-%s", container.HostConfig.Runtime)),
|
| ... | ... |
@@ -21,12 +21,14 @@ import ( |
| 21 | 21 |
"google.golang.org/grpc/status" |
| 22 | 22 |
|
| 23 | 23 |
"github.com/containerd/containerd" |
| 24 |
+ "github.com/containerd/containerd/api/events" |
|
| 24 | 25 |
eventsapi "github.com/containerd/containerd/api/services/events/v1" |
| 25 | 26 |
"github.com/containerd/containerd/api/types" |
| 26 | 27 |
"github.com/containerd/containerd/archive" |
| 28 |
+ "github.com/containerd/containerd/cio" |
|
| 27 | 29 |
"github.com/containerd/containerd/content" |
| 28 | 30 |
"github.com/containerd/containerd/images" |
| 29 |
- "github.com/containerd/containerd/linux/runcopts" |
|
| 31 |
+ "github.com/containerd/containerd/linux/runctypes" |
|
| 30 | 32 |
"github.com/containerd/typeurl" |
| 31 | 33 |
"github.com/docker/docker/pkg/ioutils" |
| 32 | 34 |
"github.com/opencontainers/image-spec/specs-go/v1" |
| ... | ... |
@@ -70,7 +72,7 @@ func (c *client) Restore(ctx context.Context, id string, attachStdio StdioCallba |
| 70 | 70 |
c.Lock() |
| 71 | 71 |
defer c.Unlock() |
| 72 | 72 |
|
| 73 |
- var cio containerd.IO |
|
| 73 |
+ var rio cio.IO |
|
| 74 | 74 |
defer func() {
|
| 75 | 75 |
err = wrapError(err) |
| 76 | 76 |
}() |
| ... | ... |
@@ -81,20 +83,20 @@ func (c *client) Restore(ctx context.Context, id string, attachStdio StdioCallba |
| 81 | 81 |
} |
| 82 | 82 |
|
| 83 | 83 |
defer func() {
|
| 84 |
- if err != nil && cio != nil {
|
|
| 85 |
- cio.Cancel() |
|
| 86 |
- cio.Close() |
|
| 84 |
+ if err != nil && rio != nil {
|
|
| 85 |
+ rio.Cancel() |
|
| 86 |
+ rio.Close() |
|
| 87 | 87 |
} |
| 88 | 88 |
}() |
| 89 | 89 |
|
| 90 |
- t, err := ctr.Task(ctx, func(fifos *containerd.FIFOSet) (containerd.IO, error) {
|
|
| 90 |
+ t, err := ctr.Task(ctx, func(fifos *cio.FIFOSet) (cio.IO, error) {
|
|
| 91 | 91 |
io, err := newIOPipe(fifos) |
| 92 | 92 |
if err != nil {
|
| 93 | 93 |
return nil, err |
| 94 | 94 |
} |
| 95 | 95 |
|
| 96 |
- cio, err = attachStdio(io) |
|
| 97 |
- return cio, err |
|
| 96 |
+ rio, err = attachStdio(io) |
|
| 97 |
+ return rio, err |
|
| 98 | 98 |
}) |
| 99 | 99 |
if err != nil && !strings.Contains(err.Error(), "no running task found") {
|
| 100 | 100 |
return false, -1, err |
| ... | ... |
@@ -168,7 +170,7 @@ func (c *client) Start(ctx context.Context, id, checkpointDir string, withStdin |
| 168 | 168 |
var ( |
| 169 | 169 |
cp *types.Descriptor |
| 170 | 170 |
t containerd.Task |
| 171 |
- cio containerd.IO |
|
| 171 |
+ rio cio.IO |
|
| 172 | 172 |
err error |
| 173 | 173 |
stdinCloseSync = make(chan struct{})
|
| 174 | 174 |
) |
| ... | ... |
@@ -203,14 +205,14 @@ func (c *client) Start(ctx context.Context, id, checkpointDir string, withStdin |
| 203 | 203 |
} |
| 204 | 204 |
uid, gid := getSpecUser(spec) |
| 205 | 205 |
t, err = ctr.ctr.NewTask(ctx, |
| 206 |
- func(id string) (containerd.IO, error) {
|
|
| 206 |
+ func(id string) (cio.IO, error) {
|
|
| 207 | 207 |
fifos := newFIFOSet(ctr.bundleDir, id, InitProcessName, withStdin, spec.Process.Terminal) |
| 208 |
- cio, err = c.createIO(fifos, id, InitProcessName, stdinCloseSync, attachStdio) |
|
| 209 |
- return cio, err |
|
| 208 |
+ rio, err = c.createIO(fifos, id, InitProcessName, stdinCloseSync, attachStdio) |
|
| 209 |
+ return rio, err |
|
| 210 | 210 |
}, |
| 211 | 211 |
func(_ context.Context, _ *containerd.Client, info *containerd.TaskInfo) error {
|
| 212 | 212 |
info.Checkpoint = cp |
| 213 |
- info.Options = &runcopts.CreateOptions{
|
|
| 213 |
+ info.Options = &runctypes.CreateOptions{
|
|
| 214 | 214 |
IoUid: uint32(uid), |
| 215 | 215 |
IoGid: uint32(gid), |
| 216 | 216 |
} |
| ... | ... |
@@ -218,9 +220,9 @@ func (c *client) Start(ctx context.Context, id, checkpointDir string, withStdin |
| 218 | 218 |
}) |
| 219 | 219 |
if err != nil {
|
| 220 | 220 |
close(stdinCloseSync) |
| 221 |
- if cio != nil {
|
|
| 222 |
- cio.Cancel() |
|
| 223 |
- cio.Close() |
|
| 221 |
+ if rio != nil {
|
|
| 222 |
+ rio.Cancel() |
|
| 223 |
+ rio.Close() |
|
| 224 | 224 |
} |
| 225 | 225 |
return -1, err |
| 226 | 226 |
} |
| ... | ... |
@@ -259,7 +261,7 @@ func (c *client) Exec(ctx context.Context, containerID, processID string, spec * |
| 259 | 259 |
|
| 260 | 260 |
var ( |
| 261 | 261 |
p containerd.Process |
| 262 |
- cio containerd.IO |
|
| 262 |
+ rio cio.IO |
|
| 263 | 263 |
err error |
| 264 | 264 |
stdinCloseSync = make(chan struct{})
|
| 265 | 265 |
) |
| ... | ... |
@@ -268,23 +270,23 @@ func (c *client) Exec(ctx context.Context, containerID, processID string, spec * |
| 268 | 268 |
|
| 269 | 269 |
defer func() {
|
| 270 | 270 |
if err != nil {
|
| 271 |
- if cio != nil {
|
|
| 272 |
- cio.Cancel() |
|
| 273 |
- cio.Close() |
|
| 271 |
+ if rio != nil {
|
|
| 272 |
+ rio.Cancel() |
|
| 273 |
+ rio.Close() |
|
| 274 | 274 |
} |
| 275 | 275 |
rmFIFOSet(fifos) |
| 276 | 276 |
} |
| 277 | 277 |
}() |
| 278 | 278 |
|
| 279 |
- p, err = ctr.task.Exec(ctx, processID, spec, func(id string) (containerd.IO, error) {
|
|
| 280 |
- cio, err = c.createIO(fifos, containerID, processID, stdinCloseSync, attachStdio) |
|
| 281 |
- return cio, err |
|
| 279 |
+ p, err = ctr.task.Exec(ctx, processID, spec, func(id string) (cio.IO, error) {
|
|
| 280 |
+ rio, err = c.createIO(fifos, containerID, processID, stdinCloseSync, attachStdio) |
|
| 281 |
+ return rio, err |
|
| 282 | 282 |
}) |
| 283 | 283 |
if err != nil {
|
| 284 | 284 |
close(stdinCloseSync) |
| 285 |
- if cio != nil {
|
|
| 286 |
- cio.Cancel() |
|
| 287 |
- cio.Close() |
|
| 285 |
+ if rio != nil {
|
|
| 286 |
+ rio.Cancel() |
|
| 287 |
+ rio.Close() |
|
| 288 | 288 |
} |
| 289 | 289 |
return -1, err |
| 290 | 290 |
} |
| ... | ... |
@@ -569,7 +571,7 @@ func (c *client) getProcess(containerID, processID string) (containerd.Process, |
| 569 | 569 |
|
| 570 | 570 |
// createIO creates the io to be used by a process |
| 571 | 571 |
// This needs to get a pointer to interface as upon closure the process may not have yet been registered |
| 572 |
-func (c *client) createIO(fifos *containerd.FIFOSet, containerID, processID string, stdinCloseSync chan struct{}, attachStdio StdioCallback) (containerd.IO, error) {
|
|
| 572 |
+func (c *client) createIO(fifos *cio.FIFOSet, containerID, processID string, stdinCloseSync chan struct{}, attachStdio StdioCallback) (cio.IO, error) {
|
|
| 573 | 573 |
io, err := newIOPipe(fifos) |
| 574 | 574 |
if err != nil {
|
| 575 | 575 |
return nil, err |
| ... | ... |
@@ -601,12 +603,12 @@ func (c *client) createIO(fifos *containerd.FIFOSet, containerID, processID stri |
| 601 | 601 |
}) |
| 602 | 602 |
} |
| 603 | 603 |
|
| 604 |
- cio, err := attachStdio(io) |
|
| 604 |
+ rio, err := attachStdio(io) |
|
| 605 | 605 |
if err != nil {
|
| 606 | 606 |
io.Cancel() |
| 607 | 607 |
io.Close() |
| 608 | 608 |
} |
| 609 |
- return cio, err |
|
| 609 |
+ return rio, err |
|
| 610 | 610 |
} |
| 611 | 611 |
|
| 612 | 612 |
func (c *client) processEvent(ctr *container, et EventType, ei EventInfo) {
|
| ... | ... |
@@ -710,21 +712,21 @@ func (c *client) processEventStream(ctx context.Context) {
|
| 710 | 710 |
c.logger.WithField("topic", ev.Topic).Debug("event")
|
| 711 | 711 |
|
| 712 | 712 |
switch t := v.(type) {
|
| 713 |
- case *eventsapi.TaskCreate: |
|
| 713 |
+ case *events.TaskCreate: |
|
| 714 | 714 |
et = EventCreate |
| 715 | 715 |
ei = EventInfo{
|
| 716 | 716 |
ContainerID: t.ContainerID, |
| 717 | 717 |
ProcessID: t.ContainerID, |
| 718 | 718 |
Pid: t.Pid, |
| 719 | 719 |
} |
| 720 |
- case *eventsapi.TaskStart: |
|
| 720 |
+ case *events.TaskStart: |
|
| 721 | 721 |
et = EventStart |
| 722 | 722 |
ei = EventInfo{
|
| 723 | 723 |
ContainerID: t.ContainerID, |
| 724 | 724 |
ProcessID: t.ContainerID, |
| 725 | 725 |
Pid: t.Pid, |
| 726 | 726 |
} |
| 727 |
- case *eventsapi.TaskExit: |
|
| 727 |
+ case *events.TaskExit: |
|
| 728 | 728 |
et = EventExit |
| 729 | 729 |
ei = EventInfo{
|
| 730 | 730 |
ContainerID: t.ContainerID, |
| ... | ... |
@@ -733,32 +735,32 @@ func (c *client) processEventStream(ctx context.Context) {
|
| 733 | 733 |
ExitCode: t.ExitStatus, |
| 734 | 734 |
ExitedAt: t.ExitedAt, |
| 735 | 735 |
} |
| 736 |
- case *eventsapi.TaskOOM: |
|
| 736 |
+ case *events.TaskOOM: |
|
| 737 | 737 |
et = EventOOM |
| 738 | 738 |
ei = EventInfo{
|
| 739 | 739 |
ContainerID: t.ContainerID, |
| 740 | 740 |
OOMKilled: true, |
| 741 | 741 |
} |
| 742 | 742 |
oomKilled = true |
| 743 |
- case *eventsapi.TaskExecAdded: |
|
| 743 |
+ case *events.TaskExecAdded: |
|
| 744 | 744 |
et = EventExecAdded |
| 745 | 745 |
ei = EventInfo{
|
| 746 | 746 |
ContainerID: t.ContainerID, |
| 747 | 747 |
ProcessID: t.ExecID, |
| 748 | 748 |
} |
| 749 |
- case *eventsapi.TaskExecStarted: |
|
| 749 |
+ case *events.TaskExecStarted: |
|
| 750 | 750 |
et = EventExecStarted |
| 751 | 751 |
ei = EventInfo{
|
| 752 | 752 |
ContainerID: t.ContainerID, |
| 753 | 753 |
ProcessID: t.ExecID, |
| 754 | 754 |
Pid: t.Pid, |
| 755 | 755 |
} |
| 756 |
- case *eventsapi.TaskPaused: |
|
| 756 |
+ case *events.TaskPaused: |
|
| 757 | 757 |
et = EventPaused |
| 758 | 758 |
ei = EventInfo{
|
| 759 | 759 |
ContainerID: t.ContainerID, |
| 760 | 760 |
} |
| 761 |
- case *eventsapi.TaskResumed: |
|
| 761 |
+ case *events.TaskResumed: |
|
| 762 | 762 |
et = EventResumed |
| 763 | 763 |
ei = EventInfo{
|
| 764 | 764 |
ContainerID: t.ContainerID, |
| ... | ... |
@@ -8,6 +8,7 @@ import ( |
| 8 | 8 |
"strings" |
| 9 | 9 |
|
| 10 | 10 |
"github.com/containerd/containerd" |
| 11 |
+ "github.com/containerd/containerd/cio" |
|
| 11 | 12 |
"github.com/docker/docker/pkg/idtools" |
| 12 | 13 |
specs "github.com/opencontainers/runtime-spec/specs-go" |
| 13 | 14 |
"github.com/sirupsen/logrus" |
| ... | ... |
@@ -79,8 +80,8 @@ func prepareBundleDir(bundleDir string, ociSpec *specs.Spec) (string, error) {
|
| 79 | 79 |
return p, nil |
| 80 | 80 |
} |
| 81 | 81 |
|
| 82 |
-func newFIFOSet(bundleDir, containerID, processID string, withStdin, withTerminal bool) *containerd.FIFOSet {
|
|
| 83 |
- fifos := &containerd.FIFOSet{
|
|
| 82 |
+func newFIFOSet(bundleDir, containerID, processID string, withStdin, withTerminal bool) *cio.FIFOSet {
|
|
| 83 |
+ fifos := &cio.FIFOSet{
|
|
| 84 | 84 |
Terminal: withTerminal, |
| 85 | 85 |
Out: filepath.Join(bundleDir, processID+"-stdout"), |
| 86 | 86 |
} |
| ... | ... |
@@ -96,7 +97,7 @@ func newFIFOSet(bundleDir, containerID, processID string, withStdin, withTermina |
| 96 | 96 |
return fifos |
| 97 | 97 |
} |
| 98 | 98 |
|
| 99 |
-func rmFIFOSet(fset *containerd.FIFOSet) {
|
|
| 99 |
+func rmFIFOSet(fset *cio.FIFOSet) {
|
|
| 100 | 100 |
for _, fn := range []string{fset.Out, fset.In, fset.Err} {
|
| 101 | 101 |
if fn != "" {
|
| 102 | 102 |
if err := os.RemoveAll(fn); err != nil {
|
| ... | ... |
@@ -3,7 +3,7 @@ package libcontainerd |
| 3 | 3 |
import ( |
| 4 | 4 |
"fmt" |
| 5 | 5 |
|
| 6 |
- "github.com/containerd/containerd" |
|
| 6 |
+ "github.com/containerd/containerd/cio" |
|
| 7 | 7 |
"github.com/containerd/containerd/windows/hcsshimtypes" |
| 8 | 8 |
specs "github.com/opencontainers/runtime-spec/specs-go" |
| 9 | 9 |
"github.com/pkg/errors" |
| ... | ... |
@@ -35,8 +35,8 @@ func pipeName(containerID, processID, name string) string {
|
| 35 | 35 |
return fmt.Sprintf(`\\.\pipe\containerd-%s-%s-%s`, containerID, processID, name) |
| 36 | 36 |
} |
| 37 | 37 |
|
| 38 |
-func newFIFOSet(bundleDir, containerID, processID string, withStdin, withTerminal bool) *containerd.FIFOSet {
|
|
| 39 |
- fifos := &containerd.FIFOSet{
|
|
| 38 |
+func newFIFOSet(bundleDir, containerID, processID string, withStdin, withTerminal bool) *cio.FIFOSet {
|
|
| 39 |
+ fifos := &cio.FIFOSet{
|
|
| 40 | 40 |
Terminal: withTerminal, |
| 41 | 41 |
Out: pipeName(containerID, processID, "stdout"), |
| 42 | 42 |
} |
| ... | ... |
@@ -1,9 +1,9 @@ |
| 1 | 1 |
package libcontainerd |
| 2 | 2 |
|
| 3 |
-import "github.com/containerd/containerd" |
|
| 3 |
+import "github.com/containerd/containerd/cio" |
|
| 4 | 4 |
|
| 5 | 5 |
// Config returns the containerd.IOConfig of this pipe set |
| 6 |
-func (p *IOPipe) Config() containerd.IOConfig {
|
|
| 6 |
+func (p *IOPipe) Config() cio.Config {
|
|
| 7 | 7 |
return p.config |
| 8 | 8 |
} |
| 9 | 9 |
|
| ... | ... |
@@ -7,12 +7,12 @@ import ( |
| 7 | 7 |
"io" |
| 8 | 8 |
"syscall" |
| 9 | 9 |
|
| 10 |
- "github.com/containerd/containerd" |
|
| 10 |
+ "github.com/containerd/containerd/cio" |
|
| 11 | 11 |
"github.com/containerd/fifo" |
| 12 | 12 |
"github.com/pkg/errors" |
| 13 | 13 |
) |
| 14 | 14 |
|
| 15 |
-func newIOPipe(fifos *containerd.FIFOSet) (*IOPipe, error) {
|
|
| 15 |
+func newIOPipe(fifos *cio.FIFOSet) (*IOPipe, error) {
|
|
| 16 | 16 |
var ( |
| 17 | 17 |
err error |
| 18 | 18 |
ctx, cancel = context.WithCancel(context.Background()) |
| ... | ... |
@@ -20,7 +20,7 @@ func newIOPipe(fifos *containerd.FIFOSet) (*IOPipe, error) {
|
| 20 | 20 |
iop = &IOPipe{
|
| 21 | 21 |
Terminal: fifos.Terminal, |
| 22 | 22 |
cancel: cancel, |
| 23 |
- config: containerd.IOConfig{
|
|
| 23 |
+ config: cio.Config{
|
|
| 24 | 24 |
Terminal: fifos.Terminal, |
| 25 | 25 |
Stdin: fifos.In, |
| 26 | 26 |
Stdout: fifos.Out, |
| ... | ... |
@@ -7,7 +7,7 @@ import ( |
| 7 | 7 |
"sync" |
| 8 | 8 |
|
| 9 | 9 |
winio "github.com/Microsoft/go-winio" |
| 10 |
- "github.com/containerd/containerd" |
|
| 10 |
+ "github.com/containerd/containerd/cio" |
|
| 11 | 11 |
"github.com/pkg/errors" |
| 12 | 12 |
) |
| 13 | 13 |
|
| ... | ... |
@@ -90,7 +90,7 @@ func (wp *winpipe) Close() error {
|
| 90 | 90 |
} |
| 91 | 91 |
} |
| 92 | 92 |
|
| 93 |
-func newIOPipe(fifos *containerd.FIFOSet) (*IOPipe, error) {
|
|
| 93 |
+func newIOPipe(fifos *cio.FIFOSet) (*IOPipe, error) {
|
|
| 94 | 94 |
var ( |
| 95 | 95 |
err error |
| 96 | 96 |
ctx, cancel = context.WithCancel(context.Background()) |
| ... | ... |
@@ -98,7 +98,7 @@ func newIOPipe(fifos *containerd.FIFOSet) (*IOPipe, error) {
|
| 98 | 98 |
iop = &IOPipe{
|
| 99 | 99 |
Terminal: fifos.Terminal, |
| 100 | 100 |
cancel: cancel, |
| 101 |
- config: containerd.IOConfig{
|
|
| 101 |
+ config: cio.Config{
|
|
| 102 | 102 |
Terminal: fifos.Terminal, |
| 103 | 103 |
Stdin: fifos.In, |
| 104 | 104 |
Stdout: fifos.Out, |
| ... | ... |
@@ -27,7 +27,7 @@ type subreaper bool |
| 27 | 27 |
|
| 28 | 28 |
func (s subreaper) Apply(r Remote) error {
|
| 29 | 29 |
if remote, ok := r.(*remote); ok {
|
| 30 |
- remote.Subreaper = bool(s) |
|
| 30 |
+ remote.NoSubreaper = !bool(s) |
|
| 31 | 31 |
return nil |
| 32 | 32 |
} |
| 33 | 33 |
return fmt.Errorf("WithSubreaper option not supported for this remote")
|
| ... | ... |
@@ -6,6 +6,7 @@ import ( |
| 6 | 6 |
"time" |
| 7 | 7 |
|
| 8 | 8 |
"github.com/containerd/containerd" |
| 9 |
+ "github.com/containerd/containerd/cio" |
|
| 9 | 10 |
"github.com/opencontainers/runtime-spec/specs-go" |
| 10 | 11 |
) |
| 11 | 12 |
|
| ... | ... |
@@ -106,7 +107,7 @@ type Client interface {
|
| 106 | 106 |
} |
| 107 | 107 |
|
| 108 | 108 |
// StdioCallback is called to connect a container or process stdio. |
| 109 |
-type StdioCallback func(*IOPipe) (containerd.IO, error) |
|
| 109 |
+type StdioCallback func(*IOPipe) (cio.IO, error) |
|
| 110 | 110 |
|
| 111 | 111 |
// IOPipe contains the stdio streams. |
| 112 | 112 |
type IOPipe struct {
|
| ... | ... |
@@ -116,7 +117,7 @@ type IOPipe struct {
|
| 116 | 116 |
Terminal bool // Whether stderr is connected on Windows |
| 117 | 117 |
|
| 118 | 118 |
cancel context.CancelFunc |
| 119 |
- config containerd.IOConfig |
|
| 119 |
+ config cio.Config |
|
| 120 | 120 |
} |
| 121 | 121 |
|
| 122 | 122 |
// ServerVersion contains version information as retrieved from the |
| ... | ... |
@@ -6,8 +6,8 @@ import ( |
| 6 | 6 |
"path/filepath" |
| 7 | 7 |
"sync" |
| 8 | 8 |
|
| 9 |
- "github.com/containerd/containerd" |
|
| 10 |
- "github.com/containerd/containerd/linux/runcopts" |
|
| 9 |
+ "github.com/containerd/containerd/cio" |
|
| 10 |
+ "github.com/containerd/containerd/linux/runctypes" |
|
| 11 | 11 |
"github.com/docker/docker/api/errdefs" |
| 12 | 12 |
"github.com/docker/docker/libcontainerd" |
| 13 | 13 |
"github.com/opencontainers/runtime-spec/specs-go" |
| ... | ... |
@@ -46,7 +46,7 @@ type Executor struct {
|
| 46 | 46 |
|
| 47 | 47 |
// Create creates a new container |
| 48 | 48 |
func (e *Executor) Create(id string, spec specs.Spec, stdout, stderr io.WriteCloser) error {
|
| 49 |
- opts := runcopts.RuncOptions{
|
|
| 49 |
+ opts := runctypes.RuncOptions{
|
|
| 50 | 50 |
RuntimeRoot: filepath.Join(e.rootDir, "runtime-root"), |
| 51 | 51 |
} |
| 52 | 52 |
ctx := context.Background() |
| ... | ... |
@@ -110,37 +110,37 @@ func (e *Executor) ProcessEvent(id string, et libcontainerd.EventType, ei libcon |
| 110 | 110 |
return nil |
| 111 | 111 |
} |
| 112 | 112 |
|
| 113 |
-type cio struct {
|
|
| 114 |
- containerd.IO |
|
| 113 |
+type rio struct {
|
|
| 114 |
+ cio.IO |
|
| 115 | 115 |
|
| 116 | 116 |
wg sync.WaitGroup |
| 117 | 117 |
} |
| 118 | 118 |
|
| 119 |
-func (c *cio) Wait() {
|
|
| 119 |
+func (c *rio) Wait() {
|
|
| 120 | 120 |
c.wg.Wait() |
| 121 | 121 |
c.IO.Wait() |
| 122 | 122 |
} |
| 123 | 123 |
|
| 124 | 124 |
func attachStreamsFunc(stdout, stderr io.WriteCloser) libcontainerd.StdioCallback {
|
| 125 |
- return func(iop *libcontainerd.IOPipe) (containerd.IO, error) {
|
|
| 125 |
+ return func(iop *libcontainerd.IOPipe) (cio.IO, error) {
|
|
| 126 | 126 |
if iop.Stdin != nil {
|
| 127 | 127 |
iop.Stdin.Close() |
| 128 | 128 |
// closing stdin shouldn't be needed here, it should never be open |
| 129 | 129 |
panic("plugin stdin shouldn't have been created!")
|
| 130 | 130 |
} |
| 131 | 131 |
|
| 132 |
- cio := &cio{IO: iop}
|
|
| 133 |
- cio.wg.Add(2) |
|
| 132 |
+ rio := &rio{IO: iop}
|
|
| 133 |
+ rio.wg.Add(2) |
|
| 134 | 134 |
go func() {
|
| 135 | 135 |
io.Copy(stdout, iop.Stdout) |
| 136 | 136 |
stdout.Close() |
| 137 |
- cio.wg.Done() |
|
| 137 |
+ rio.wg.Done() |
|
| 138 | 138 |
}() |
| 139 | 139 |
go func() {
|
| 140 | 140 |
io.Copy(stderr, iop.Stderr) |
| 141 | 141 |
stderr.Close() |
| 142 |
- cio.wg.Done() |
|
| 142 |
+ rio.wg.Done() |
|
| 143 | 143 |
}() |
| 144 |
- return cio, nil |
|
| 144 |
+ return rio, nil |
|
| 145 | 145 |
} |
| 146 | 146 |
} |