mirror of https://github.com/docker/cli.git
				
				
				
			Fix help message flags on docker stack commands and sub-commands
PersistentPreRunE needs to be called within the help function to initialize all the flags (notably the orchestrator flag) Add an e2e test as regression test Signed-off-by: Silvin Lubecki <silvin.lubecki@docker.com>
This commit is contained in:
		
							parent
							
								
									7f853fee87
								
							
						
					
					
						commit
						21cce52b30
					
				| 
						 | 
				
			
			@ -8,6 +8,7 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/docker/cli/cli"
 | 
			
		||||
	"github.com/docker/cli/cli/command"
 | 
			
		||||
	cliconfig "github.com/docker/cli/cli/config"
 | 
			
		||||
	"github.com/docker/cli/cli/config/configfile"
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +28,11 @@ func NewStackCommand(dockerCli command.Cli) *cobra.Command {
 | 
			
		|||
		Short: "Manage Docker stacks",
 | 
			
		||||
		Args:  cli.NoArgs,
 | 
			
		||||
		PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
 | 
			
		||||
			orchestrator, err := getOrchestrator(dockerCli.ConfigFile(), cmd, dockerCli.Err())
 | 
			
		||||
			configFile := dockerCli.ConfigFile()
 | 
			
		||||
			if configFile == nil {
 | 
			
		||||
				configFile = cliconfig.LoadDefaultConfigFile(dockerCli.Err())
 | 
			
		||||
			}
 | 
			
		||||
			orchestrator, err := getOrchestrator(configFile, cmd, dockerCli.Err())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -42,9 +47,13 @@ func NewStackCommand(dockerCli command.Cli) *cobra.Command {
 | 
			
		|||
		},
 | 
			
		||||
	}
 | 
			
		||||
	defaultHelpFunc := cmd.HelpFunc()
 | 
			
		||||
	cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
 | 
			
		||||
		hideOrchestrationFlags(cmd, opts.orchestrator)
 | 
			
		||||
		defaultHelpFunc(cmd, args)
 | 
			
		||||
	cmd.SetHelpFunc(func(c *cobra.Command, args []string) {
 | 
			
		||||
		if err := cmd.PersistentPreRunE(c, args); err != nil {
 | 
			
		||||
			fmt.Fprintln(dockerCli.Err(), err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		hideOrchestrationFlags(c, opts.orchestrator)
 | 
			
		||||
		defaultHelpFunc(c, args)
 | 
			
		||||
	})
 | 
			
		||||
	cmd.AddCommand(
 | 
			
		||||
		newDeployCommand(dockerCli, &opts),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
package stack
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"gotest.tools/golden"
 | 
			
		||||
	"gotest.tools/icmd"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestStackDeployHelp(t *testing.T) {
 | 
			
		||||
	t.Run("Swarm", func(t *testing.T) {
 | 
			
		||||
		testStackDeployHelp(t, "swarm")
 | 
			
		||||
	})
 | 
			
		||||
	t.Run("Kubernetes", func(t *testing.T) {
 | 
			
		||||
		testStackDeployHelp(t, "kubernetes")
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func testStackDeployHelp(t *testing.T, orchestrator string) {
 | 
			
		||||
	result := icmd.RunCommand("docker", "stack", "deploy", "--orchestrator", orchestrator, "--help")
 | 
			
		||||
	result.Assert(t, icmd.Success)
 | 
			
		||||
	golden.Assert(t, result.Stdout(), fmt.Sprintf("stack-deploy-help-%s.golden", orchestrator))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
 | 
			
		||||
Usage:	docker stack deploy [OPTIONS] STACK
 | 
			
		||||
 | 
			
		||||
Deploy a new stack or update an existing stack
 | 
			
		||||
 | 
			
		||||
Aliases:
 | 
			
		||||
  deploy, up
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
  -c, --compose-file strings   Path to a Compose file, or "-" to read
 | 
			
		||||
                               from stdin
 | 
			
		||||
      --kubeconfig string      Kubernetes config file
 | 
			
		||||
      --namespace string       Kubernetes namespace to use
 | 
			
		||||
      --orchestrator string    Orchestrator to use (swarm|kubernetes|all)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
 | 
			
		||||
Usage:	docker stack deploy [OPTIONS] STACK
 | 
			
		||||
 | 
			
		||||
Deploy a new stack or update an existing stack
 | 
			
		||||
 | 
			
		||||
Aliases:
 | 
			
		||||
  deploy, up
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
      --bundle-file string     Path to a Distributed Application Bundle file
 | 
			
		||||
  -c, --compose-file strings   Path to a Compose file, or "-" to read
 | 
			
		||||
                               from stdin
 | 
			
		||||
      --orchestrator string    Orchestrator to use (swarm|kubernetes|all)
 | 
			
		||||
      --prune                  Prune services that are no longer referenced
 | 
			
		||||
      --resolve-image string   Query the registry to resolve image digest
 | 
			
		||||
                               and supported platforms
 | 
			
		||||
                               ("always"|"changed"|"never") (default "always")
 | 
			
		||||
      --with-registry-auth     Send registry authentication details to
 | 
			
		||||
                               Swarm agents
 | 
			
		||||
		Loading…
	
		Reference in New Issue