github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/stack/cmd.go (about)

     1  package stack
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/docker/cli/cli"
     7  	"github.com/docker/cli/cli/command"
     8  	"github.com/docker/cli/cli/command/completion"
     9  	"github.com/docker/cli/cli/command/stack/swarm"
    10  	"github.com/spf13/cobra"
    11  )
    12  
    13  // NewStackCommand returns a cobra command for `stack` subcommands
    14  func NewStackCommand(dockerCli command.Cli) *cobra.Command {
    15  	cmd := &cobra.Command{
    16  		Use:   "stack [OPTIONS]",
    17  		Short: "Manage Swarm stacks",
    18  		Args:  cli.NoArgs,
    19  		RunE:  command.ShowHelp(dockerCli.Err()),
    20  		Annotations: map[string]string{
    21  			"version": "1.25",
    22  			"swarm":   "manager",
    23  		},
    24  	}
    25  	defaultHelpFunc := cmd.HelpFunc()
    26  	cmd.SetHelpFunc(func(c *cobra.Command, args []string) {
    27  		if err := cmd.Root().PersistentPreRunE(c, args); err != nil {
    28  			fmt.Fprintln(dockerCli.Err(), err)
    29  			return
    30  		}
    31  		defaultHelpFunc(c, args)
    32  	})
    33  	cmd.AddCommand(
    34  		newDeployCommand(dockerCli),
    35  		newListCommand(dockerCli),
    36  		newPsCommand(dockerCli),
    37  		newRemoveCommand(dockerCli),
    38  		newServicesCommand(dockerCli),
    39  		newConfigCommand(dockerCli),
    40  	)
    41  	flags := cmd.PersistentFlags()
    42  	flags.String("orchestrator", "", "Orchestrator to use (swarm|all)")
    43  	flags.SetAnnotation("orchestrator", "deprecated", nil)
    44  	flags.MarkDeprecated("orchestrator", "option will be ignored")
    45  	return cmd
    46  }
    47  
    48  // completeNames offers completion for swarm stacks
    49  func completeNames(dockerCli command.Cli) completion.ValidArgsFn {
    50  	return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
    51  		list, err := swarm.GetStacks(cmd.Context(), dockerCli)
    52  		if err != nil {
    53  			return nil, cobra.ShellCompDirectiveError
    54  		}
    55  		var names []string
    56  		for _, stack := range list {
    57  			names = append(names, stack.Name)
    58  		}
    59  		return names, cobra.ShellCompDirectiveNoFileComp
    60  	}
    61  }