mirror of https://github.com/docker/cli.git
Expose all stack commands to be used by downstream projects.
Factorize orchestrator switch among stack commands. Signed-off-by: Silvin Lubecki <silvin.lubecki@docker.com>
This commit is contained in:
parent
48bd4c6deb
commit
cf0271ace4
|
@ -17,6 +17,13 @@ type commonOptions struct {
|
|||
orchestrator command.Orchestrator
|
||||
}
|
||||
|
||||
func (o *commonOptions) Orchestrator() command.Orchestrator {
|
||||
if o == nil {
|
||||
return command.OrchestratorSwarm
|
||||
}
|
||||
return o.orchestrator
|
||||
}
|
||||
|
||||
// NewStackCommand returns a cobra command for `stack` subcommands
|
||||
func NewStackCommand(dockerCli command.Cli) *cobra.Command {
|
||||
var opts commonOptions
|
||||
|
|
|
@ -4,6 +4,10 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
"github.com/docker/cli/cli/command"
|
||||
"github.com/docker/cli/cli/command/stack/kubernetes"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
// validateStackName checks if the provided string is a valid stack name (namespace).
|
||||
|
@ -29,3 +33,18 @@ func validateStackNames(namespaces []string) error {
|
|||
func quotesOrWhitespace(r rune) bool {
|
||||
return unicode.IsSpace(r) || r == '"' || r == '\''
|
||||
}
|
||||
|
||||
func runOrchestratedCommand(dockerCli command.Cli, flags *pflag.FlagSet, commonOrchestrator command.Orchestrator, swarmCmd func() error, kubernetesCmd func(*kubernetes.KubeCli) error) error {
|
||||
switch {
|
||||
case commonOrchestrator.HasAll():
|
||||
return errUnsupportedAllOrchestrator
|
||||
case commonOrchestrator.HasKubernetes():
|
||||
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(flags, commonOrchestrator))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return kubernetesCmd(kli)
|
||||
default:
|
||||
return swarmCmd()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ func newDeployCommand(dockerCli command.Cli, common *commonOptions) *cobra.Comma
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return RunDeploy(dockerCli, cmd.Flags(), config, commonOrchestrator, opts)
|
||||
return RunDeploy(dockerCli, cmd.Flags(), config, common.Orchestrator(), opts)
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -75,16 +75,7 @@ func newDeployCommand(dockerCli command.Cli, common *commonOptions) *cobra.Comma
|
|||
|
||||
// RunDeploy performs a stack deploy against the specified orchestrator
|
||||
func RunDeploy(dockerCli command.Cli, flags *pflag.FlagSet, config *composetypes.Config, commonOrchestrator command.Orchestrator, opts options.Deploy) error {
|
||||
switch {
|
||||
case commonOrchestrator.HasAll():
|
||||
return errUnsupportedAllOrchestrator
|
||||
case commonOrchestrator.HasKubernetes():
|
||||
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(flags, commonOrchestrator))
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "unable to deploy to Kubernetes")
|
||||
}
|
||||
return kubernetes.RunDeploy(kli, opts, config)
|
||||
default:
|
||||
return swarm.RunDeploy(dockerCli, opts, config)
|
||||
}
|
||||
return runOrchestratedCommand(dockerCli, flags, commonOrchestrator,
|
||||
func() error { return swarm.RunDeploy(dockerCli, opts, config) },
|
||||
func(kli *kubernetes.KubeCli) error { return kubernetes.RunDeploy(kli, opts, config) })
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ func newListCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command
|
|||
Short: "List stacks",
|
||||
Args: cli.NoArgs,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return runList(cmd, dockerCli, opts, common.orchestrator)
|
||||
return RunList(cmd, dockerCli, opts, common.orchestrator)
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,8 @@ func newListCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command
|
|||
return cmd
|
||||
}
|
||||
|
||||
func runList(cmd *cobra.Command, dockerCli command.Cli, opts options.List, orchestrator command.Orchestrator) error {
|
||||
// RunList performs a stack list against the specified orchestrator
|
||||
func RunList(cmd *cobra.Command, dockerCli command.Cli, opts options.List, orchestrator command.Orchestrator) error {
|
||||
stacks := []*formatter.Stack{}
|
||||
if orchestrator.HasSwarm() {
|
||||
ss, err := swarm.GetStacks(dockerCli)
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"github.com/docker/cli/cli/command/stack/swarm"
|
||||
cliopts "github.com/docker/cli/opts"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
func newPsCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
|
||||
|
@ -22,19 +23,7 @@ func newPsCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
|
|||
if err := validateStackName(opts.Namespace); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch {
|
||||
case common.orchestrator.HasAll():
|
||||
return errUnsupportedAllOrchestrator
|
||||
case common.orchestrator.HasKubernetes():
|
||||
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(cmd.Flags(), common.orchestrator))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return kubernetes.RunPS(kli, opts)
|
||||
default:
|
||||
return swarm.RunPS(dockerCli, opts)
|
||||
}
|
||||
return RunPs(dockerCli, cmd.Flags(), common.Orchestrator(), opts)
|
||||
},
|
||||
}
|
||||
flags := cmd.Flags()
|
||||
|
@ -46,3 +35,10 @@ func newPsCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
|
|||
kubernetes.AddNamespaceFlag(flags)
|
||||
return cmd
|
||||
}
|
||||
|
||||
// RunPs performs a stack ps against the specified orchestrator
|
||||
func RunPs(dockerCli command.Cli, flags *pflag.FlagSet, commonOrchestrator command.Orchestrator, opts options.PS) error {
|
||||
return runOrchestratedCommand(dockerCli, flags, commonOrchestrator,
|
||||
func() error { return swarm.RunPS(dockerCli, opts) },
|
||||
func(kli *kubernetes.KubeCli) error { return kubernetes.RunPS(kli, opts) })
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"github.com/docker/cli/cli/command/stack/options"
|
||||
"github.com/docker/cli/cli/command/stack/swarm"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
func newRemoveCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
|
||||
|
@ -22,22 +23,17 @@ func newRemoveCommand(dockerCli command.Cli, common *commonOptions) *cobra.Comma
|
|||
if err := validateStackNames(opts.Namespaces); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch {
|
||||
case common.orchestrator.HasAll():
|
||||
return errUnsupportedAllOrchestrator
|
||||
case common.orchestrator.HasKubernetes():
|
||||
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(cmd.Flags(), common.orchestrator))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return kubernetes.RunRemove(kli, opts)
|
||||
default:
|
||||
return swarm.RunRemove(dockerCli, opts)
|
||||
}
|
||||
return RunRemove(dockerCli, cmd.Flags(), common.Orchestrator(), opts)
|
||||
},
|
||||
}
|
||||
flags := cmd.Flags()
|
||||
kubernetes.AddNamespaceFlag(flags)
|
||||
return cmd
|
||||
}
|
||||
|
||||
// RunRemove performs a stack remove against the specified orchestrator
|
||||
func RunRemove(dockerCli command.Cli, flags *pflag.FlagSet, commonOrchestrator command.Orchestrator, opts options.Remove) error {
|
||||
return runOrchestratedCommand(dockerCli, flags, commonOrchestrator,
|
||||
func() error { return swarm.RunRemove(dockerCli, opts) },
|
||||
func(kli *kubernetes.KubeCli) error { return kubernetes.RunRemove(kli, opts) })
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"github.com/docker/cli/cli/command/stack/swarm"
|
||||
cliopts "github.com/docker/cli/opts"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
func newServicesCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
|
||||
|
@ -22,19 +23,7 @@ func newServicesCommand(dockerCli command.Cli, common *commonOptions) *cobra.Com
|
|||
if err := validateStackName(opts.Namespace); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch {
|
||||
case common.orchestrator.HasAll():
|
||||
return errUnsupportedAllOrchestrator
|
||||
case common.orchestrator.HasKubernetes():
|
||||
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(cmd.Flags(), common.orchestrator))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return kubernetes.RunServices(kli, opts)
|
||||
default:
|
||||
return swarm.RunServices(dockerCli, opts)
|
||||
}
|
||||
return RunServices(dockerCli, cmd.Flags(), common.Orchestrator(), opts)
|
||||
},
|
||||
}
|
||||
flags := cmd.Flags()
|
||||
|
@ -44,3 +33,10 @@ func newServicesCommand(dockerCli command.Cli, common *commonOptions) *cobra.Com
|
|||
kubernetes.AddNamespaceFlag(flags)
|
||||
return cmd
|
||||
}
|
||||
|
||||
// RunServices performs a stack services against the specified orchestrator
|
||||
func RunServices(dockerCli command.Cli, flags *pflag.FlagSet, commonOrchestrator command.Orchestrator, opts options.Services) error {
|
||||
return runOrchestratedCommand(dockerCli, flags, commonOrchestrator,
|
||||
func() error { return swarm.RunServices(dockerCli, opts) },
|
||||
func(kli *kubernetes.KubeCli) error { return kubernetes.RunServices(kli, opts) })
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue