This replaces the visitAll recursive function with a test that verifies that the option is set for all commands and subcommands, so that it doesn't have to be modified at runtime. We currently still have to loop over all functions for the setValidateArgs call, but that can be looked at separately. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
50 lines
2.1 KiB
Go
50 lines
2.1 KiB
Go
package stack
|
|
|
|
import (
|
|
"github.com/docker/cli/cli"
|
|
"github.com/docker/cli/cli/command"
|
|
"github.com/docker/cli/cli/command/stack/loader"
|
|
"github.com/docker/cli/cli/command/stack/options"
|
|
"github.com/docker/cli/cli/command/stack/swarm"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func newDeployCommand(dockerCLI command.Cli) *cobra.Command {
|
|
var opts options.Deploy
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "deploy [OPTIONS] STACK",
|
|
Aliases: []string{"up"},
|
|
Short: "Deploy a new stack or update an existing stack",
|
|
Args: cli.ExactArgs(1),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
opts.Namespace = args[0]
|
|
if err := validateStackName(opts.Namespace); err != nil {
|
|
return err
|
|
}
|
|
config, err := loader.LoadComposefile(dockerCLI, opts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return swarm.RunDeploy(cmd.Context(), dockerCLI, cmd.Flags(), &opts, config)
|
|
},
|
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
|
return completeNames(dockerCLI)(cmd, args, toComplete)
|
|
},
|
|
DisableFlagsInUseLine: true,
|
|
}
|
|
|
|
flags := cmd.Flags()
|
|
flags.StringSliceVarP(&opts.Composefiles, "compose-file", "c", []string{}, `Path to a Compose file, or "-" to read from stdin`)
|
|
flags.SetAnnotation("compose-file", "version", []string{"1.25"})
|
|
flags.BoolVar(&opts.SendRegistryAuth, "with-registry-auth", false, "Send registry authentication details to Swarm agents")
|
|
flags.BoolVar(&opts.Prune, "prune", false, "Prune services that are no longer referenced")
|
|
flags.SetAnnotation("prune", "version", []string{"1.27"})
|
|
flags.StringVar(&opts.ResolveImage, "resolve-image", swarm.ResolveImageAlways,
|
|
`Query the registry to resolve image digest and supported platforms ("`+swarm.ResolveImageAlways+`", "`+swarm.ResolveImageChanged+`", "`+swarm.ResolveImageNever+`")`)
|
|
flags.SetAnnotation("resolve-image", "version", []string{"1.30"})
|
|
flags.BoolVarP(&opts.Detach, "detach", "d", true, "Exit immediately instead of waiting for the stack services to converge")
|
|
flags.BoolVarP(&opts.Quiet, "quiet", "q", false, "Suppress progress output")
|
|
return cmd
|
|
}
|