dotcloud/docker

View on GitHub
libcontainerd/types/types.go

Summary

Maintainability
A
0 mins
Test Coverage
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)