From 3bb782faf1a882330ccf5a5a693ed3ca5967c183 Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Thu, 5 Jun 2014 12:40:26 -0700 Subject: [PATCH] Add support for multiple backends piped together Docker-DCO-1.1-Signed-off-by: Ben Firshman (github: bfirsh) --- swarmd/swarmd.go | 53 +++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/swarmd/swarmd.go b/swarmd/swarmd.go index ef4040f752..9d7ddb0a08 100644 --- a/swarmd/swarmd.go +++ b/swarmd/swarmd.go @@ -43,30 +43,37 @@ func cmdDaemon(c *cli.Context) { fmt.Println(strings.Join(names, "\n")) return } - bName, bArgs, err := parseCmd(c.Args()[0]) - if err != nil { - Fatalf("parse: %v", err) + var previousInstanceIn beam.Receiver + for _, backendArg := range c.Args() { + bName, bArgs, err := parseCmd(backendArg) + if err != nil { + Fatalf("parse: %v", err) + } + fmt.Printf("---> Loading backend '%s'\n", strings.Join(append([]string{bName}, bArgs...), " ")) + _, backend, err := back.Attach(bName) + if err != nil { + Fatalf("%s: %v\n", bName, err) + } + fmt.Printf("---> Spawning\n") + instance, err := backend.Spawn(bArgs...) + if err != nil { + Fatalf("spawn %s: %v\n", bName, err) + } + fmt.Printf("---> Attaching\n") + instanceIn, instanceOut, err := instance.Attach("") + if err != nil { + Fatalf("attach: %v", err) + } + fmt.Printf("---> Starting\n") + if err := instance.Start(); err != nil { + Fatalf("start: %v", err) + } + if previousInstanceIn != nil { + go beam.Copy(instanceOut, previousInstanceIn) + } + previousInstanceIn = instanceIn } - fmt.Printf("---> Loading backend '%s'\n", strings.Join(append([]string{bName}, bArgs...), " ")) - _, backend, err := back.Attach(bName) - if err != nil { - Fatalf("%s: %v\n", bName, err) - } - fmt.Printf("---> Spawning\n") - instance, err := backend.Spawn(bArgs...) - if err != nil { - Fatalf("spawn %s: %v\n", bName, err) - } - fmt.Printf("---> Attaching\n") - instanceIn, _, err := instance.Attach("") - if err != nil { - Fatalf("attach: %v", err) - } - fmt.Printf("---> Starting\n") - if err := instance.Start(); err != nil { - Fatalf("start: %v", err) - } - _, err = beam.Copy(app, instanceIn) + _, err := beam.Copy(app, previousInstanceIn) if err != nil { Fatalf("copy: %v", err) }