2017-12-04 06:30:39 -05:00
|
|
|
package stack
|
|
|
|
|
|
|
|
import (
|
2019-10-10 08:22:20 -04:00
|
|
|
"fmt"
|
|
|
|
"sort"
|
|
|
|
|
2017-12-04 06:30:39 -05:00
|
|
|
"github.com/docker/cli/cli"
|
|
|
|
"github.com/docker/cli/cli/command"
|
2019-10-10 08:22:20 -04:00
|
|
|
"github.com/docker/cli/cli/command/service"
|
|
|
|
"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"
|
2017-12-04 06:30:39 -05:00
|
|
|
cliopts "github.com/docker/cli/opts"
|
2019-10-10 08:22:20 -04:00
|
|
|
swarmtypes "github.com/docker/docker/api/types/swarm"
|
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 newServicesCommand(dockerCli command.Cli) *cobra.Command {
|
2017-12-04 06:30:39 -05:00
|
|
|
opts := options.Services{Filter: cliopts.NewFilterOpt()}
|
|
|
|
|
|
|
|
cmd := &cobra.Command{
|
|
|
|
Use: "services [OPTIONS] STACK",
|
|
|
|
Short: "List the services in the stack",
|
|
|
|
Args: cli.ExactArgs(1),
|
|
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
|
|
opts.Namespace = args[0]
|
2018-06-26 08:07:26 -04:00
|
|
|
if err := validateStackName(opts.Namespace); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
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
|
|
|
return RunServices(dockerCli, opts)
|
2017-12-04 06:30:39 -05:00
|
|
|
},
|
2022-03-30 09:27:25 -04:00
|
|
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
|
|
|
return completeNames(dockerCli)(cmd, args, toComplete)
|
|
|
|
},
|
2017-12-04 06:30:39 -05:00
|
|
|
}
|
|
|
|
flags := cmd.Flags()
|
|
|
|
flags.BoolVarP(&opts.Quiet, "quiet", "q", false, "Only display IDs")
|
2021-03-09 18:45:56 -05:00
|
|
|
flags.StringVar(&opts.Format, "format", "", flagsHelper.FormatHelp)
|
2017-12-04 06:30:39 -05:00
|
|
|
flags.VarP(&opts.Filter, "filter", "f", "Filter output based on conditions provided")
|
|
|
|
return cmd
|
|
|
|
}
|
2019-01-14 12:00:14 -05:00
|
|
|
|
2022-02-22 07:46:35 -05:00
|
|
|
// RunServices performs a stack services against the specified swarm cluster
|
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
|
|
|
func RunServices(dockerCli command.Cli, opts options.Services) error {
|
|
|
|
services, err := swarm.GetServices(dockerCli, opts)
|
2019-10-10 08:22:20 -04:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return formatWrite(dockerCli, services, opts)
|
|
|
|
}
|
|
|
|
|
|
|
|
func formatWrite(dockerCli command.Cli, services []swarmtypes.Service, opts options.Services) error {
|
|
|
|
// if no services in the stack, print message and exit 0
|
|
|
|
if len(services) == 0 {
|
|
|
|
_, _ = fmt.Fprintf(dockerCli.Err(), "Nothing found in stack: %s\n", opts.Namespace)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
sort.Slice(services, func(i, j int) bool {
|
|
|
|
return sortorder.NaturalLess(services[i].Spec.Name, services[j].Spec.Name)
|
|
|
|
})
|
|
|
|
|
|
|
|
format := opts.Format
|
|
|
|
if len(format) == 0 {
|
|
|
|
if len(dockerCli.ConfigFile().ServicesFormat) > 0 && !opts.Quiet {
|
|
|
|
format = dockerCli.ConfigFile().ServicesFormat
|
|
|
|
} else {
|
|
|
|
format = formatter.TableFormatKey
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
servicesCtx := formatter.Context{
|
|
|
|
Output: dockerCli.Out(),
|
|
|
|
Format: service.NewListFormat(format, opts.Quiet),
|
|
|
|
}
|
|
|
|
return service.ListFormatWrite(servicesCtx, services)
|
2019-01-14 12:00:14 -05:00
|
|
|
}
|