浏览代码

Delegate to Moby CLI, to allow executing ecs CLI plugin if user has switched to the AWS context (created by the plugin)

Guillaume Tardif 5 年之前
父节点
当前提交
839b1b0b44
共有 4 个文件被更改,包括 36 次插入8 次删除
  1. 7 4
      cli/mobycli/exec.go
  2. 24 0
      cli/mobycli/exec_test.go
  3. 2 0
      context/store/store.go
  4. 3 4
      tests/framework/suite.go

+ 7 - 4
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:]...)

+ 24 - 0
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))
+}

+ 2 - 0
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"

+ 3 - 4
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.