From 839b1b0b447567565f96c17fee915e02e9926628 Mon Sep 17 00:00:00 2001 From: Guillaume Tardif Date: Thu, 25 Jun 2020 10:51:20 +0200 Subject: [PATCH] Delegate to Moby CLI, to allow executing ecs CLI plugin if user has switched to the AWS context (created by the plugin) --- cli/mobycli/exec.go | 11 +++++++---- cli/mobycli/exec_test.go | 24 ++++++++++++++++++++++++ context/store/store.go | 2 ++ tests/framework/suite.go | 7 +++---- 4 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 cli/mobycli/exec_test.go diff --git a/cli/mobycli/exec.go b/cli/mobycli/exec.go index 511f36c11..5db7c560e 100644 --- a/cli/mobycli/exec.go +++ b/cli/mobycli/exec.go @@ -32,20 +32,23 @@ import ( // ComDockerCli name of the classic cli binary const ComDockerCli = "com.docker.cli" -// ExecIfDefaultCtxType delegates to com.docker.cli if on moby context +// ExecIfDefaultCtxType delegates to com.docker.cli if on moby or AWS context (until there is an AWS backend) func ExecIfDefaultCtxType(ctx context.Context) { currentContext := apicontext.CurrentContext(ctx) s := store.ContextStore(ctx) currentCtx, err := s.Get(currentContext) - // Only run original docker command if the current context is not - // ours. - if err != nil || currentCtx.Type() == store.DefaultContextType { + // Only run original docker command if the current context is not ours. + if err != nil || mustDelegateToMoby(currentCtx.Type()) { ExecRegardlessContext(ctx) } } +func mustDelegateToMoby(ctxType string) bool { + return ctxType == store.DefaultContextType || ctxType == store.AwsContextType +} + // ExecRegardlessContext delegates to com.docker.cli if on moby context func ExecRegardlessContext(ctx context.Context) { cmd := exec.CommandContext(ctx, ComDockerCli, os.Args[1:]...) diff --git a/cli/mobycli/exec_test.go b/cli/mobycli/exec_test.go new file mode 100644 index 000000000..b21a2fa52 --- /dev/null +++ b/cli/mobycli/exec_test.go @@ -0,0 +1,24 @@ +package mobycli + +import ( + "testing" + + "github.com/docker/api/tests/framework" + . "github.com/onsi/gomega" + "github.com/stretchr/testify/suite" +) + +type MobyExecSuite struct { + framework.CliSuite +} + +func (sut *MobyExecSuite) TestDelegateContextTypeToMoby() { + Expect(mustDelegateToMoby("moby")).To(BeTrue()) + Expect(mustDelegateToMoby("aws")).To(BeTrue()) + Expect(mustDelegateToMoby("aci")).To(BeFalse()) +} + +func TestExec(t *testing.T) { + RegisterTestingT(t) + suite.Run(t, new(MobyExecSuite)) +} diff --git a/context/store/store.go b/context/store/store.go index c2100e42e..88bca079e 100644 --- a/context/store/store.go +++ b/context/store/store.go @@ -36,6 +36,8 @@ const ( DefaultContextName = "default" // DefaultContextType is the type for all moby contexts (not associated with cli backend) DefaultContextType = "moby" + // AwsContextType is the type for ecs contexts (currently a CLI plugin, not associated with cli backend) + AwsContextType = "aws" // AciContextType is the endpoint key in the context endpoints for an ACI // backend AciContextType = "aci" diff --git a/tests/framework/suite.go b/tests/framework/suite.go index 388319725..a3908705a 100644 --- a/tests/framework/suite.go +++ b/tests/framework/suite.go @@ -24,8 +24,6 @@ import ( "path/filepath" "time" - "github.com/docker/api/cli/mobycli" - "github.com/onsi/gomega" log "github.com/sirupsen/logrus" "github.com/stretchr/testify/suite" @@ -144,10 +142,11 @@ func dockerExecutable() string { // DockerClassicExecutable binary name based on platform func DockerClassicExecutable() string { + const comDockerCli = "com.docker.cli" if IsWindows() { - return mobycli.ComDockerCli + ".exe" + return comDockerCli + ".exe" } - return mobycli.ComDockerCli + return comDockerCli } // NewDockerCommand creates a docker builder.