2017-12-04 06:30:39 -05:00
|
|
|
package stack
|
|
|
|
|
|
|
|
import (
|
2023-09-09 18:27:44 -04:00
|
|
|
"context"
|
2024-06-04 04:56:26 -04:00
|
|
|
"io"
|
2018-04-25 08:24:46 -04:00
|
|
|
"sort"
|
|
|
|
|
2017-12-04 06:30:39 -05:00
|
|
|
"github.com/docker/cli/cli"
|
|
|
|
"github.com/docker/cli/cli/command"
|
2022-03-30 09:27:25 -04:00
|
|
|
"github.com/docker/cli/cli/command/completion"
|
2018-10-23 11:05:44 -04:00
|
|
|
"github.com/docker/cli/cli/command/stack/formatter"
|
2017-12-04 06:30:39 -05:00
|
|
|
"github.com/docker/cli/cli/command/stack/options"
|
|
|
|
"github.com/docker/cli/cli/command/stack/swarm"
|
2021-03-09 18:45:56 -05:00
|
|
|
flagsHelper "github.com/docker/cli/cli/flags"
|
2020-08-28 08:35:09 -04:00
|
|
|
"github.com/fvbommel/sortorder"
|
2017-12-04 06:30:39 -05:00
|
|
|
"github.com/spf13/cobra"
|
|
|
|
)
|
|
|
|
|
2022-02-22 07:46:35 -05:00
|
|
|
func newListCommand(dockerCli command.Cli) *cobra.Command {
|
2017-12-04 06:30:39 -05:00
|
|
|
opts := options.List{}
|
|
|
|
|
|
|
|
cmd := &cobra.Command{
|
2018-06-22 02:16:27 -04:00
|
|
|
Use: "ls [OPTIONS]",
|
2017-12-04 06:30:39 -05:00
|
|
|
Aliases: []string{"list"},
|
|
|
|
Short: "List stacks",
|
|
|
|
Args: cli.NoArgs,
|
|
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
2023-09-09 18:27:44 -04:00
|
|
|
return RunList(cmd.Context(), dockerCli, opts)
|
2017-12-04 06:30:39 -05:00
|
|
|
},
|
2022-03-30 09:27:25 -04:00
|
|
|
ValidArgsFunction: completion.NoComplete,
|
2017-12-04 06:30:39 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
flags := cmd.Flags()
|
2021-03-09 18:45:56 -05:00
|
|
|
flags.StringVar(&opts.Format, "format", "", flagsHelper.FormatHelp)
|
2017-12-04 06:30:39 -05:00
|
|
|
return cmd
|
|
|
|
}
|
2018-04-25 08:24:46 -04:00
|
|
|
|
2022-02-22 07:46:35 -05:00
|
|
|
// RunList performs a stack list against the specified swarm cluster
|
2023-09-09 18:27:44 -04:00
|
|
|
func RunList(ctx context.Context, dockerCli command.Cli, opts options.List) error {
|
2024-06-04 04:56:26 -04:00
|
|
|
ss, err := swarm.GetStacks(ctx, dockerCli.Client())
|
2022-02-22 07:46:35 -05:00
|
|
|
if err != nil {
|
|
|
|
return err
|
2018-04-25 08:24:46 -04:00
|
|
|
}
|
cli/command/stack: deprecate now obsolete wrappers
These wrappers were added to abstract stack deploy to k8s and swarm. Now
that support for deploying to k8s was removed, we can remove these wrappers.
This deprecates:
- RunDeploy()
- RunPs()
- RunRemove()
- GetServices()
This also addresses some linting failers, due to these functions having
unused arguments:
cli/command/stack/deploy.go:51:39: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunDeploy(dockerCli command.Cli, flags *pflag.FlagSet, config *composetypes.Config, opts options.Deploy) error {
^
cli/command/stack/ps.go:42:35: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunPs(dockerCli command.Cli, flags *pflag.FlagSet, opts options.PS) error {
^
cli/command/stack/remove.go:35:39: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunRemove(dockerCli command.Cli, flags *pflag.FlagSet, opts options.Remove) error {
^
cli/command/stack/list.go:37:14: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive)
func RunList(cmd *cobra.Command, dockerCli command.Cli, opts options.List) error {
^
cli/command/stack/services.go:56:41: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func GetServices(dockerCli command.Cli, flags *pflag.FlagSet, opts options.Services) ([]swarmtypes.Service, error) {
^
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-03-29 09:42:17 -04:00
|
|
|
stacks := make([]*formatter.Stack, 0, len(ss))
|
2022-02-22 07:46:35 -05:00
|
|
|
stacks = append(stacks, ss...)
|
2024-06-04 04:56:26 -04:00
|
|
|
return format(dockerCli.Out(), opts, stacks)
|
2018-04-26 05:13:14 -04:00
|
|
|
}
|
|
|
|
|
2024-06-04 04:56:26 -04:00
|
|
|
func format(out io.Writer, opts options.List, stacks []*formatter.Stack) error {
|
cli/command/stack: deprecate now obsolete wrappers
These wrappers were added to abstract stack deploy to k8s and swarm. Now
that support for deploying to k8s was removed, we can remove these wrappers.
This deprecates:
- RunDeploy()
- RunPs()
- RunRemove()
- GetServices()
This also addresses some linting failers, due to these functions having
unused arguments:
cli/command/stack/deploy.go:51:39: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunDeploy(dockerCli command.Cli, flags *pflag.FlagSet, config *composetypes.Config, opts options.Deploy) error {
^
cli/command/stack/ps.go:42:35: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunPs(dockerCli command.Cli, flags *pflag.FlagSet, opts options.PS) error {
^
cli/command/stack/remove.go:35:39: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunRemove(dockerCli command.Cli, flags *pflag.FlagSet, opts options.Remove) error {
^
cli/command/stack/list.go:37:14: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive)
func RunList(cmd *cobra.Command, dockerCli command.Cli, opts options.List) error {
^
cli/command/stack/services.go:56:41: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func GetServices(dockerCli command.Cli, flags *pflag.FlagSet, opts options.Services) ([]swarmtypes.Service, error) {
^
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-03-29 09:42:17 -04:00
|
|
|
fmt := formatter.Format(opts.Format)
|
|
|
|
if fmt == "" || fmt == formatter.TableFormatKey {
|
|
|
|
fmt = formatter.SwarmStackTableFormat
|
2018-04-25 08:24:46 -04:00
|
|
|
}
|
|
|
|
stackCtx := formatter.Context{
|
2024-06-04 04:56:26 -04:00
|
|
|
Output: out,
|
cli/command/stack: deprecate now obsolete wrappers
These wrappers were added to abstract stack deploy to k8s and swarm. Now
that support for deploying to k8s was removed, we can remove these wrappers.
This deprecates:
- RunDeploy()
- RunPs()
- RunRemove()
- GetServices()
This also addresses some linting failers, due to these functions having
unused arguments:
cli/command/stack/deploy.go:51:39: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunDeploy(dockerCli command.Cli, flags *pflag.FlagSet, config *composetypes.Config, opts options.Deploy) error {
^
cli/command/stack/ps.go:42:35: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunPs(dockerCli command.Cli, flags *pflag.FlagSet, opts options.PS) error {
^
cli/command/stack/remove.go:35:39: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func RunRemove(dockerCli command.Cli, flags *pflag.FlagSet, opts options.Remove) error {
^
cli/command/stack/list.go:37:14: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive)
func RunList(cmd *cobra.Command, dockerCli command.Cli, opts options.List) error {
^
cli/command/stack/services.go:56:41: unused-parameter: parameter 'flags' seems to be unused, consider removing or renaming it as _ (revive)
func GetServices(dockerCli command.Cli, flags *pflag.FlagSet, opts options.Services) ([]swarmtypes.Service, error) {
^
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-03-29 09:42:17 -04:00
|
|
|
Format: fmt,
|
2018-04-25 08:24:46 -04:00
|
|
|
}
|
|
|
|
sort.Slice(stacks, func(i, j int) bool {
|
cli/command/stack: fix faulty sort for sorting stacks
This code was updated in 7b9580df518bd0c3c859279d7423872625404f6b, which
removed support for using kubernetes as orchestrator, but in doing so
made this `sort.Slice` (probably) not do what it was expected to do ':)
index 412cc2e5ee86..861ae1be2fb9 100644
@@ -75,8 +54,7 @@ func format(dockerCli command.Cli, opts options.List, orchestrator command.Orche
}
sort.Slice(stacks, func(i, j int) bool {
return sortorder.NaturalLess(stacks[i].Name, stacks[j].Name) ||
- !sortorder.NaturalLess(stacks[j].Name, stacks[i].Name) &&
- sortorder.NaturalLess(stacks[j].Namespace, stacks[i].Namespace)
+ !sortorder.NaturalLess(stacks[j].Name, stacks[i].Name)
})
return formatter.StackWrite(stackCtx, stacks)
}
The extra condition was added in 84241cc393a36848076c2d3bd61fa023858fb16b
to support multiple namespaces. This patch removes it, bringing it back to
the state it was before that commit.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-07-01 07:17:40 -04:00
|
|
|
return sortorder.NaturalLess(stacks[i].Name, stacks[j].Name)
|
2018-04-25 08:24:46 -04:00
|
|
|
})
|
|
|
|
return formatter.StackWrite(stackCtx, stacks)
|
|
|
|
}
|