Merge pull request #287 from docker/ecs_delegate_moby

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 14:04:06 +02:00 committed by GitHub
commit 53505cc44e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 8 deletions

View File

@ -32,20 +32,23 @@ import (
// ComDockerCli name of the classic cli binary // ComDockerCli name of the classic cli binary
const ComDockerCli = "com.docker.cli" 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) { func ExecIfDefaultCtxType(ctx context.Context) {
currentContext := apicontext.CurrentContext(ctx) currentContext := apicontext.CurrentContext(ctx)
s := store.ContextStore(ctx) s := store.ContextStore(ctx)
currentCtx, err := s.Get(currentContext) currentCtx, err := s.Get(currentContext)
// Only run original docker command if the current context is not // Only run original docker command if the current context is not ours.
// ours. if err != nil || mustDelegateToMoby(currentCtx.Type()) {
if err != nil || currentCtx.Type() == store.DefaultContextType {
ExecRegardlessContext(ctx) ExecRegardlessContext(ctx)
} }
} }
func mustDelegateToMoby(ctxType string) bool {
return ctxType == store.DefaultContextType || ctxType == store.AwsContextType
}
// ExecRegardlessContext delegates to com.docker.cli if on moby context // ExecRegardlessContext delegates to com.docker.cli if on moby context
func ExecRegardlessContext(ctx context.Context) { func ExecRegardlessContext(ctx context.Context) {
cmd := exec.CommandContext(ctx, ComDockerCli, os.Args[1:]...) 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" DefaultContextName = "default"
// DefaultContextType is the type for all moby contexts (not associated with cli backend) // DefaultContextType is the type for all moby contexts (not associated with cli backend)
DefaultContextType = "moby" 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 // AciContextType is the endpoint key in the context endpoints for an ACI
// backend // backend
AciContextType = "aci" AciContextType = "aci"

View File

@ -24,8 +24,6 @@ import (
"path/filepath" "path/filepath"
"time" "time"
"github.com/docker/api/cli/mobycli"
"github.com/onsi/gomega" "github.com/onsi/gomega"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
@ -144,10 +142,11 @@ func dockerExecutable() string {
// DockerClassicExecutable binary name based on platform // DockerClassicExecutable binary name based on platform
func DockerClassicExecutable() string { func DockerClassicExecutable() string {
const comDockerCli = "com.docker.cli"
if IsWindows() { if IsWindows() {
return mobycli.ComDockerCli + ".exe" return comDockerCli + ".exe"
} }
return mobycli.ComDockerCli return comDockerCli
} }
// NewDockerCommand creates a docker builder. // NewDockerCommand creates a docker builder.