diff --git a/cmd/cmd.go b/cmd/cmd.go index 51f648a7..8bcaef11 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -1,36 +1,33 @@ package cmd import ( - "flag" + "os" + "text/tabwriter" + "text/template" "github.com/asim/go-micro/registry" "github.com/asim/go-micro/server" "github.com/asim/go-micro/store" + "github.com/codegangsta/cli" ) var ( - flagBindAddress string - flagRegistry string - flagStore string + Flags = []cli.Flag{ + cli.StringFlag{Name: "bind_address", Value: ":0", Usage: "Bind address for the server. 127.0.0.1:8080"}, + cli.StringFlag{Name: "registry", Value: "consul", Usage: "Registry for discovery. kubernetes, consul, etc"}, + cli.StringFlag{Name: "store", Value: "consul", Usage: "Store used as a basic key/value store using consul, memcached, etc"}, + } ) -func init() { - flag.StringVar(&flagBindAddress, "bind_address", ":0", "Bind address for the server. 127.0.0.1:8080") - flag.StringVar(&flagRegistry, "registry", "consul", "Registry for discovery. kubernetes, consul, etc") - flag.StringVar(&flagStore, "store", "consul", "Store used as a basic key/value store using consul, memcached, etc") -} +func Setup(c *cli.Context) error { + server.Address = c.String("bind_address") -func Init() { - flag.Parse() - - server.Address = flagBindAddress - - switch flagRegistry { + switch c.String("registry") { case "kubernetes": registry.DefaultRegistry = registry.NewKubernetesRegistry() } - switch flagStore { + switch c.String("store") { case "memcached": store.DefaultStore = store.NewMemcacheStore() case "memory": @@ -38,4 +35,33 @@ func Init() { case "etcd": store.DefaultStore = store.NewEtcdStore() } + + return nil +} + +func Init() { + cli.AppHelpTemplate = ` +GLOBAL OPTIONS: + {{range .Flags}}{{.}} + {{end}} +` + + cli.HelpPrinter = func(templ string, data interface{}) { + w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) + t := template.Must(template.New("help").Parse(templ)) + err := t.Execute(w, data) + if err != nil { + panic(err) + } + w.Flush() + os.Exit(2) + } + + app := cli.NewApp() + app.HideVersion = true + app.Usage = "a go micro app" + app.Action = func(c *cli.Context) {} + app.Before = Setup + app.Flags = Flags + app.RunAndExitOnError() }