Skip to content

Commit afda9ac

Browse files
* Export stack commands
* Factorize common orchestrator switch code between stack named commands (deploy/ps/remove/services) Signed-off-by: Silvin Lubecki <[email protected]>
1 parent d89a59b commit afda9ac

5 files changed

Lines changed: 56 additions & 53 deletions

File tree

cli/command/stack/common.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import (
44
"fmt"
55
"strings"
66
"unicode"
7+
8+
"github.com/docker/cli/cli/command"
9+
"github.com/docker/cli/cli/command/stack/kubernetes"
10+
"github.com/spf13/pflag"
711
)
812

913
// validateStackName checks if the provided string is a valid stack name (namespace).
@@ -29,3 +33,23 @@ func validateStackNames(namespaces []string) error {
2933
func quotesOrWhitespace(r rune) bool {
3034
return unicode.IsSpace(r) || r == '"' || r == '\''
3135
}
36+
37+
func runOrchestratedCommand(dockerCli command.Cli, flags *pflag.FlagSet, common *commonOptions, swarmCmd func() error, kubernetesCmd func(*kubernetes.KubeCli) error) error {
38+
commonOrchestrator := command.OrchestratorSwarm // default for top-level deploy command
39+
if common != nil {
40+
commonOrchestrator = common.orchestrator
41+
}
42+
//return RunPs(dockerCli, cmd.Flags(), commonOrchestrator, opts)
43+
switch {
44+
case commonOrchestrator.HasAll():
45+
return errUnsupportedAllOrchestrator
46+
case commonOrchestrator.HasKubernetes():
47+
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(flags, commonOrchestrator))
48+
if err != nil {
49+
return err
50+
}
51+
return kubernetesCmd(kli)
52+
default:
53+
return swarmCmd()
54+
}
55+
}

cli/command/stack/deploy.go

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func newDeployCommand(dockerCli command.Cli, common *commonOptions) *cobra.Comma
5050
if err != nil {
5151
return err
5252
}
53-
return RunDeploy(dockerCli, cmd.Flags(), config, commonOrchestrator, opts)
53+
return RunDeploy(dockerCli, cmd.Flags(), config, common, opts)
5454
},
5555
}
5656

@@ -74,17 +74,8 @@ func newDeployCommand(dockerCli command.Cli, common *commonOptions) *cobra.Comma
7474
}
7575

7676
// RunDeploy performs a stack deploy against the specified orchestrator
77-
func RunDeploy(dockerCli command.Cli, flags *pflag.FlagSet, config *composetypes.Config, commonOrchestrator command.Orchestrator, opts options.Deploy) error {
78-
switch {
79-
case commonOrchestrator.HasAll():
80-
return errUnsupportedAllOrchestrator
81-
case commonOrchestrator.HasKubernetes():
82-
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(flags, commonOrchestrator))
83-
if err != nil {
84-
return errors.Wrap(err, "unable to deploy to Kubernetes")
85-
}
86-
return kubernetes.RunDeploy(kli, opts, config)
87-
default:
88-
return swarm.RunDeploy(dockerCli, opts, config)
89-
}
77+
func RunDeploy(dockerCli command.Cli, flags *pflag.FlagSet, config *composetypes.Config, common *commonOptions, opts options.Deploy) error {
78+
return runOrchestratedCommand(dockerCli, flags, common,
79+
func() error { return swarm.RunDeploy(dockerCli, opts, config) },
80+
func(kli *kubernetes.KubeCli) error { return kubernetes.RunDeploy(kli, opts, config) })
9081
}

cli/command/stack/ps.go

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/docker/cli/cli/command/stack/swarm"
99
cliopts "github.com/docker/cli/opts"
1010
"github.com/spf13/cobra"
11+
"github.com/spf13/pflag"
1112
)
1213

1314
func newPsCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
@@ -22,19 +23,7 @@ func newPsCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
2223
if err := validateStackName(opts.Namespace); err != nil {
2324
return err
2425
}
25-
26-
switch {
27-
case common.orchestrator.HasAll():
28-
return errUnsupportedAllOrchestrator
29-
case common.orchestrator.HasKubernetes():
30-
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(cmd.Flags(), common.orchestrator))
31-
if err != nil {
32-
return err
33-
}
34-
return kubernetes.RunPS(kli, opts)
35-
default:
36-
return swarm.RunPS(dockerCli, opts)
37-
}
26+
return RunPs(dockerCli, cmd.Flags(), common, opts)
3827
},
3928
}
4029
flags := cmd.Flags()
@@ -46,3 +35,10 @@ func newPsCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
4635
kubernetes.AddNamespaceFlag(flags)
4736
return cmd
4837
}
38+
39+
// RunPs performs a stack ps against the specified orchestrator
40+
func RunPs(dockerCli command.Cli, flags *pflag.FlagSet, common *commonOptions, opts options.PS) error {
41+
return runOrchestratedCommand(dockerCli, flags, common,
42+
func() error { return swarm.RunPS(dockerCli, opts) },
43+
func(kli *kubernetes.KubeCli) error { return kubernetes.RunPS(kli, opts) })
44+
}

cli/command/stack/remove.go

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/docker/cli/cli/command/stack/options"
88
"github.com/docker/cli/cli/command/stack/swarm"
99
"github.com/spf13/cobra"
10+
"github.com/spf13/pflag"
1011
)
1112

1213
func newRemoveCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
@@ -22,22 +23,17 @@ func newRemoveCommand(dockerCli command.Cli, common *commonOptions) *cobra.Comma
2223
if err := validateStackNames(opts.Namespaces); err != nil {
2324
return err
2425
}
25-
26-
switch {
27-
case common.orchestrator.HasAll():
28-
return errUnsupportedAllOrchestrator
29-
case common.orchestrator.HasKubernetes():
30-
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(cmd.Flags(), common.orchestrator))
31-
if err != nil {
32-
return err
33-
}
34-
return kubernetes.RunRemove(kli, opts)
35-
default:
36-
return swarm.RunRemove(dockerCli, opts)
37-
}
26+
return RunRemove(dockerCli, cmd.Flags(), common, opts)
3827
},
3928
}
4029
flags := cmd.Flags()
4130
kubernetes.AddNamespaceFlag(flags)
4231
return cmd
4332
}
33+
34+
// RunRemove performs a stack remove against the specified orchestrator
35+
func RunRemove(dockerCli command.Cli, flags *pflag.FlagSet, common *commonOptions, opts options.Remove) error {
36+
return runOrchestratedCommand(dockerCli, flags, common,
37+
func() error { return swarm.RunRemove(dockerCli, opts) },
38+
func(kli *kubernetes.KubeCli) error { return kubernetes.RunRemove(kli, opts) })
39+
}

cli/command/stack/services.go

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/docker/cli/cli/command/stack/swarm"
99
cliopts "github.com/docker/cli/opts"
1010
"github.com/spf13/cobra"
11+
"github.com/spf13/pflag"
1112
)
1213

1314
func newServicesCommand(dockerCli command.Cli, common *commonOptions) *cobra.Command {
@@ -22,19 +23,7 @@ func newServicesCommand(dockerCli command.Cli, common *commonOptions) *cobra.Com
2223
if err := validateStackName(opts.Namespace); err != nil {
2324
return err
2425
}
25-
26-
switch {
27-
case common.orchestrator.HasAll():
28-
return errUnsupportedAllOrchestrator
29-
case common.orchestrator.HasKubernetes():
30-
kli, err := kubernetes.WrapCli(dockerCli, kubernetes.NewOptions(cmd.Flags(), common.orchestrator))
31-
if err != nil {
32-
return err
33-
}
34-
return kubernetes.RunServices(kli, opts)
35-
default:
36-
return swarm.RunServices(dockerCli, opts)
37-
}
26+
return RunServices(dockerCli, cmd.Flags(), common, opts)
3827
},
3928
}
4029
flags := cmd.Flags()
@@ -44,3 +33,10 @@ func newServicesCommand(dockerCli command.Cli, common *commonOptions) *cobra.Com
4433
kubernetes.AddNamespaceFlag(flags)
4534
return cmd
4635
}
36+
37+
// RunServices performs a stack services against the specified orchestrator
38+
func RunServices(dockerCli command.Cli, flags *pflag.FlagSet, common *commonOptions, opts options.Services) error {
39+
return runOrchestratedCommand(dockerCli, flags, common,
40+
func() error { return swarm.RunServices(dockerCli, opts) },
41+
func(kli *kubernetes.KubeCli) error { return kubernetes.RunServices(kli, opts) })
42+
}

0 commit comments

Comments
 (0)