Browse Source

Split container backend into several specialized interfaces.

Signed-off-by: David Calavera <david.calavera@gmail.com>
David Calavera 9 years ago
parent
commit
85c3c6865e
1 changed files with 41 additions and 18 deletions
  1. 41 18
      api/server/router/container/backend.go

+ 41 - 18
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
+}