From 85c3c6865ef4eb334f9fbdec6dd270d525b68914 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Tue, 24 Nov 2015 13:35:02 -0500 Subject: [PATCH] Split container backend into several specialized interfaces. Signed-off-by: David Calavera --- api/server/router/container/backend.go | 59 ++++++++++++++++++-------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/api/server/router/container/backend.go b/api/server/router/container/backend.go index 97ba7c8611..3e719774d5 100644 --- a/api/server/router/container/backend.go +++ b/api/server/router/container/backend.go @@ -1,5 +1,3 @@ -// +build !windows - package container import ( @@ -14,38 +12,63 @@ import ( "github.com/docker/docker/runconfig" ) -// Backend is all the methods that need to be implemented to provide -// container specific functionality -type Backend interface { - ContainerArchivePath(name string, path string) (content io.ReadCloser, stat *types.ContainerPathStat, err error) - ContainerAttachWithLogs(prefixOrName string, c *daemon.ContainerAttachWithLogsConfig) error - ContainerChanges(name string) ([]archive.Change, error) - ContainerCopy(name string, res string) (io.ReadCloser, error) - ContainerCreate(params *daemon.ContainerCreateConfig) (types.ContainerCreateResponse, error) +// execBackend includes functions to implement to provide exec functionality. +type execBackend interface { ContainerExecCreate(config *runconfig.ExecConfig) (string, error) ContainerExecInspect(id string) (*exec.Config, error) ContainerExecResize(name string, height, width int) error ContainerExecStart(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, noOverwriteDirNonDir bool, content io.Reader) error - ContainerInspect(name string, size bool, version version.Version) (interface{}, 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(params *daemon.ContainerCreateConfig) (types.ContainerCreateResponse, error) ContainerKill(name string, sig uint64) error - ContainerLogs(containerName string, config *daemon.ContainerLogsConfig) 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 *daemon.ContainerRmConfig) error - Containers(config *daemon.ContainersConfig) ([]*types.Container, error) ContainerStart(name string, hostConfig *runconfig.HostConfig) error - ContainerStatPath(name string, path string) (stat *types.ContainerPathStat, err error) - ContainerStats(prefixOrName string, config *daemon.ContainerStatsConfig) error ContainerStop(name string, seconds int) error - ContainerTop(name string, psArgs string) (*types.ContainerProcessList, error) ContainerUnpause(name string) error ContainerWait(name string, timeout time.Duration) (int, error) - ContainerWsAttachWithLogs(prefixOrName string, c *daemon.ContainerWsAttachWithLogsConfig) error - ExecExists(name string) (bool, error) Exists(id string) bool IsPaused(id string) bool } + +// 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 version.Version) (interface{}, error) + ContainerLogs(name string, config *daemon.ContainerLogsConfig) error + ContainerStats(name string, config *daemon.ContainerStatsConfig) error + ContainerTop(name string, psArgs string) (*types.ContainerProcessList, error) + + Containers(config *daemon.ContainersConfig) ([]*types.Container, error) +} + +// attachBackend includes function to implement to provide container attaching functionality. +type attachBackend interface { + ContainerAttachWithLogs(name string, c *daemon.ContainerAttachWithLogsConfig) error + ContainerWsAttachWithLogs(name string, c *daemon.ContainerWsAttachWithLogsConfig) error +} + +// Backend is all the methods that need to be implemented to provide container specific functionality. +type Backend interface { + execBackend + copyBackend + stateBackend + monitorBackend + attachBackend +}