mirror of https://github.com/docker/cli.git
Allow `docker plugin inspect` to search based on ID or name
This fix tries to address the issue raised in discussion of PR 28735 where it was not possible to manage plugin based on plugin ID. Previously it was not possible to invoke `docker plugin inspect` with a plugin ID (or ID prefix). This fix updates the implementation of `docker plugin inspect` so that it is possbile to search based on a plugin name, or a plugin ID. A short format of plugin ID (prefix) is also possible, as long as there is no ambiguity. Previously the check of `docker plugin inspect` was mostly done on the client side. This could potentially cause inconsistency between API and CMD. This fix move all the checks to daemon side so that API and CMD will be consistent. An integration test has been added to cover the changes. Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
parent
ebd8ec6c3f
commit
312958f4db
|
@ -1,12 +1,9 @@
|
|||
package plugin
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/docker/docker/cli"
|
||||
"github.com/docker/docker/cli/command"
|
||||
"github.com/docker/docker/cli/command/inspect"
|
||||
"github.com/docker/docker/reference"
|
||||
"github.com/spf13/cobra"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
@ -20,7 +17,7 @@ func newInspectCommand(dockerCli *command.DockerCli) *cobra.Command {
|
|||
var opts inspectOptions
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "inspect [OPTIONS] PLUGIN [PLUGIN...]",
|
||||
Use: "inspect [OPTIONS] PLUGIN|ID [PLUGIN|ID...]",
|
||||
Short: "Display detailed information on one or more plugins",
|
||||
Args: cli.RequiresMinArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
|
@ -37,20 +34,8 @@ func newInspectCommand(dockerCli *command.DockerCli) *cobra.Command {
|
|||
func runInspect(dockerCli *command.DockerCli, opts inspectOptions) error {
|
||||
client := dockerCli.Client()
|
||||
ctx := context.Background()
|
||||
getRef := func(name string) (interface{}, []byte, error) {
|
||||
named, err := reference.ParseNamed(name) // FIXME: validate
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
if reference.IsNameOnly(named) {
|
||||
named = reference.WithDefaultTag(named)
|
||||
}
|
||||
ref, ok := named.(reference.NamedTagged)
|
||||
if !ok {
|
||||
return nil, nil, fmt.Errorf("invalid name: %s", named.String())
|
||||
}
|
||||
|
||||
return client.PluginInspectWithRaw(ctx, ref.String())
|
||||
getRef := func(ref string) (interface{}, []byte, error) {
|
||||
return client.PluginInspectWithRaw(ctx, ref)
|
||||
}
|
||||
|
||||
return inspect.Inspect(dockerCli.Out(), opts.pluginNames, opts.format, getRef)
|
||||
|
|
Loading…
Reference in New Issue