From 71140cf47ce9714d93f2e2f8f10449fa357a3845 Mon Sep 17 00:00:00 2001 From: Dan Farrelly Date: Sat, 28 Mar 2015 20:04:17 -0400 Subject: [PATCH] Filter create command flags by driver Signed-off-by: Dan Farrelly --- commands.go | 89 ++++++++++++++++++++++++++++++---------------- drivers/drivers.go | 14 ++++++++ 2 files changed, 72 insertions(+), 31 deletions(-) diff --git a/commands.go b/commands.go index 7c93ecbd9f..be1e57f5ce 100644 --- a/commands.go +++ b/commands.go @@ -161,6 +161,40 @@ func setupCertificates(caCertPath, caKeyPath, clientCertPath, clientKeyPath stri return nil } +var CreateFlags = []cli.Flag{ + cli.StringFlag{ + Name: "driver, d", + Usage: fmt.Sprintf( + "Driver to create machine with. Available drivers: %s", + strings.Join(drivers.GetDriverNames(), ", "), + ), + Value: "none", + }, + cli.BoolFlag{ + Name: "swarm", + Usage: "Configure Machine with Swarm", + }, + cli.BoolFlag{ + Name: "swarm-master", + Usage: "Configure Machine to be a Swarm master", + }, + cli.StringFlag{ + Name: "swarm-discovery", + Usage: "Discovery service to use with Swarm", + Value: "", + }, + cli.StringFlag{ + Name: "swarm-host", + Usage: "ip/socket to listen on for Swarm master", + Value: "tcp://0.0.0.0:3376", + }, + cli.StringFlag{ + Name: "swarm-addr", + Usage: "addr to advertise for Swarm (default: detect and use the machine IP)", + Value: "", + }, +} + var Commands = []cli.Command{ { Name: "active", @@ -170,37 +204,7 @@ var Commands = []cli.Command{ { Flags: append( drivers.GetCreateFlags(), - cli.StringFlag{ - Name: "driver, d", - Usage: fmt.Sprintf( - "Driver to create machine with. Available drivers: %s", - strings.Join(drivers.GetDriverNames(), ", "), - ), - Value: "none", - }, - cli.BoolFlag{ - Name: "swarm", - Usage: "Configure Machine with Swarm", - }, - cli.BoolFlag{ - Name: "swarm-master", - Usage: "Configure Machine to be a Swarm master", - }, - cli.StringFlag{ - Name: "swarm-discovery", - Usage: "Discovery service to use with Swarm", - Value: "", - }, - cli.StringFlag{ - Name: "swarm-host", - Usage: "ip/socket to listen on for Swarm master", - Value: "tcp://0.0.0.0:3376", - }, - cli.StringFlag{ - Name: "swarm-addr", - Usage: "addr to advertise for Swarm (default: detect and use the machine IP)", - Value: "", - }, + CreateFlags..., ), Name: "create", Usage: "Create a machine", @@ -370,7 +374,30 @@ func cmdCreate(c *cli.Context) { name := c.Args().First() if name == "" { + + hasDriver := false + driverFlags, err := drivers.GetCreateFlagsForDriver(driver) + if err != nil { + log.Fatal(err) + } else { + hasDriver = true + } + + if hasDriver { + for i, cmd := range c.App.Commands { + if cmd.HasName("create") { + c.App.Commands[i].Flags = append( + driverFlags, + CreateFlags..., + ) + } + } + } + cli.ShowCommandHelp(c, "create") + if hasDriver { + fmt.Println("Run 'docker-machine create --help' for all options.\n") + } log.Fatal("You must specify a machine name") } diff --git a/drivers/drivers.go b/drivers/drivers.go index 46ad7eacdb..32f8dcd4a1 100644 --- a/drivers/drivers.go +++ b/drivers/drivers.go @@ -143,6 +143,20 @@ func GetCreateFlags() []cli.Flag { return flags } +func GetCreateFlagsForDriver(name string) ([]cli.Flag, error) { + + for driverName := range drivers { + if name == driverName { + driver := drivers[driverName] + flags := driver.GetCreateFlags() + sort.Sort(ByFlagName(flags)) + return flags, nil + } + } + + return nil, fmt.Errorf("Driver %s not found", name) +} + // GetDriverNames returns a slice of all registered driver names func GetDriverNames() []string { names := make([]string, 0, len(drivers))