Browse code

engine.Sender and engine.Receiver support stdin

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)

Solomon Hykes authored on 2014/04/26 08:47:03
Showing 1 changed files
... ...
@@ -46,6 +46,12 @@ func (s *Sender) Handle(job *Job) Status {
46 46
 		tasks.Done()
47 47
 		return nil
48 48
 	})
49
+	r.NewRoute().KeyStartsWith("cmd", "log", "stdin").HasAttachment().Handler(func(p []byte, stdin *os.File) error {
50
+		tasks.Add(1)
51
+		io.Copy(stdin, job.Stdin)
52
+		tasks.Done()
53
+		return nil
54
+	})
49 55
 	var status int
50 56
 	r.NewRoute().KeyStartsWith("cmd", "status").Handler(func(p []byte, f *os.File) error {
51 57
 		cmd := data.Message(p).Get("cmd")
... ...
@@ -96,6 +102,11 @@ func (rcv *Receiver) Run() error {
96 96
 			return err
97 97
 		}
98 98
 		job.Stderr.Add(stderr)
99
+		stdin, err := beam.SendPipe(peer, data.Empty().Set("cmd", "log", "stdin").Bytes())
100
+		if err != nil {
101
+			return err
102
+		}
103
+		job.Stdin.Add(stdin)
99 104
 		// ignore error because we pass the raw status
100 105
 		job.Run()
101 106
 		err = peer.Send(data.Empty().Set("cmd", "status", fmt.Sprintf("%d", job.status)).Bytes(), nil)