diff --git a/components/cli/command/plugin/enable.go b/components/cli/command/plugin/enable.go index 0fd8f469dd..d84da24668 100644 --- a/components/cli/command/plugin/enable.go +++ b/components/cli/command/plugin/enable.go @@ -3,6 +3,7 @@ package plugin import ( "fmt" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/cli/command" "github.com/docker/docker/reference" @@ -10,20 +11,32 @@ import ( "golang.org/x/net/context" ) +type enableOpts struct { + timeout int + name string +} + func newEnableCommand(dockerCli *command.DockerCli) *cobra.Command { + var opts enableOpts + cmd := &cobra.Command{ Use: "enable PLUGIN", Short: "Enable a plugin", Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runEnable(dockerCli, args[0]) + opts.name = args[0] + return runEnable(dockerCli, &opts) }, } + flags := cmd.Flags() + flags.IntVar(&opts.timeout, "timeout", 0, "HTTP client timeout (in seconds)") return cmd } -func runEnable(dockerCli *command.DockerCli, name string) error { +func runEnable(dockerCli *command.DockerCli, opts *enableOpts) error { + name := opts.name + named, err := reference.ParseNamed(name) // FIXME: validate if err != nil { return err @@ -35,7 +48,11 @@ func runEnable(dockerCli *command.DockerCli, name string) error { if !ok { return fmt.Errorf("invalid name: %s", named.String()) } - if err := dockerCli.Client().PluginEnable(context.Background(), ref.String()); err != nil { + if opts.timeout < 0 { + return fmt.Errorf("negative timeout %d is invalid", opts.timeout) + } + + if err := dockerCli.Client().PluginEnable(context.Background(), ref.String(), types.PluginEnableOptions{Timeout: opts.timeout}); err != nil { return err } fmt.Fprintln(dockerCli.Out(), name)