github.com/greenboxal/deis@v1.12.1/deisctl/backend/fleet/list_machines.go (about) 1 package fleet 2 3 import ( 4 "fmt" 5 "sort" 6 "strings" 7 8 "github.com/coreos/fleet/machine" 9 ) 10 11 const ( 12 defaultListMachinesFields = "machine,ip,metadata" 13 ) 14 15 var ( 16 listMachinesFields = map[string]machineToField{ 17 "machine": func(ms *machine.MachineState, full bool) string { 18 return machineIDLegend(*ms, full) 19 }, 20 "ip": func(ms *machine.MachineState, full bool) string { 21 if len(ms.PublicIP) == 0 { 22 return "-" 23 } 24 return ms.PublicIP 25 }, 26 "metadata": func(ms *machine.MachineState, full bool) string { 27 if len(ms.Metadata) == 0 { 28 return "-" 29 } 30 return formatMetadata(ms.Metadata) 31 }, 32 } 33 ) 34 35 type machineToField func(ms *machine.MachineState, full bool) string 36 37 // ListMachines prints all nodes to Stdout 38 func (c *FleetClient) ListMachines() (err error) { 39 machines, err := c.Fleet.Machines() 40 if err != nil { 41 return err 42 } 43 44 c.printMachines(machines) 45 return 46 } 47 48 // printUnits writes units to stdout using a tabwriter 49 func (c *FleetClient) printMachines(states []machine.MachineState) { 50 cols := strings.Split(defaultListMachinesFields, ",") 51 fmt.Fprintln(c.out, strings.ToUpper(strings.Join(cols, "\t"))) 52 for _, ms := range states { 53 var f []string 54 for _, c := range cols { 55 f = append(f, listMachinesFields[c](&ms, false)) 56 } 57 fmt.Fprintln(c.out, strings.Join(f, "\t")) 58 } 59 c.out.Flush() 60 } 61 62 func formatMetadata(metadata map[string]string) string { 63 pairs := make([]string, len(metadata)) 64 idx := 0 65 var sorted sort.StringSlice 66 for k := range metadata { 67 sorted = append(sorted, k) 68 } 69 sorted.Sort() 70 for _, key := range sorted { 71 value := metadata[key] 72 pairs[idx] = fmt.Sprintf("%s=%s", key, value) 73 idx++ 74 } 75 return strings.Join(pairs, ",") 76 }