Use strongly typed errors to set HTTP status codes. Error interfaces are defined in the api/errors package and errors returned from controllers are checked against these interfaces. Errors can be wraeped in a pkg/errors.Causer, as long as somewhere in the line of causes one of the interfaces is implemented. The special error interfaces take precedence over Causer, meaning if both Causer and one of the new error interfaces are implemented, the Causer is not traversed. Signed-off-by: Brian Goff <cpuguy83@gmail.com> Upstream-commit: ebcb7d6b406fe50ea9a237c73004d75884184c33 Component: engine
80 lines
3.5 KiB
Go
80 lines
3.5 KiB
Go
package container
|
|
|
|
import (
|
|
"io"
|
|
|
|
"golang.org/x/net/context"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types/backend"
|
|
"github.com/docker/docker/api/types/container"
|
|
"github.com/docker/docker/api/types/filters"
|
|
containerpkg "github.com/docker/docker/container"
|
|
"github.com/docker/docker/pkg/archive"
|
|
)
|
|
|
|
// execBackend includes functions to implement to provide exec functionality.
|
|
type execBackend interface {
|
|
ContainerExecCreate(name string, config *types.ExecConfig) (string, error)
|
|
ContainerExecInspect(id string) (*backend.ExecInspect, error)
|
|
ContainerExecResize(name string, height, width int) error
|
|
ContainerExecStart(ctx context.Context, name string, stdin io.ReadCloser, stdout io.Writer, stderr io.Writer) error
|
|
ExecExists(name string) (bool, error)
|
|
}
|
|
|
|
// copyBackend includes functions to implement to provide container copy functionality.
|
|
type copyBackend interface {
|
|
ContainerArchivePath(name string, path string) (content io.ReadCloser, stat *types.ContainerPathStat, err error)
|
|
ContainerCopy(name string, res string) (io.ReadCloser, error)
|
|
ContainerExport(name string, out io.Writer) error
|
|
ContainerExtractToDir(name, path string, copyUIDGID, noOverwriteDirNonDir bool, content io.Reader) error
|
|
ContainerStatPath(name string, path string) (stat *types.ContainerPathStat, err error)
|
|
}
|
|
|
|
// stateBackend includes functions to implement to provide container state lifecycle functionality.
|
|
type stateBackend interface {
|
|
ContainerCreate(config types.ContainerCreateConfig) (container.ContainerCreateCreatedBody, error)
|
|
ContainerKill(name string, sig uint64) error
|
|
ContainerPause(name string) error
|
|
ContainerRename(oldName, newName string) error
|
|
ContainerResize(name string, height, width int) error
|
|
ContainerRestart(name string, seconds *int) error
|
|
ContainerRm(name string, config *types.ContainerRmConfig) error
|
|
ContainerStart(name string, hostConfig *container.HostConfig, checkpoint string, checkpointDir string) error
|
|
ContainerStop(name string, seconds *int) error
|
|
ContainerUnpause(name string) error
|
|
ContainerUpdate(name string, hostConfig *container.HostConfig) (container.ContainerUpdateOKBody, error)
|
|
ContainerWait(ctx context.Context, name string, condition containerpkg.WaitCondition) (<-chan containerpkg.StateStatus, error)
|
|
}
|
|
|
|
// monitorBackend includes functions to implement to provide containers monitoring functionality.
|
|
type monitorBackend interface {
|
|
ContainerChanges(name string) ([]archive.Change, error)
|
|
ContainerInspect(name string, size bool, version string) (interface{}, error)
|
|
ContainerLogs(ctx context.Context, name string, config *types.ContainerLogsOptions) (msgs <-chan *backend.LogMessage, tty bool, err error)
|
|
ContainerStats(ctx context.Context, name string, config *backend.ContainerStatsConfig) error
|
|
ContainerTop(name string, psArgs string) (*container.ContainerTopOKBody, error)
|
|
|
|
Containers(config *types.ContainerListOptions) ([]*types.Container, error)
|
|
}
|
|
|
|
// attachBackend includes function to implement to provide container attaching functionality.
|
|
type attachBackend interface {
|
|
ContainerAttach(name string, c *backend.ContainerAttachConfig) error
|
|
}
|
|
|
|
// systemBackend includes functions to implement to provide system wide containers functionality
|
|
type systemBackend interface {
|
|
ContainersPrune(ctx context.Context, pruneFilters filters.Args) (*types.ContainersPruneReport, error)
|
|
}
|
|
|
|
// Backend is all the methods that need to be implemented to provide container specific functionality.
|
|
type Backend interface {
|
|
execBackend
|
|
copyBackend
|
|
stateBackend
|
|
monitorBackend
|
|
attachBackend
|
|
systemBackend
|
|
}
|