github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/task/list.go (about) 1 package task 2 3 import ( 4 "errors" 5 "fmt" 6 "os" 7 "text/tabwriter" 8 9 "github.com/docker/swarmkit/api" 10 "github.com/docker/swarmkit/cmd/swarmctl/common" 11 "github.com/spf13/cobra" 12 ) 13 14 var ( 15 listCmd = &cobra.Command{ 16 Use: "ls", 17 Short: "List tasks", 18 RunE: func(cmd *cobra.Command, args []string) error { 19 if len(args) != 0 { 20 return errors.New("ls command takes no arguments") 21 } 22 23 flags := cmd.Flags() 24 25 all, err := flags.GetBool("all") 26 if err != nil { 27 return err 28 } 29 30 quiet, err := flags.GetBool("quiet") 31 if err != nil { 32 return err 33 } 34 35 c, err := common.Dial(cmd) 36 if err != nil { 37 return err 38 } 39 r, err := c.ListTasks(common.Context(cmd), &api.ListTasksRequest{}) 40 if err != nil { 41 return err 42 } 43 res := common.NewResolver(cmd, c) 44 45 var output func(t *api.Task) 46 47 if !quiet { 48 w := tabwriter.NewWriter(os.Stdout, 0, 4, 2, ' ', 0) 49 defer func() { 50 // Ignore flushing errors - there's nothing we can do. 51 _ = w.Flush() 52 }() 53 common.PrintHeader(w, "ID", "Service", "Desired State", "Last State", "Node") 54 output = func(t *api.Task) { 55 fmt.Fprintf(w, "%s\t%s.%d\t%s\t%s %s\t%s\n", 56 t.ID, 57 res.Resolve(api.Service{}, t.ServiceID), 58 t.Slot, 59 t.DesiredState.String(), 60 t.Status.State.String(), 61 common.TimestampAgo(t.Status.Timestamp), 62 res.Resolve(api.Node{}, t.NodeID), 63 ) 64 } 65 } else { 66 output = func(t *api.Task) { fmt.Println(t.ID) } 67 } 68 69 for _, t := range r.Tasks { 70 if all || t.DesiredState <= api.TaskStateRunning { 71 output(t) 72 } 73 } 74 return nil 75 }, 76 } 77 ) 78 79 func init() { 80 listCmd.Flags().BoolP("all", "a", false, "Show all tasks (default shows just running)") 81 listCmd.Flags().BoolP("quiet", "q", false, "Only display IDs") 82 }