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  }