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 }