Browse code

Update plugin command with defaulttag

This way, you don't have to specify the ":latest" tag for some command
and not for others

Signed-off-by: Vincent Demeester <vincent@sbr.pm>

Vincent Demeester authored on 2016/06/18 01:13:24
Showing 8 changed files
... ...
@@ -3,8 +3,11 @@
3 3
 package plugin
4 4
 
5 5
 import (
6
+	"fmt"
7
+
6 8
 	"github.com/docker/docker/api/client"
7 9
 	"github.com/docker/docker/cli"
10
+	"github.com/docker/docker/reference"
8 11
 	"github.com/spf13/cobra"
9 12
 	"golang.org/x/net/context"
10 13
 )
... ...
@@ -15,9 +18,24 @@ func newDisableCommand(dockerCli *client.DockerCli) *cobra.Command {
15 15
 		Short: "Disable a plugin",
16 16
 		Args:  cli.ExactArgs(1),
17 17
 		RunE: func(cmd *cobra.Command, args []string) error {
18
-			return dockerCli.Client().PluginDisable(context.Background(), args[0])
18
+			return runDisable(dockerCli, args[0])
19 19
 		},
20 20
 	}
21 21
 
22 22
 	return cmd
23 23
 }
24
+
25
+func runDisable(dockerCli *client.DockerCli, name string) error {
26
+	named, err := reference.ParseNamed(name) // FIXME: validate
27
+	if err != nil {
28
+		return err
29
+	}
30
+	if reference.IsNameOnly(named) {
31
+		named = reference.WithDefaultTag(named)
32
+	}
33
+	ref, ok := named.(reference.NamedTagged)
34
+	if !ok {
35
+		return fmt.Errorf("invalid name: %s", named.String())
36
+	}
37
+	return dockerCli.Client().PluginDisable(context.Background(), ref.String())
38
+}
... ...
@@ -3,8 +3,11 @@
3 3
 package plugin
4 4
 
5 5
 import (
6
+	"fmt"
7
+
6 8
 	"github.com/docker/docker/api/client"
7 9
 	"github.com/docker/docker/cli"
10
+	"github.com/docker/docker/reference"
8 11
 	"github.com/spf13/cobra"
9 12
 	"golang.org/x/net/context"
10 13
 )
... ...
@@ -15,9 +18,24 @@ func newEnableCommand(dockerCli *client.DockerCli) *cobra.Command {
15 15
 		Short: "Enable a plugin",
16 16
 		Args:  cli.ExactArgs(1),
17 17
 		RunE: func(cmd *cobra.Command, args []string) error {
18
-			return dockerCli.Client().PluginEnable(context.Background(), args[0])
18
+			return runEnable(dockerCli, args[0])
19 19
 		},
20 20
 	}
21 21
 
22 22
 	return cmd
23 23
 }
24
+
25
+func runEnable(dockerCli *client.DockerCli, name string) error {
26
+	named, err := reference.ParseNamed(name) // FIXME: validate
27
+	if err != nil {
28
+		return err
29
+	}
30
+	if reference.IsNameOnly(named) {
31
+		named = reference.WithDefaultTag(named)
32
+	}
33
+	ref, ok := named.(reference.NamedTagged)
34
+	if !ok {
35
+		return fmt.Errorf("invalid name: %s", named.String())
36
+	}
37
+	return dockerCli.Client().PluginEnable(context.Background(), ref.String())
38
+}
... ...
@@ -4,9 +4,11 @@ package plugin
4 4
 
5 5
 import (
6 6
 	"encoding/json"
7
+	"fmt"
7 8
 
8 9
 	"github.com/docker/docker/api/client"
9 10
 	"github.com/docker/docker/cli"
11
+	"github.com/docker/docker/reference"
10 12
 	"github.com/spf13/cobra"
11 13
 	"golang.org/x/net/context"
12 14
 )
... ...
@@ -25,7 +27,18 @@ func newInspectCommand(dockerCli *client.DockerCli) *cobra.Command {
25 25
 }
26 26
 
27 27
 func runInspect(dockerCli *client.DockerCli, name string) error {
28
-	p, err := dockerCli.Client().PluginInspect(context.Background(), name)
28
+	named, err := reference.ParseNamed(name) // FIXME: validate
29
+	if err != nil {
30
+		return err
31
+	}
32
+	if reference.IsNameOnly(named) {
33
+		named = reference.WithDefaultTag(named)
34
+	}
35
+	ref, ok := named.(reference.NamedTagged)
36
+	if !ok {
37
+		return fmt.Errorf("invalid name: %s", named.String())
38
+	}
39
+	p, err := dockerCli.Client().PluginInspect(context.Background(), ref.String())
29 40
 	if err != nil {
30 41
 		return err
31 42
 	}
... ...
@@ -46,7 +46,9 @@ func runInstall(dockerCli *client.DockerCli, opts pluginOptions) error {
46 46
 	if err != nil {
47 47
 		return err
48 48
 	}
49
-	named = reference.WithDefaultTag(named)
49
+	if reference.IsNameOnly(named) {
50
+		named = reference.WithDefaultTag(named)
51
+	}
50 52
 	ref, ok := named.(reference.NamedTagged)
51 53
 	if !ok {
52 54
 		return fmt.Errorf("invalid name: %s", named.String())
... ...
@@ -31,7 +31,9 @@ func runPush(dockerCli *client.DockerCli, name string) error {
31 31
 	if err != nil {
32 32
 		return err
33 33
 	}
34
-	named = reference.WithDefaultTag(named)
34
+	if reference.IsNameOnly(named) {
35
+		named = reference.WithDefaultTag(named)
36
+	}
35 37
 	ref, ok := named.(reference.NamedTagged)
36 38
 	if !ok {
37 39
 		return fmt.Errorf("invalid name: %s", named.String())
... ...
@@ -7,6 +7,7 @@ import (
7 7
 
8 8
 	"github.com/docker/docker/api/client"
9 9
 	"github.com/docker/docker/cli"
10
+	"github.com/docker/docker/reference"
10 11
 	"github.com/spf13/cobra"
11 12
 	"golang.org/x/net/context"
12 13
 )
... ...
@@ -28,8 +29,19 @@ func newRemoveCommand(dockerCli *client.DockerCli) *cobra.Command {
28 28
 func runRemove(dockerCli *client.DockerCli, names []string) error {
29 29
 	var errs cli.Errors
30 30
 	for _, name := range names {
31
+		named, err := reference.ParseNamed(name) // FIXME: validate
32
+		if err != nil {
33
+			return err
34
+		}
35
+		if reference.IsNameOnly(named) {
36
+			named = reference.WithDefaultTag(named)
37
+		}
38
+		ref, ok := named.(reference.NamedTagged)
39
+		if !ok {
40
+			return fmt.Errorf("invalid name: %s", named.String())
41
+		}
31 42
 		// TODO: pass names to api instead of making multiple api calls
32
-		if err := dockerCli.Client().PluginRemove(context.Background(), name); err != nil {
43
+		if err := dockerCli.Client().PluginRemove(context.Background(), ref.String()); err != nil {
33 44
 			errs = append(errs, err)
34 45
 			continue
35 46
 		}
... ...
@@ -3,10 +3,13 @@
3 3
 package plugin
4 4
 
5 5
 import (
6
+	"fmt"
7
+
6 8
 	"golang.org/x/net/context"
7 9
 
8 10
 	"github.com/docker/docker/api/client"
9 11
 	"github.com/docker/docker/cli"
12
+	"github.com/docker/docker/reference"
10 13
 	"github.com/spf13/cobra"
11 14
 )
12 15
 
... ...
@@ -24,5 +27,16 @@ func newSetCommand(dockerCli *client.DockerCli) *cobra.Command {
24 24
 }
25 25
 
26 26
 func runSet(dockerCli *client.DockerCli, name string, args []string) error {
27
-	return dockerCli.Client().PluginSet(context.Background(), name, args)
27
+	named, err := reference.ParseNamed(name) // FIXME: validate
28
+	if err != nil {
29
+		return err
30
+	}
31
+	if reference.IsNameOnly(named) {
32
+		named = reference.WithDefaultTag(named)
33
+	}
34
+	ref, ok := named.(reference.NamedTagged)
35
+	if !ok {
36
+		return fmt.Errorf("invalid name: %s", named.String())
37
+	}
38
+	return dockerCli.Client().PluginSet(context.Background(), ref.String(), args)
28 39
 }
... ...
@@ -204,6 +204,16 @@ func LookupWithCapability(name, capability string) (Plugin, error) {
204 204
 	)
205 205
 	handleLegacy := true
206 206
 	if manager != nil {
207
+		if named, err := reference.ParseNamed(name); err == nil { // FIXME: validate
208
+			if reference.IsNameOnly(named) {
209
+				named = reference.WithDefaultTag(named)
210
+			}
211
+			ref, ok := named.(reference.NamedTagged)
212
+			if !ok {
213
+				return nil, fmt.Errorf("invalid name: %s", named.String())
214
+			}
215
+			name = ref.String()
216
+		}
207 217
 		p, err = manager.get(name)
208 218
 		if err != nil {
209 219
 			if _, ok := err.(ErrNotFound); !ok {