diff --git a/cli/cli.go b/cli/cli.go new file mode 100644 index 0000000000..a38fc11b3e --- /dev/null +++ b/cli/cli.go @@ -0,0 +1,123 @@ +package cli + +import ( + "fmt" + "os" + "path" + + log "github.com/Sirupsen/logrus" + "github.com/codegangsta/cli" + "github.com/docker/swarm/discovery" + "github.com/docker/swarm/discovery/token" + "github.com/docker/swarm/version" +) + +// Run the Swarm CLI. +func Run() { + app := cli.NewApp() + app.Name = path.Base(os.Args[0]) + app.Usage = "a Docker-native clustering system" + app.Version = version.VERSION + " (" + version.GITCOMMIT + ")" + + app.Author = "" + app.Email = "" + + app.Flags = []cli.Flag{ + cli.BoolFlag{ + Name: "debug", + Usage: "debug mode", + EnvVar: "DEBUG", + }, + + cli.StringFlag{ + Name: "log-level, l", + Value: "info", + Usage: fmt.Sprintf("Log level (options: debug, info, warn, error, fatal, panic)"), + }, + } + + // logs + app.Before = func(c *cli.Context) error { + log.SetOutput(os.Stderr) + level, err := log.ParseLevel(c.String("log-level")) + if err != nil { + log.Fatalf(err.Error()) + } + log.SetLevel(level) + + // If a log level wasn't specified and we are running in debug mode, + // enforce log-level=debug. + if !c.IsSet("log-level") && !c.IsSet("l") && c.Bool("debug") { + log.SetLevel(log.DebugLevel) + } + + return nil + } + + app.Commands = []cli.Command{ + { + Name: "create", + ShortName: "c", + Usage: "create a cluster", + Action: func(c *cli.Context) { + discovery := &token.Discovery{} + discovery.Initialize("", 0) + token, err := discovery.CreateCluster() + if len(c.Args()) != 0 { + log.Fatalf("the `create` command takes no arguments. See '%s create --help'.", c.App.Name) + } + if err != nil { + log.Fatal(err) + } + fmt.Println(token) + }, + }, + { + Name: "list", + ShortName: "l", + Usage: "list nodes in a cluster", + Action: func(c *cli.Context) { + dflag := getDiscovery(c) + if dflag == "" { + log.Fatalf("discovery required to list a cluster. See '%s list --help'.", c.App.Name) + } + + d, err := discovery.New(dflag, 0) + if err != nil { + log.Fatal(err) + } + + nodes, err := d.Fetch() + if err != nil { + log.Fatal(err) + } + for _, node := range nodes { + fmt.Println(node) + } + }, + }, + { + Name: "manage", + ShortName: "m", + Usage: "manage a docker cluster", + Flags: []cli.Flag{ + flStore, + flStrategy, flFilter, + flHosts, flHeartBeat, flOverCommit, + flTLS, flTLSCaCert, flTLSCert, flTLSKey, flTLSVerify, + flEnableCors}, + Action: manage, + }, + { + Name: "join", + ShortName: "j", + Usage: "join a docker cluster", + Flags: []cli.Flag{flAddr, flHeartBeat}, + Action: join, + }, + } + + if err := app.Run(os.Args); err != nil { + log.Fatal(err) + } +} diff --git a/flags.go b/cli/flags.go similarity index 99% rename from flags.go rename to cli/flags.go index 4c7da485a3..ece1c6ddd8 100644 --- a/flags.go +++ b/cli/flags.go @@ -1,4 +1,4 @@ -package main +package cli import ( "os" diff --git a/help.go b/cli/help.go similarity index 98% rename from help.go rename to cli/help.go index 995fe6ca74..049bd0e0b9 100644 --- a/help.go +++ b/cli/help.go @@ -1,4 +1,4 @@ -package main +package cli import ( "os" diff --git a/join.go b/cli/join.go similarity index 98% rename from join.go rename to cli/join.go index aa17d62758..3c5a6c7594 100644 --- a/join.go +++ b/cli/join.go @@ -1,4 +1,4 @@ -package main +package cli import ( "regexp" diff --git a/join_test.go b/cli/join_test.go similarity index 98% rename from join_test.go rename to cli/join_test.go index 8ee9af1e7a..fb093caf62 100644 --- a/join_test.go +++ b/cli/join_test.go @@ -1,4 +1,4 @@ -package main +package cli import ( "testing" diff --git a/manage.go b/cli/manage.go similarity index 99% rename from manage.go rename to cli/manage.go index 8a8dda12cf..62c27c2d98 100644 --- a/manage.go +++ b/cli/manage.go @@ -1,4 +1,4 @@ -package main +package cli import ( "crypto/tls" diff --git a/main.go b/main.go index 63f37e6b68..899d90cb13 100644 --- a/main.go +++ b/main.go @@ -1,127 +1,16 @@ package main import ( - "fmt" - "os" - "path" - - log "github.com/Sirupsen/logrus" - "github.com/codegangsta/cli" - "github.com/docker/swarm/discovery" _ "github.com/docker/swarm/discovery/consul" _ "github.com/docker/swarm/discovery/etcd" _ "github.com/docker/swarm/discovery/file" _ "github.com/docker/swarm/discovery/nodes" - "github.com/docker/swarm/discovery/token" + _ "github.com/docker/swarm/discovery/token" _ "github.com/docker/swarm/discovery/zookeeper" - "github.com/docker/swarm/version" + + "github.com/docker/swarm/cli" ) func main() { - app := cli.NewApp() - app.Name = path.Base(os.Args[0]) - app.Usage = "a Docker-native clustering system" - app.Version = version.VERSION + " (" + version.GITCOMMIT + ")" - - app.Author = "" - app.Email = "" - - app.Flags = []cli.Flag{ - cli.BoolFlag{ - Name: "debug", - Usage: "debug mode", - EnvVar: "DEBUG", - }, - - cli.StringFlag{ - Name: "log-level, l", - Value: "info", - Usage: fmt.Sprintf("Log level (options: debug, info, warn, error, fatal, panic)"), - }, - } - - // logs - app.Before = func(c *cli.Context) error { - log.SetOutput(os.Stderr) - level, err := log.ParseLevel(c.String("log-level")) - if err != nil { - log.Fatalf(err.Error()) - } - log.SetLevel(level) - - // If a log level wasn't specified and we are running in debug mode, - // enforce log-level=debug. - if !c.IsSet("log-level") && !c.IsSet("l") && c.Bool("debug") { - log.SetLevel(log.DebugLevel) - } - - return nil - } - - app.Commands = []cli.Command{ - { - Name: "create", - ShortName: "c", - Usage: "create a cluster", - Action: func(c *cli.Context) { - discovery := &token.Discovery{} - discovery.Initialize("", 0) - token, err := discovery.CreateCluster() - if len(c.Args()) != 0 { - log.Fatalf("the `create` command takes no arguments. See '%s create --help'.", c.App.Name) - } - if err != nil { - log.Fatal(err) - } - fmt.Println(token) - }, - }, - { - Name: "list", - ShortName: "l", - Usage: "list nodes in a cluster", - Action: func(c *cli.Context) { - dflag := getDiscovery(c) - if dflag == "" { - log.Fatalf("discovery required to list a cluster. See '%s list --help'.", c.App.Name) - } - - d, err := discovery.New(dflag, 0) - if err != nil { - log.Fatal(err) - } - - nodes, err := d.Fetch() - if err != nil { - log.Fatal(err) - } - for _, node := range nodes { - fmt.Println(node) - } - }, - }, - { - Name: "manage", - ShortName: "m", - Usage: "manage a docker cluster", - Flags: []cli.Flag{ - flStore, - flStrategy, flFilter, - flHosts, flHeartBeat, flOverCommit, - flTLS, flTLSCaCert, flTLSCert, flTLSKey, flTLSVerify, - flEnableCors}, - Action: manage, - }, - { - Name: "join", - ShortName: "j", - Usage: "join a docker cluster", - Flags: []cli.Flag{flAddr, flHeartBeat}, - Action: join, - }, - } - - if err := app.Run(os.Args); err != nil { - log.Fatal(err) - } + cli.Run() }