mirror of
https://github.com/docker/cli.git
synced 2025-08-30 12:01:10 +03:00
This allows passing argument to plugins, otherwise they are caught by the parse loop, since cobra does not know about each plugin at this stage (to avoid having to always scan for all plugins) this means that e.g. `docker plugin --foo` would accumulate `plugin` as an arg to the `docker` command, then choke on the unknown `--foo`. This allows unknown global args only, unknown arguments on subcommands (e.g. `docker ps --foo`) are still correctly caught. Add an e2e test covering this case. Signed-off-by: Ian Campbell <ijc@docker.com>
60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/docker/cli/cli-plugins/manager"
|
|
"github.com/docker/cli/cli-plugins/plugin"
|
|
"github.com/docker/cli/cli/command"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func main() {
|
|
plugin.Run(func(dockerCli command.Cli) *cobra.Command {
|
|
goodbye := &cobra.Command{
|
|
Use: "goodbye",
|
|
Short: "Say Goodbye instead of Hello",
|
|
Run: func(cmd *cobra.Command, _ []string) {
|
|
fmt.Fprintln(dockerCli.Out(), "Goodbye World!")
|
|
},
|
|
}
|
|
apiversion := &cobra.Command{
|
|
Use: "apiversion",
|
|
Short: "Print the API version of the server",
|
|
RunE: func(_ *cobra.Command, _ []string) error {
|
|
cli := dockerCli.Client()
|
|
ping, err := cli.Ping(context.Background())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(ping.APIVersion)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
var who string
|
|
cmd := &cobra.Command{
|
|
Use: "helloworld",
|
|
Short: "A basic Hello World plugin for tests",
|
|
// This is redundant but included to exercise
|
|
// the path where a plugin overrides this
|
|
// hook.
|
|
PersistentPreRunE: plugin.PersistentPreRunE,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
fmt.Fprintf(dockerCli.Out(), "Hello %s!\n", who)
|
|
},
|
|
}
|
|
flags := cmd.Flags()
|
|
flags.StringVar(&who, "who", "World", "Who are we addressing?")
|
|
|
|
cmd.AddCommand(goodbye, apiversion)
|
|
return cmd
|
|
},
|
|
manager.Metadata{
|
|
SchemaVersion: "0.1.0",
|
|
Vendor: "Docker Inc.",
|
|
Version: "testing",
|
|
})
|
|
}
|