github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/node/list.go (about) 1 package node 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 nodes", 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 quiet, err := flags.GetBool("quiet") 26 if err != nil { 27 return err 28 } 29 30 c, err := common.Dial(cmd) 31 if err != nil { 32 return err 33 } 34 r, err := c.ListNodes(common.Context(cmd), &api.ListNodesRequest{}) 35 if err != nil { 36 return err 37 } 38 39 var output func(n *api.Node) 40 41 if !quiet { 42 w := tabwriter.NewWriter(os.Stdout, 0, 4, 2, ' ', 0) 43 defer func() { 44 // Ignore flushing errors - there's nothing we can do. 45 _ = w.Flush() 46 }() 47 common.PrintHeader(w, "ID", "Name", "Membership", "Status", "Availability", "Manager Status") 48 output = func(n *api.Node) { 49 spec := &n.Spec 50 name := spec.Annotations.Name 51 availability := spec.Availability.String() 52 membership := spec.Membership.String() 53 54 if name == "" && n.Description != nil { 55 name = n.Description.Hostname 56 } 57 reachability := "" 58 if n.ManagerStatus != nil { 59 reachability = n.ManagerStatus.Reachability.String() 60 if n.ManagerStatus.Leader { 61 reachability = reachability + " *" 62 } 63 } 64 if reachability == "" && spec.DesiredRole == api.NodeRoleManager { 65 reachability = "UNKNOWN" 66 } 67 68 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\n", 69 n.ID, 70 name, 71 membership, 72 n.Status.State.String(), 73 availability, 74 reachability, 75 ) 76 } 77 } else { 78 output = func(n *api.Node) { fmt.Println(n.ID) } 79 } 80 81 for _, n := range r.Nodes { 82 output(n) 83 } 84 return nil 85 }, 86 } 87 ) 88 89 func init() { 90 listCmd.Flags().BoolP("quiet", "q", false, "Only display IDs") 91 }