mirror of https://github.com/docker/cli.git
Migrate volume commands to cobra.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
79b8543b54
commit
4786ccd05c
|
@ -0,0 +1,83 @@
|
|||
package cobraadaptor
|
||||
|
||||
import (
|
||||
"github.com/docker/docker/api/client"
|
||||
"github.com/docker/docker/api/client/volume"
|
||||
"github.com/docker/docker/cli"
|
||||
cliflags "github.com/docker/docker/cli/flags"
|
||||
"github.com/docker/docker/pkg/term"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
// CobraAdaptor is an adaptor for supporting spf13/cobra commands in the
|
||||
// docker/cli framework
|
||||
type CobraAdaptor struct {
|
||||
rootCmd *cobra.Command
|
||||
dockerCli *client.DockerCli
|
||||
}
|
||||
|
||||
// NewCobraAdaptor returns a new handler
|
||||
func NewCobraAdaptor(clientFlags *cliflags.ClientFlags) CobraAdaptor {
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "docker",
|
||||
}
|
||||
rootCmd.SetUsageTemplate(usageTemplate)
|
||||
|
||||
stdin, stdout, stderr := term.StdStreams()
|
||||
dockerCli := client.NewDockerCli(stdin, stdout, stderr, clientFlags)
|
||||
|
||||
rootCmd.AddCommand(
|
||||
volume.NewVolumeCommand(dockerCli),
|
||||
)
|
||||
return CobraAdaptor{
|
||||
rootCmd: rootCmd,
|
||||
dockerCli: dockerCli,
|
||||
}
|
||||
}
|
||||
|
||||
// Usage returns the list of commands and their short usage string for
|
||||
// all top level cobra commands.
|
||||
func (c CobraAdaptor) Usage() []cli.Command {
|
||||
cmds := []cli.Command{}
|
||||
for _, cmd := range c.rootCmd.Commands() {
|
||||
cmds = append(cmds, cli.Command{Name: cmd.Use, Description: cmd.Short})
|
||||
}
|
||||
return cmds
|
||||
}
|
||||
|
||||
func (c CobraAdaptor) run(cmd string, args []string) error {
|
||||
c.dockerCli.Initialize()
|
||||
// Prepend the command name to support normal cobra command delegation
|
||||
c.rootCmd.SetArgs(append([]string{cmd}, args...))
|
||||
return c.rootCmd.Execute()
|
||||
}
|
||||
|
||||
// Command returns a cli command handler if one exists
|
||||
func (c CobraAdaptor) Command(name string) func(...string) error {
|
||||
for _, cmd := range c.rootCmd.Commands() {
|
||||
if cmd.Name() == name {
|
||||
return func(args ...string) error {
|
||||
return c.run(name, args)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var usageTemplate = `Usage: {{if .Runnable}}{{if .HasFlags}}{{appendIfNotPresent .UseLine "[OPTIONS]"}}{{else}}{{.UseLine}}{{end}}{{end}}{{if .HasSubCommands}}{{ .CommandPath}} COMMAND {{end}}{{if gt .Aliases 0}}
|
||||
|
||||
Aliases:
|
||||
{{.NameAndAliases}}
|
||||
{{end}}{{if .HasExample}}
|
||||
|
||||
Examples:
|
||||
{{ .Example }}{{end}}{{ if .HasLocalFlags}}
|
||||
|
||||
Options:
|
||||
{{.LocalFlags.FlagUsages | trimRightSpace}}{{end}}{{ if .HasAvailableSubCommands}}
|
||||
|
||||
Commands:{{range .Commands}}{{if .IsAvailableCommand}}
|
||||
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasSubCommands }}
|
||||
|
||||
Run '{{.CommandPath}} COMMAND --help' for more information on a command.{{end}}
|
||||
`
|
|
@ -0,0 +1,23 @@
|
|||
package cli
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
// MinRequiredArgs checks if the minimum number of args exists, and returns an
|
||||
// error if they do not.
|
||||
func MinRequiredArgs(args []string, min int, cmd *cobra.Command) error {
|
||||
if len(args) >= min {
|
||||
return nil
|
||||
}
|
||||
|
||||
return fmt.Errorf(
|
||||
"\"%s\" requires at least %d argument(s).\n\nUsage: %s\n\n%s",
|
||||
cmd.CommandPath(),
|
||||
min,
|
||||
cmd.UseLine(),
|
||||
cmd.Short,
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue