mirror of https://github.com/docker/compose.git
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:
commit
53505cc44e
|
@ -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:]...)
|
||||||
|
|
|
@ -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))
|
||||||
|
}
|
|
@ -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"
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue