Explorar o código

engine.Sender and engine.Receiver support stdin

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
Solomon Hykes %!s(int64=11) %!d(string=hai) anos
pai
achega
b63b98ee27
Modificáronse 1 ficheiros con 11 adicións e 0 borrados
  1. 11 0
      engine/remote.go

+ 11 - 0
engine/remote.go

@@ -46,6 +46,12 @@ func (s *Sender) Handle(job *Job) Status {
 		tasks.Done()
 		return nil
 	})
+	r.NewRoute().KeyStartsWith("cmd", "log", "stdin").HasAttachment().Handler(func(p []byte, stdin *os.File) error {
+		tasks.Add(1)
+		io.Copy(stdin, job.Stdin)
+		tasks.Done()
+		return nil
+	})
 	var status int
 	r.NewRoute().KeyStartsWith("cmd", "status").Handler(func(p []byte, f *os.File) error {
 		cmd := data.Message(p).Get("cmd")
@@ -96,6 +102,11 @@ func (rcv *Receiver) Run() error {
 			return err
 		}
 		job.Stderr.Add(stderr)
+		stdin, err := beam.SendPipe(peer, data.Empty().Set("cmd", "log", "stdin").Bytes())
+		if err != nil {
+			return err
+		}
+		job.Stdin.Add(stdin)
 		// ignore error because we pass the raw status
 		job.Run()
 		err = peer.Send(data.Empty().Set("cmd", "status", fmt.Sprintf("%d", job.status)).Bytes(), nil)