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>
(cherry picked from commit cb321e82db662f5190a6d83a90677a9dd9fdcd31)
| ... | ... |
@@ -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 {
|