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

This commit is contained in:
Guillaume Tardif 2020-06-25 10:51:20 +02:00
parent c65c32cba2
commit 839b1b0b44
4 changed files with 36 additions and 8 deletions

View File

@ -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
cli/mobycli/exec_test.go Normal file
View File

@ -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))
}

View File

@ -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"

View File

@ -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.