Merge pull request #1139 from thaJeztah/add_orchestrator_warning

Warn if DOCKER_ORCHESTRATOR is still used but not DOCKER_STACK_ORCHESTRATOR
This commit is contained in:
Silvin 2018-06-23 14:33:28 +02:00 committed by GitHub
commit cc9495ac89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 17 deletions

View File

@ -2,6 +2,7 @@ package command
import ( import (
"fmt" "fmt"
"io"
"os" "os"
) )
@ -19,6 +20,7 @@ const (
defaultOrchestrator = OrchestratorSwarm defaultOrchestrator = OrchestratorSwarm
envVarDockerStackOrchestrator = "DOCKER_STACK_ORCHESTRATOR" envVarDockerStackOrchestrator = "DOCKER_STACK_ORCHESTRATOR"
envVarDockerOrchestrator = "DOCKER_ORCHESTRATOR"
) )
// HasKubernetes returns true if defined orchestrator has Kubernetes capabilities. // HasKubernetes returns true if defined orchestrator has Kubernetes capabilities.
@ -53,13 +55,16 @@ func normalize(value string) (Orchestrator, error) {
// GetStackOrchestrator checks DOCKER_STACK_ORCHESTRATOR environment variable and configuration file // GetStackOrchestrator checks DOCKER_STACK_ORCHESTRATOR environment variable and configuration file
// orchestrator value and returns user defined Orchestrator. // orchestrator value and returns user defined Orchestrator.
func GetStackOrchestrator(flagValue, value string) (Orchestrator, error) { func GetStackOrchestrator(flagValue, value string, stderr io.Writer) (Orchestrator, error) {
// Check flag // Check flag
if o, err := normalize(flagValue); o != orchestratorUnset { if o, err := normalize(flagValue); o != orchestratorUnset {
return o, err return o, err
} }
// Check environment variable // Check environment variable
env := os.Getenv(envVarDockerStackOrchestrator) env := os.Getenv(envVarDockerStackOrchestrator)
if env == "" && os.Getenv(envVarDockerOrchestrator) != "" {
fmt.Fprintf(stderr, "WARNING: experimental environment variable %s is set. Please use %s instead\n", envVarDockerOrchestrator, envVarDockerStackOrchestrator)
}
if o, err := normalize(env); o != orchestratorUnset { if o, err := normalize(env); o != orchestratorUnset {
return o, err return o, err
} }

View File

@ -1,6 +1,7 @@
package command package command
import ( import (
"io/ioutil"
"os" "os"
"testing" "testing"
@ -107,7 +108,7 @@ func TestOrchestratorSwitch(t *testing.T) {
err := cli.Initialize(options) err := cli.Initialize(options)
assert.NilError(t, err) assert.NilError(t, err)
orchestrator, err := GetStackOrchestrator(testcase.flagOrchestrator, cli.ConfigFile().StackOrchestrator) orchestrator, err := GetStackOrchestrator(testcase.flagOrchestrator, cli.ConfigFile().StackOrchestrator, ioutil.Discard)
assert.NilError(t, err) assert.NilError(t, err)
assert.Check(t, is.Equal(testcase.expectedKubernetes, orchestrator.HasKubernetes())) assert.Check(t, is.Equal(testcase.expectedKubernetes, orchestrator.HasKubernetes()))
assert.Check(t, is.Equal(testcase.expectedSwarm, orchestrator.HasSwarm())) assert.Check(t, is.Equal(testcase.expectedSwarm, orchestrator.HasSwarm()))

View File

@ -3,11 +3,11 @@ package stack
import ( import (
"errors" "errors"
"fmt" "fmt"
"io"
"strings" "strings"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
"github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command"
cliconfig "github.com/docker/cli/cli/config"
"github.com/docker/cli/cli/config/configfile" "github.com/docker/cli/cli/config/configfile"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag" "github.com/spf13/pflag"
@ -27,12 +27,12 @@ func NewStackCommand(dockerCli command.Cli) *cobra.Command {
Short: "Manage Docker stacks", Short: "Manage Docker stacks",
Args: cli.NoArgs, Args: cli.NoArgs,
PersistentPreRunE: func(cmd *cobra.Command, args []string) error { PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
orchestrator, err := getOrchestrator(dockerCli.ConfigFile(), cmd) orchestrator, err := getOrchestrator(dockerCli.ConfigFile(), cmd, dockerCli.Err())
if err != nil { if err != nil {
return err return err
} }
opts.orchestrator = orchestrator opts.orchestrator = orchestrator
hideFlag(cmd, orchestrator) hideOrchestrationFlags(cmd, orchestrator)
return checkSupportedFlag(cmd, orchestrator) return checkSupportedFlag(cmd, orchestrator)
}, },
@ -43,13 +43,7 @@ func NewStackCommand(dockerCli command.Cli) *cobra.Command {
} }
defaultHelpFunc := cmd.HelpFunc() defaultHelpFunc := cmd.HelpFunc()
cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
config := cliconfig.LoadDefaultConfigFile(dockerCli.Err()) // dockerCli is not yet initialized, but we only need config file here hideOrchestrationFlags(cmd, opts.orchestrator)
o, err := getOrchestrator(config, cmd)
if err != nil {
fmt.Fprint(dockerCli.Err(), err)
return
}
hideFlag(cmd, o)
defaultHelpFunc(cmd, args) defaultHelpFunc(cmd, args)
}) })
cmd.AddCommand( cmd.AddCommand(
@ -78,15 +72,15 @@ func NewTopLevelDeployCommand(dockerCli command.Cli) *cobra.Command {
return cmd return cmd
} }
func getOrchestrator(config *configfile.ConfigFile, cmd *cobra.Command) (command.Orchestrator, error) { func getOrchestrator(config *configfile.ConfigFile, cmd *cobra.Command, stderr io.Writer) (command.Orchestrator, error) {
var orchestratorFlag string var orchestratorFlag string
if o, err := cmd.Flags().GetString("orchestrator"); err == nil { if o, err := cmd.Flags().GetString("orchestrator"); err == nil {
orchestratorFlag = o orchestratorFlag = o
} }
return command.GetStackOrchestrator(orchestratorFlag, config.StackOrchestrator) return command.GetStackOrchestrator(orchestratorFlag, config.StackOrchestrator, stderr)
} }
func hideFlag(cmd *cobra.Command, orchestrator command.Orchestrator) { func hideOrchestrationFlags(cmd *cobra.Command, orchestrator command.Orchestrator) {
cmd.Flags().VisitAll(func(f *pflag.Flag) { cmd.Flags().VisitAll(func(f *pflag.Flag) {
if _, ok := f.Annotations["kubernetes"]; ok && !orchestrator.HasKubernetes() { if _, ok := f.Annotations["kubernetes"]; ok && !orchestrator.HasKubernetes() {
f.Hidden = true f.Hidden = true
@ -96,7 +90,7 @@ func hideFlag(cmd *cobra.Command, orchestrator command.Orchestrator) {
} }
}) })
for _, subcmd := range cmd.Commands() { for _, subcmd := range cmd.Commands() {
hideFlag(subcmd, orchestrator) hideOrchestrationFlags(subcmd, orchestrator)
} }
} }

View File

@ -126,7 +126,7 @@ func runVersion(dockerCli command.Cli, opts *versionOptions) error {
return cli.StatusError{StatusCode: 64, Status: err.Error()} return cli.StatusError{StatusCode: 64, Status: err.Error()}
} }
orchestrator, err := command.GetStackOrchestrator("", dockerCli.ConfigFile().StackOrchestrator) orchestrator, err := command.GetStackOrchestrator("", dockerCli.ConfigFile().StackOrchestrator, dockerCli.Err())
if err != nil { if err != nil {
return cli.StatusError{StatusCode: 64, Status: err.Error()} return cli.StatusError{StatusCode: 64, Status: err.Error()}
} }