Jelajahi Sumber

Split container backend into several specialized interfaces.

Signed-off-by: David Calavera <david.calavera@gmail.com>
David Calavera 9 tahun lalu
induk
melakukan
85c3c6865e
1 mengubah file dengan 41 tambahan dan 18 penghapusan
  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
 package container
 
 
 import (
 import (
@@ -14,38 +12,63 @@ import (
 	"github.com/docker/docker/runconfig"
 	"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)
 	ContainerExecCreate(config *runconfig.ExecConfig) (string, error)
 	ContainerExecInspect(id string) (*exec.Config, error)
 	ContainerExecInspect(id string) (*exec.Config, error)
 	ContainerExecResize(name string, height, width int) error
 	ContainerExecResize(name string, height, width int) error
 	ContainerExecStart(name string, stdin io.ReadCloser, stdout io.Writer, stderr io.Writer) 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
 	ContainerExport(name string, out io.Writer) error
 	ContainerExtractToDir(name, path string, noOverwriteDirNonDir bool, content io.Reader) 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
 	ContainerKill(name string, sig uint64) error
-	ContainerLogs(containerName string, config *daemon.ContainerLogsConfig) error
 	ContainerPause(name string) error
 	ContainerPause(name string) error
 	ContainerRename(oldName, newName string) error
 	ContainerRename(oldName, newName string) error
 	ContainerResize(name string, height, width int) error
 	ContainerResize(name string, height, width int) error
 	ContainerRestart(name string, seconds int) error
 	ContainerRestart(name string, seconds int) error
 	ContainerRm(name string, config *daemon.ContainerRmConfig) error
 	ContainerRm(name string, config *daemon.ContainerRmConfig) error
-	Containers(config *daemon.ContainersConfig) ([]*types.Container, error)
 	ContainerStart(name string, hostConfig *runconfig.HostConfig) 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
 	ContainerStop(name string, seconds int) error
-	ContainerTop(name string, psArgs string) (*types.ContainerProcessList, error)
 	ContainerUnpause(name string) error
 	ContainerUnpause(name string) error
 	ContainerWait(name string, timeout time.Duration) (int, 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
 	Exists(id string) bool
 	IsPaused(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
+}