Merge pull request #580 from docker/fix_aws_context

Fix bug not allowing users to run any context command when set to an aws context type.
This commit is contained in:
Guillaume Tardif 2020-09-04 12:09:41 +02:00 committed by GitHub
commit f107747ffe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 20 deletions

View File

@ -61,7 +61,7 @@ var (
) )
var ( var (
ownCommands = map[string]struct{}{ contextAgnosticCommands = map[string]struct{}{
"compose": {}, "compose": {},
"context": {}, "context": {},
"login": {}, "login": {},
@ -86,14 +86,14 @@ func init() {
rand.Seed(time.Now().UnixNano()) rand.Seed(time.Now().UnixNano())
} }
func isOwnCommand(cmd *cobra.Command) bool { func isContextAgnosticCommand(cmd *cobra.Command) bool {
if cmd == nil { if cmd == nil {
return false return false
} }
if _, ok := ownCommands[cmd.Name()]; ok { if _, ok := contextAgnosticCommands[cmd.Name()]; ok {
return true return true
} }
return isOwnCommand(cmd.Parent()) return isContextAgnosticCommand(cmd.Parent())
} }
func main() { func main() {
@ -103,7 +103,7 @@ func main() {
SilenceErrors: true, SilenceErrors: true,
SilenceUsage: true, SilenceUsage: true,
PersistentPreRunE: func(cmd *cobra.Command, args []string) error { PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
if !isOwnCommand(cmd) { if !isContextAgnosticCommand(cmd) {
mobycli.ExecIfDefaultCtxType(cmd.Context()) mobycli.ExecIfDefaultCtxType(cmd.Context())
} }
return nil return nil
@ -136,7 +136,7 @@ func main() {
helpFunc := root.HelpFunc() helpFunc := root.HelpFunc()
root.SetHelpFunc(func(cmd *cobra.Command, args []string) { root.SetHelpFunc(func(cmd *cobra.Command, args []string) {
if !isOwnCommand(cmd) { if !isContextAgnosticCommand(cmd) {
mobycli.ExecIfDefaultCtxType(cmd.Context()) mobycli.ExecIfDefaultCtxType(cmd.Context())
} }
helpFunc(cmd, args) helpFunc(cmd, args)
@ -181,11 +181,6 @@ func main() {
ctype = cc.Type() ctype = cc.Type()
} }
if ctype == store.AwsContextType {
exit(root, currentContext, errors.Errorf(`%q context type has been renamed. Recreate the context by running:
$ docker context create %s <name>`, cc.Type(), store.EcsContextType))
}
metrics.Track(ctype, os.Args[1:], root.PersistentFlags()) metrics.Track(ctype, os.Args[1:], root.PersistentFlags())
ctx = apicontext.WithCurrentContext(ctx, currentContext) ctx = apicontext.WithCurrentContext(ctx, currentContext)
@ -196,10 +191,14 @@ $ docker context create %s <name>`, cc.Type(), store.EcsContextType))
if errors.Is(ctx.Err(), context.Canceled) { if errors.Is(ctx.Err(), context.Canceled) {
os.Exit(130) os.Exit(130)
} }
if ctype == store.AwsContextType {
exit(root, currentContext, errors.Errorf(`%q context type has been renamed. Recreate the context by running:
$ docker context create %s <name>`, cc.Type(), store.EcsContextType))
}
// Context should always be handled by new CLI // Context should always be handled by new CLI
requiredCmd, _, _ := root.Find(os.Args[1:]) requiredCmd, _, _ := root.Find(os.Args[1:])
if requiredCmd != nil && isOwnCommand(requiredCmd) { if requiredCmd != nil && isContextAgnosticCommand(requiredCmd) {
exit(root, currentContext, err) exit(root, currentContext, err)
} }
mobycli.ExecIfDefaultCtxType(ctx) mobycli.ExecIfDefaultCtxType(ctx)

View File

@ -61,11 +61,11 @@ func TestDetermineCurrentContext(t *testing.T) {
} }
func TestCheckOwnCommand(t *testing.T) { func TestCheckOwnCommand(t *testing.T) {
assert.Assert(t, isOwnCommand(login.Command())) assert.Assert(t, isContextAgnosticCommand(login.Command()))
assert.Assert(t, isOwnCommand(context.Command())) assert.Assert(t, isContextAgnosticCommand(context.Command()))
assert.Assert(t, isOwnCommand(cmd.ServeCommand())) assert.Assert(t, isContextAgnosticCommand(cmd.ServeCommand()))
assert.Assert(t, !isOwnCommand(run.Command())) assert.Assert(t, !isContextAgnosticCommand(run.Command()))
assert.Assert(t, !isOwnCommand(cmd.ExecCommand())) assert.Assert(t, !isContextAgnosticCommand(cmd.ExecCommand()))
assert.Assert(t, !isOwnCommand(cmd.LogsCommand())) assert.Assert(t, !isContextAgnosticCommand(cmd.LogsCommand()))
assert.Assert(t, !isOwnCommand(cmd.PsCommand())) assert.Assert(t, !isContextAgnosticCommand(cmd.PsCommand()))
} }

View File

@ -28,7 +28,7 @@ import (
"github.com/docker/compose-cli/context/store" "github.com/docker/compose-cli/context/store"
) )
var delegatedContextTypes = []string{store.DefaultContextType, store.AwsContextType} var delegatedContextTypes = []string{store.DefaultContextType}
// ComDockerCli name of the classic cli binary // ComDockerCli name of the classic cli binary
const ComDockerCli = "com.docker.cli" const ComDockerCli = "com.docker.cli"