Backends can receive arguments

This commit is contained in:
Solomon Hykes 2014-05-01 18:32:06 -07:00
parent c22a80a071
commit 9acaf7597f
1 changed files with 31 additions and 4 deletions

View File

@ -6,6 +6,8 @@ import (
"github.com/docker/swarmd/backends"
"github.com/dotcloud/docker/api/server"
"github.com/dotcloud/docker/engine"
"github.com/flynn/go-shlex"
"io"
"os"
"strings"
"time"
@ -36,10 +38,13 @@ func cmdDaemon(c *cli.Context) {
// multiplexes across all backends (with routing / filtering
// logic along the way).
back := backends.New()
backendName := c.String("backend")
fmt.Printf("Loading backend '%s'\n", backendName)
if err := back.Job(backendName).Run(); err != nil {
Fatalf("%s: %v\n", backendName, err)
bName, bArgs, err := parseCmd(c.String("backend"))
if err != nil {
Fatalf("%v", err)
}
fmt.Printf("---> Loading backend '%s'\n", strings.Join(append([]string{bName}, bArgs...), " "))
if err := back.Job(bName, bArgs...).Run(); err != nil {
Fatalf("%s: %v\n", bName, err)
}
// Register the API entrypoint
@ -75,6 +80,28 @@ func cmdDaemon(c *cli.Context) {
<-make(chan struct{})
}
func parseCmd(txt string) (string, []string, error) {
l, err := shlex.NewLexer(strings.NewReader(txt))
if err != nil {
return "", nil, err
}
var cmd []string
for {
word, err := l.NextWord()
if err == io.EOF {
break
}
if err != nil {
return "", nil, err
}
cmd = append(cmd, word)
}
if len(cmd) == 0 {
return "", nil, fmt.Errorf("parse error: empty command")
}
return cmd[0], cmd[1:], nil
}
func Fatalf(msg string, args ...interface{}) {
if !strings.HasSuffix(msg, "\n") {
msg = msg + "\n"