github.com/cspotcode/docker-cli@v20.10.0-rc1.0.20201201121459-3faad7acc5b8+incompatible/cli/command/stack/common.go (about) 1 package stack 2 3 import ( 4 "fmt" 5 "strings" 6 "unicode" 7 8 "github.com/docker/cli/cli/command" 9 "github.com/docker/cli/cli/command/stack/kubernetes" 10 "github.com/spf13/pflag" 11 ) 12 13 // validateStackName checks if the provided string is a valid stack name (namespace). 14 // It currently only does a rudimentary check if the string is empty, or consists 15 // of only whitespace and quoting characters. 16 func validateStackName(namespace string) error { 17 v := strings.TrimFunc(namespace, quotesOrWhitespace) 18 if v == "" { 19 return fmt.Errorf("invalid stack name: %q", namespace) 20 } 21 return nil 22 } 23 24 func validateStackNames(namespaces []string) error { 25 for _, ns := range namespaces { 26 if err := validateStackName(ns); err != nil { 27 return err 28 } 29 } 30 return nil 31 } 32 33 func quotesOrWhitespace(r rune) bool { 34 return unicode.IsSpace(r) || r == '"' || r == '\'' 35 } 36 37 func runOrchestratedCommand(dockerCli command.Cli, flags *pflag.FlagSet, commonOrchestrator command.Orchestrator, swarmCmd func() error, kubernetesCmd func(*kubernetes.KubeCli) error) error { 38 switch { 39 case commonOrchestrator.HasAll(): 40 return errUnsupportedAllOrchestrator 41 case commonOrchestrator.HasKubernetes(): 42 kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(flags, commonOrchestrator)) 43 if err != nil { 44 return err 45 } 46 return kubernetesCmd(kli) 47 default: 48 return swarmCmd() 49 } 50 }