843fcc96f7
The ID of the task is known at the time that the FIFOs need to be created (it's passed into the IO-creator callback, and is also the same as the container ID) so there is no need to hardcode it to "init". Name the FIFOs after the task ID to be consistent with the FIFO names of exec'ed processes. Delete the now-unused InitProcessName constant so it can never again be used in place of a task/process ID. Signed-off-by: Cory Snider <csnider@mirantis.com>
101 lines
3.8 KiB
Go
101 lines
3.8 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 {
|
|
Start(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
|
|
// 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)
|