From 657457ee2cc1b4ced804674ad1b3bfe19b849f31 Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Tue, 13 Jun 2017 02:53:53 +0000 Subject: [PATCH] Use `scope=swarm` for service related network inspect. This fix use `scope=swarm` for service related network inspect. The purpose is that, in case multiple networks with the same name exist in different scopes, it is still possible to obtain the network for services. This fix is related to moby/moby#33630 and docker/cli#167 Signed-off-by: Yong Tang --- cli/command/network/inspect.go | 3 ++- cli/command/network/remove.go | 3 ++- cli/command/service/inspect.go | 2 +- cli/command/service/opts.go | 3 ++- cli/command/service/update.go | 2 +- cli/command/stack/deploy_composefile.go | 2 +- cli/command/stack/deploy_composefile_test.go | 2 +- cli/command/system/inspect.go | 2 +- cli/internal/test/network/client.go | 8 ++++---- 9 files changed, 15 insertions(+), 12 deletions(-) diff --git a/cli/command/network/inspect.go b/cli/command/network/inspect.go index 0c76e87351..9856c04e4c 100644 --- a/cli/command/network/inspect.go +++ b/cli/command/network/inspect.go @@ -6,6 +6,7 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/inspect" + "github.com/docker/docker/api/types" "github.com/spf13/cobra" ) @@ -40,7 +41,7 @@ func runInspect(dockerCli *command.DockerCli, opts inspectOptions) error { ctx := context.Background() getNetFunc := func(name string) (interface{}, []byte, error) { - return client.NetworkInspectWithRaw(ctx, name, opts.verbose) + return client.NetworkInspectWithRaw(ctx, name, types.NetworkInspectOptions{Verbose: opts.verbose}) } return inspect.Inspect(dockerCli.Out(), opts.names, opts.format, getNetFunc) diff --git a/cli/command/network/remove.go b/cli/command/network/remove.go index c83016a408..7dfe8da2f7 100644 --- a/cli/command/network/remove.go +++ b/cli/command/network/remove.go @@ -7,6 +7,7 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" + "github.com/docker/docker/api/types" "github.com/spf13/cobra" ) @@ -33,7 +34,7 @@ func runRemove(dockerCli *command.DockerCli, networks []string) error { status := 0 for _, name := range networks { - if nw, _, err := client.NetworkInspectWithRaw(ctx, name, false); err == nil && + if nw, _, err := client.NetworkInspectWithRaw(ctx, name, types.NetworkInspectOptions{}); err == nil && nw.Ingress && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), ingressWarning) { continue diff --git a/cli/command/service/inspect.go b/cli/command/service/inspect.go index 45e7459dd4..ea0009d3a5 100644 --- a/cli/command/service/inspect.go +++ b/cli/command/service/inspect.go @@ -61,7 +61,7 @@ func runInspect(dockerCli *command.DockerCli, opts inspectOptions) error { } getNetwork := func(ref string) (interface{}, []byte, error) { - network, _, err := client.NetworkInspectWithRaw(ctx, ref, false) + network, _, err := client.NetworkInspectWithRaw(ctx, ref, types.NetworkInspectOptions{Scope: "swarm"}) if err == nil || !apiclient.IsErrNetworkNotFound(err) { return network, nil, err } diff --git a/cli/command/service/opts.go b/cli/command/service/opts.go index 35cdedc70e..5e70863f01 100644 --- a/cli/command/service/opts.go +++ b/cli/command/service/opts.go @@ -8,6 +8,7 @@ import ( "time" "github.com/docker/cli/opts" + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/client" @@ -349,7 +350,7 @@ func convertNetworks(ctx context.Context, apiClient client.NetworkAPIClient, net var netAttach []swarm.NetworkAttachmentConfig for _, net := range networks.Value() { networkIDOrName := net.Target - _, err := apiClient.NetworkInspect(ctx, networkIDOrName, false) + _, err := apiClient.NetworkInspect(ctx, networkIDOrName, types.NetworkInspectOptions{Scope: "swarm"}) if err != nil { return nil, err } diff --git a/cli/command/service/update.go b/cli/command/service/update.go index 48552e2453..4b49b738ee 100644 --- a/cli/command/service/update.go +++ b/cli/command/service/update.go @@ -1008,7 +1008,7 @@ func updateNetworks(ctx context.Context, apiClient client.NetworkAPIClient, flag toRemove := buildToRemoveSet(flags, flagNetworkRemove) idsToRemove := make(map[string]struct{}) for networkIDOrName := range toRemove { - network, err := apiClient.NetworkInspect(ctx, networkIDOrName, false) + network, err := apiClient.NetworkInspect(ctx, networkIDOrName, types.NetworkInspectOptions{Scope: "swarm"}) if err != nil { return err } diff --git a/cli/command/stack/deploy_composefile.go b/cli/command/stack/deploy_composefile.go index 1a2266af80..e8cab8fa4e 100644 --- a/cli/command/stack/deploy_composefile.go +++ b/cli/command/stack/deploy_composefile.go @@ -174,7 +174,7 @@ func validateExternalNetworks( externalNetworks []string, ) error { for _, networkName := range externalNetworks { - network, err := client.NetworkInspect(ctx, networkName, false) + network, err := client.NetworkInspect(ctx, networkName, types.NetworkInspectOptions{}) switch { case dockerclient.IsErrNotFound(err): return errors.Errorf("network %q is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed", networkName) diff --git a/cli/command/stack/deploy_composefile_test.go b/cli/command/stack/deploy_composefile_test.go index 6d811ed208..5d4813bc05 100644 --- a/cli/command/stack/deploy_composefile_test.go +++ b/cli/command/stack/deploy_composefile_test.go @@ -70,7 +70,7 @@ func TestValidateExternalNetworks(t *testing.T) { for _, testcase := range testcases { fakeClient := &network.FakeClient{ - NetworkInspectFunc: func(_ context.Context, _ string, _ bool) (types.NetworkResource, error) { + NetworkInspectFunc: func(_ context.Context, _ string, _ types.NetworkInspectOptions) (types.NetworkResource, error) { return testcase.inspectResponse, testcase.inspectError }, } diff --git a/cli/command/system/inspect.go b/cli/command/system/inspect.go index cac6d0fb2f..6d079cd69e 100644 --- a/cli/command/system/inspect.go +++ b/cli/command/system/inspect.go @@ -68,7 +68,7 @@ func inspectImages(ctx context.Context, dockerCli *command.DockerCli) inspect.Ge func inspectNetwork(ctx context.Context, dockerCli *command.DockerCli) inspect.GetRefFunc { return func(ref string) (interface{}, []byte, error) { - return dockerCli.Client().NetworkInspectWithRaw(ctx, ref, false) + return dockerCli.Client().NetworkInspectWithRaw(ctx, ref, types.NetworkInspectOptions{}) } } diff --git a/cli/internal/test/network/client.go b/cli/internal/test/network/client.go index 5f35cd4514..b12fdec6f2 100644 --- a/cli/internal/test/network/client.go +++ b/cli/internal/test/network/client.go @@ -9,7 +9,7 @@ import ( // FakeClient is a fake NetworkAPIClient type FakeClient struct { - NetworkInspectFunc func(ctx context.Context, networkID string, verbose bool) (types.NetworkResource, error) + NetworkInspectFunc func(ctx context.Context, networkID string, options types.NetworkInspectOptions) (types.NetworkResource, error) } // NetworkConnect fakes connecting to a network @@ -28,15 +28,15 @@ func (c *FakeClient) NetworkDisconnect(ctx context.Context, networkID, container } // NetworkInspect fakes inspecting a network -func (c *FakeClient) NetworkInspect(ctx context.Context, networkID string, verbose bool) (types.NetworkResource, error) { +func (c *FakeClient) NetworkInspect(ctx context.Context, networkID string, options types.NetworkInspectOptions) (types.NetworkResource, error) { if c.NetworkInspectFunc != nil { - return c.NetworkInspectFunc(ctx, networkID, verbose) + return c.NetworkInspectFunc(ctx, networkID, options) } return types.NetworkResource{}, nil } // NetworkInspectWithRaw fakes inspecting a network with a raw response -func (c *FakeClient) NetworkInspectWithRaw(ctx context.Context, networkID string, verbose bool) (types.NetworkResource, []byte, error) { +func (c *FakeClient) NetworkInspectWithRaw(ctx context.Context, networkID string, options types.NetworkInspectOptions) (types.NetworkResource, []byte, error) { return types.NetworkResource{}, nil, nil }