Merge pull request #29212 from yongtang/29185-docker-inspect

Fix `docker plugin inspect <unkown object>` issue on Windows
This commit is contained in:
Brian Goff 2016-12-21 15:47:17 -05:00 committed by GitHub
commit e91604c0d2
3 changed files with 18 additions and 6 deletions

View file

@ -2,6 +2,7 @@ package system
import (
"fmt"
"strings"
"golang.org/x/net/context"
@ -156,6 +157,10 @@ func inspectAll(ctx context.Context, dockerCli *command.DockerCli, getSize bool,
return info.Swarm.ControlAvailable
}
isErrNotSupported := func(err error) bool {
return strings.Contains(err.Error(), "not supported")
}
return func(ref string) (interface{}, []byte, error) {
const (
swarmSupportUnknown = iota
@ -183,7 +188,7 @@ func inspectAll(ctx context.Context, dockerCli *command.DockerCli, getSize bool,
}
v, raw, err := inspectData.objectInspector(ref)
if err != nil {
if typeConstraint == "" && apiclient.IsErrNotFound(err) {
if typeConstraint == "" && (apiclient.IsErrNotFound(err) || isErrNotSupported(err)) {
continue
}
return v, raw, err

View file

@ -251,3 +251,14 @@ func (s *DockerSuite) TestPluginInspect(c *check.C) {
_, _, err = dockerCmdWithError("plugin", "inspect", "-f", "{{.Id}}", id[:5])
c.Assert(err, checker.NotNil)
}
// Test case for https://github.com/docker/docker/pull/29186#discussion_r91277345
func (s *DockerSuite) TestPluginInspectOnWindows(c *check.C) {
// This test should work on Windows only
testRequires(c, DaemonIsWindows)
out, _, err := dockerCmdWithError("plugin", "inspect", "foobar")
c.Assert(err, checker.NotNil)
c.Assert(out, checker.Contains, "plugins are not supported on this platform")
c.Assert(err.Error(), checker.Contains, "plugins are not supported on this platform")
}

View file

@ -4,7 +4,6 @@ package plugin
import (
"errors"
"fmt"
"io"
"net/http"
@ -26,10 +25,7 @@ func (pm *Manager) Enable(name string, config *types.PluginEnableConfig) error {
// Inspect examines a plugin config
func (pm *Manager) Inspect(refOrID string) (tp types.Plugin, err error) {
// Even though plugin is not supported, we still want to return `not found`
// error so that `docker inspect` (without `--type` specified) returns correct
// `not found` message
return tp, fmt.Errorf("no such plugin name or ID associated with %q", refOrID)
return tp, errNotSupported
}
// Privileges pulls a plugin config and computes the privileges required to install it.