1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00
Signed-off-by: Ce Gao <ce.gao@outlook.com>
This commit is contained in:
Ce Gao 2016-10-28 08:02:57 +08:00
parent a6dfab03f5
commit 9efa472bd1
5 changed files with 39 additions and 12 deletions

View file

@ -14,6 +14,7 @@ import (
type psOptions struct { type psOptions struct {
serviceID string serviceID string
quiet bool
noResolve bool noResolve bool
noTrunc bool noTrunc bool
filter opts.FilterOpt filter opts.FilterOpt
@ -32,6 +33,7 @@ func newPsCommand(dockerCli *command.DockerCli) *cobra.Command {
}, },
} }
flags := cmd.Flags() flags := cmd.Flags()
flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only display task IDs")
flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output") flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output")
flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names") flags.BoolVar(&opts.noResolve, "no-resolve", false, "Do not map IDs to Names")
flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided") flags.VarP(&opts.filter, "filter", "f", "Filter output based on conditions provided")
@ -67,5 +69,8 @@ func runPS(dockerCli *command.DockerCli, opts psOptions) error {
return err return err
} }
if opts.quiet {
return task.PrintQuiet(dockerCli, tasks)
}
return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve), opts.noTrunc) return task.Print(dockerCli, ctx, tasks, idresolver.New(client, opts.noResolve), opts.noTrunc)
} }

View file

@ -2,6 +2,7 @@ package task
import ( import (
"fmt" "fmt"
"io"
"sort" "sort"
"strings" "strings"
"text/tabwriter" "text/tabwriter"
@ -40,7 +41,9 @@ func (t tasksBySlot) Less(i, j int) bool {
return t[j].Meta.CreatedAt.Before(t[i].CreatedAt) return t[j].Meta.CreatedAt.Before(t[i].CreatedAt)
} }
// Print task information in a table format // Print task information in a table format.
// Besides this, command `docker node ps <node>`
// and `docker stack ps` will call this, too.
func Print(dockerCli *command.DockerCli, ctx context.Context, tasks []swarm.Task, resolver *idresolver.IDResolver, noTrunc bool) error { func Print(dockerCli *command.DockerCli, ctx context.Context, tasks []swarm.Task, resolver *idresolver.IDResolver, noTrunc bool) error {
sort.Stable(tasksBySlot(tasks)) sort.Stable(tasksBySlot(tasks))
@ -50,6 +53,27 @@ func Print(dockerCli *command.DockerCli, ctx context.Context, tasks []swarm.Task
defer writer.Flush() defer writer.Flush()
fmt.Fprintln(writer, strings.Join([]string{"NAME", "IMAGE", "NODE", "DESIRED STATE", "CURRENT STATE", "ERROR"}, "\t")) fmt.Fprintln(writer, strings.Join([]string{"NAME", "IMAGE", "NODE", "DESIRED STATE", "CURRENT STATE", "ERROR"}, "\t"))
if err := print(writer, ctx, tasks, resolver, noTrunc); err != nil {
return err
}
return nil
}
// PrintQuiet shows task list in a quiet way.
func PrintQuiet(dockerCli *command.DockerCli, tasks []swarm.Task) error {
sort.Stable(tasksBySlot(tasks))
out := dockerCli.Out()
for _, task := range tasks {
fmt.Fprintln(out, task.ID)
}
return nil
}
func print(out io.Writer, ctx context.Context, tasks []swarm.Task, resolver *idresolver.IDResolver, noTrunc bool) error {
prevServiceName := "" prevServiceName := ""
prevSlot := 0 prevSlot := 0
for _, task := range tasks { for _, task := range tasks {
@ -94,7 +118,7 @@ func Print(dockerCli *command.DockerCli, ctx context.Context, tasks []swarm.Task
} }
fmt.Fprintf( fmt.Fprintf(
writer, out,
psTaskItemFmt, psTaskItemFmt,
indentedName, indentedName,
task.Spec.ContainerSpec.Image, task.Spec.ContainerSpec.Image,
@ -105,6 +129,5 @@ func Print(dockerCli *command.DockerCli, ctx context.Context, tasks []swarm.Task
taskErr, taskErr,
) )
} }
return nil return nil
} }

View file

@ -2462,7 +2462,7 @@ _docker_service_ps() {
case "$cur" in case "$cur" in
-*) -*)
COMPREPLY=( $( compgen -W "--all -a --filter -f --help --no-resolve --no-trunc" -- "$cur" ) ) COMPREPLY=( $( compgen -W "--filter -f --help --no-resolve --no-trunc --quiet -q" -- "$cur" ) )
;; ;;
*) *)
local counter=$(__docker_pos_first_nonflag '--filter|-f') local counter=$(__docker_pos_first_nonflag '--filter|-f')

View file

@ -1167,10 +1167,10 @@ __docker_service_subcommand() {
(ps) (ps)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -a --all)"{-a,--all}"[Display all tasks]" \
"($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \ "($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \
"($help)--no-resolve[Do not map IDs to Names]" \ "($help)--no-resolve[Do not map IDs to Names]" \
"($help)--no-trunc[Do not truncate output]" \ "($help)--no-trunc[Do not truncate output]" \
"($help -q --quiet)"{-q,--quiet}"[Only display task IDs]" \
"($help -)1:service:__docker_complete_services" && ret=0 "($help -)1:service:__docker_complete_services" && ret=0
case $state in case $state in
(filter-options) (filter-options)

View file

@ -22,17 +22,16 @@ Usage: docker service ps [OPTIONS] SERVICE
List the tasks of a service List the tasks of a service
Options: Options:
-a, --all Display all tasks -f, --filter filter Filter output based on conditions provided
-f, --filter value Filter output based on conditions provided
--help Print usage --help Print usage
--no-resolve Do not map IDs to Names --no-resolve Do not map IDs to Names
--no-trunc Do not truncate output --no-trunc Do not truncate output
-q, --quiet Only display task IDs
``` ```
Lists the tasks that are running as part of the specified service. This command Lists the tasks that are running as part of the specified service. This command
has to be run targeting a manager node. has to be run targeting a manager node.
## Examples ## Examples
### Listing the tasks that are part of a service ### Listing the tasks that are part of a service