659d7b190f
Split task creation and start into two separate method calls in the libcontainerd API. Clients now have the opportunity to inspect the freshly-created task and customize its runtime environment before starting execution of the user-specified binary. Signed-off-by: Cory Snider <csnider@mirantis.com>
103 lines
3.9 KiB
Go
103 lines
3.9 KiB
Go
package types // import "github.com/docker/docker/libcontainerd/types"
|
|
|
|
import (
|
|
"context"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/containerd/containerd"
|
|
"github.com/containerd/containerd/cio"
|
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
|
)
|
|
|
|
// EventType represents a possible event from libcontainerd
|
|
type EventType string
|
|
|
|
// Event constants used when reporting events
|
|
const (
|
|
EventUnknown EventType = "unknown"
|
|
EventExit EventType = "exit"
|
|
EventOOM EventType = "oom"
|
|
EventCreate EventType = "create"
|
|
EventStart EventType = "start"
|
|
EventExecAdded EventType = "exec-added"
|
|
EventExecStarted EventType = "exec-started"
|
|
EventPaused EventType = "paused"
|
|
EventResumed EventType = "resumed"
|
|
)
|
|
|
|
// EventInfo contains the event info
|
|
type EventInfo struct {
|
|
ContainerID string
|
|
ProcessID string
|
|
Pid uint32
|
|
ExitCode uint32
|
|
ExitedAt time.Time
|
|
Error error
|
|
}
|
|
|
|
// Backend defines callbacks that the client of the library needs to implement.
|
|
type Backend interface {
|
|
ProcessEvent(containerID string, event EventType, ei EventInfo) error
|
|
}
|
|
|
|
// Process of a container
|
|
type Process interface {
|
|
// Pid is the system specific process id
|
|
Pid() uint32
|
|
// Kill sends the provided signal to the process
|
|
Kill(ctx context.Context, signal syscall.Signal) error
|
|
// Resize changes the width and height of the process's terminal
|
|
Resize(ctx context.Context, width, height uint32) error
|
|
// Delete removes the process and any resources allocated returning the exit status
|
|
Delete(context.Context) (*containerd.ExitStatus, error)
|
|
}
|
|
|
|
// Client provides access to containerd features.
|
|
type Client interface {
|
|
Version(ctx context.Context) (containerd.Version, error)
|
|
// LoadContainer loads the metadata for a container from containerd.
|
|
LoadContainer(ctx context.Context, containerID string) (Container, error)
|
|
// NewContainer creates a new containerd container.
|
|
NewContainer(ctx context.Context, containerID string, spec *specs.Spec, shim string, runtimeOptions interface{}, opts ...containerd.NewContainerOpts) (Container, error)
|
|
}
|
|
|
|
// Container provides access to a containerd container.
|
|
type Container interface {
|
|
NewTask(ctx context.Context, checkpointDir string, withStdin bool, attachStdio StdioCallback) (Task, error)
|
|
Task(ctx context.Context) (Task, error)
|
|
// AttachTask returns the current task for the container and reattaches
|
|
// to the IO for the running task. If no task exists for the container
|
|
// a NotFound error is returned.
|
|
//
|
|
// Clients must make sure that only one reader is attached to the task.
|
|
AttachTask(ctx context.Context, attachStdio StdioCallback) (Task, error)
|
|
// Delete removes the container and associated resources
|
|
Delete(context.Context) error
|
|
}
|
|
|
|
// Task provides access to a running containerd container.
|
|
type Task interface {
|
|
Process
|
|
// Start begins execution of the task
|
|
Start(context.Context) error
|
|
// Pause suspends the execution of the task
|
|
Pause(context.Context) error
|
|
// Resume the execution of the task
|
|
Resume(context.Context) error
|
|
Stats(ctx context.Context) (*Stats, error)
|
|
// Pids returns a list of system specific process ids inside the task
|
|
Pids(context.Context) ([]containerd.ProcessInfo, error)
|
|
Summary(ctx context.Context) ([]Summary, error)
|
|
// ForceDelete forcefully kills the task's processes and deletes the task
|
|
ForceDelete(context.Context) error
|
|
// Status returns the executing status of the task
|
|
Status(ctx context.Context) (containerd.Status, error)
|
|
// Exec creates and starts a new process inside the task
|
|
Exec(ctx context.Context, processID string, spec *specs.Process, withStdin bool, attachStdio StdioCallback) (Process, error)
|
|
UpdateResources(ctx context.Context, resources *Resources) error
|
|
CreateCheckpoint(ctx context.Context, checkpointDir string, exit bool) error
|
|
}
|
|
|
|
// StdioCallback is called to connect a container or process stdio.
|
|
type StdioCallback func(io *cio.DirectIO) (cio.IO, error)
|