The CLI disabled experimental features by default, requiring users to set a configuration option to enable them. Disabling experimental features was a request from Enterprise users that did not want experimental features to be accessible. We are changing this policy, and now enable experimental features by default. Experimental features may still change and/or removed, and will be highlighted in the documentation and "usage" output. For example, the `docker manifest inspect --help` output now shows: EXPERIMENTAL: docker manifest inspect is an experimental feature. Experimental features provide early access to product functionality. These features may change between releases without warning or can be removed entirely from a future release. Learn more about experimental features: https://docs.docker.com/go/experimental/ Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
|
|
"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
|
|
},
|
|
}
|
|
|
|
exitStatus2 := &cobra.Command{
|
|
Use: "exitstatus2",
|
|
Short: "Exit with status 2",
|
|
RunE: func(_ *cobra.Command, _ []string) error {
|
|
fmt.Fprintln(dockerCli.Err(), "Exiting with error status 2")
|
|
os.Exit(2)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
var (
|
|
who, context string
|
|
preRun, debug bool
|
|
)
|
|
cmd := &cobra.Command{
|
|
Use: "helloworld",
|
|
Short: "A basic Hello World plugin for tests",
|
|
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
|
|
if err := plugin.PersistentPreRunE(cmd, args); err != nil {
|
|
return err
|
|
}
|
|
if preRun {
|
|
fmt.Fprintf(dockerCli.Err(), "Plugin PersistentPreRunE called")
|
|
}
|
|
return nil
|
|
},
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
if debug {
|
|
fmt.Fprintf(dockerCli.Err(), "Plugin debug mode enabled")
|
|
}
|
|
|
|
switch context {
|
|
case "Christmas":
|
|
fmt.Fprintf(dockerCli.Out(), "Merry Christmas!\n")
|
|
return nil
|
|
case "":
|
|
// nothing
|
|
}
|
|
|
|
if who == "" {
|
|
who, _ = dockerCli.ConfigFile().PluginConfig("helloworld", "who")
|
|
}
|
|
if who == "" {
|
|
who = "World"
|
|
}
|
|
|
|
fmt.Fprintf(dockerCli.Out(), "Hello %s!\n", who)
|
|
dockerCli.ConfigFile().SetPluginConfig("helloworld", "lastwho", who)
|
|
return dockerCli.ConfigFile().Save()
|
|
},
|
|
}
|
|
|
|
flags := cmd.Flags()
|
|
flags.StringVar(&who, "who", "", "Who are we addressing?")
|
|
flags.BoolVar(&preRun, "pre-run", false, "Log from prerun hook")
|
|
// These are intended to deliberately clash with the CLIs own top
|
|
// level arguments.
|
|
flags.BoolVarP(&debug, "debug", "D", false, "Enable debug")
|
|
flags.StringVarP(&context, "context", "c", "", "Is it Christmas?")
|
|
|
|
cmd.AddCommand(goodbye, apiversion, exitStatus2)
|
|
return cmd
|
|
},
|
|
manager.Metadata{
|
|
SchemaVersion: "0.1.0",
|
|
Vendor: "Docker Inc.",
|
|
Version: "testing",
|
|
})
|
|
}
|