Forráskód Böngészése

refactor attach to not use internal data structures

 - refactor to make it easier to split the api in the future

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
Morgan Bauer 9 éve
szülő
commit
8aef1a33eb
2 módosított fájl, 19 hozzáadás és 10 törlés
  1. 8 8
      api/server/container.go
  2. 11 2
      daemon/attach.go

+ 8 - 8
api/server/container.go

@@ -444,10 +444,10 @@ func (s *Server) postContainersAttach(ctx context.Context, w http.ResponseWriter
 	if vars == nil {
 		return fmt.Errorf("Missing parameter")
 	}
+	containerName := vars["name"]
 
-	cont, err := s.daemon.Get(vars["name"])
-	if err != nil {
-		return err
+	if !s.daemon.Exists(containerName) {
+		return derr.ErrorCodeNoSuchContainer.WithArgs(containerName)
 	}
 
 	inStream, outStream, err := hijackServer(w)
@@ -472,7 +472,7 @@ func (s *Server) postContainersAttach(ctx context.Context, w http.ResponseWriter
 		Stream:    boolValue(r, "stream"),
 	}
 
-	if err := s.daemon.ContainerAttachWithLogs(cont, attachWithLogsConfig); err != nil {
+	if err := s.daemon.ContainerAttachWithLogs(containerName, attachWithLogsConfig); err != nil {
 		fmt.Fprintf(outStream, "Error attaching: %s\n", err)
 	}
 
@@ -486,10 +486,10 @@ func (s *Server) wsContainersAttach(ctx context.Context, w http.ResponseWriter,
 	if vars == nil {
 		return fmt.Errorf("Missing parameter")
 	}
+	containerName := vars["name"]
 
-	cont, err := s.daemon.Get(vars["name"])
-	if err != nil {
-		return err
+	if !s.daemon.Exists(containerName) {
+		return derr.ErrorCodeNoSuchContainer.WithArgs(containerName)
 	}
 
 	h := websocket.Handler(func(ws *websocket.Conn) {
@@ -503,7 +503,7 @@ func (s *Server) wsContainersAttach(ctx context.Context, w http.ResponseWriter,
 			Stream:    boolValue(r, "stream"),
 		}
 
-		if err := s.daemon.ContainerWsAttachWithLogs(cont, wsAttachWithLogsConfig); err != nil {
+		if err := s.daemon.ContainerWsAttachWithLogs(containerName, wsAttachWithLogsConfig); err != nil {
 			logrus.Errorf("Error attaching websocket: %s", err)
 		}
 	})

+ 11 - 2
daemon/attach.go

@@ -15,7 +15,12 @@ type ContainerAttachWithLogsConfig struct {
 }
 
 // ContainerAttachWithLogs attaches to logs according to the config passed in. See ContainerAttachWithLogsConfig.
-func (daemon *Daemon) ContainerAttachWithLogs(container *Container, c *ContainerAttachWithLogsConfig) error {
+func (daemon *Daemon) ContainerAttachWithLogs(prefixOrName string, c *ContainerAttachWithLogsConfig) error {
+	container, err := daemon.Get(prefixOrName)
+	if err != nil {
+		return err
+	}
+
 	var errStream io.Writer
 
 	if !container.Config.Tty {
@@ -50,6 +55,10 @@ type ContainerWsAttachWithLogsConfig struct {
 }
 
 // ContainerWsAttachWithLogs websocket connection
-func (daemon *Daemon) ContainerWsAttachWithLogs(container *Container, c *ContainerWsAttachWithLogsConfig) error {
+func (daemon *Daemon) ContainerWsAttachWithLogs(prefixOrName string, c *ContainerWsAttachWithLogsConfig) error {
+	container, err := daemon.Get(prefixOrName)
+	if err != nil {
+		return err
+	}
 	return container.attachWithLogs(c.InStream, c.OutStream, c.ErrStream, c.Logs, c.Stream)
 }