Skip to content

Commit 4e23b61

Browse files
committed
ls: move builder/node status error msg below table
Signed-off-by: CrazyMax <[email protected]>
1 parent 66a764f commit 4e23b61

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

commands/ls.go

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,49 +100,72 @@ func runLs(dockerCli command.Cli, in lsOptions) error {
100100
}
101101
}
102102

103-
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0)
103+
w := tabwriter.NewWriter(dockerCli.Out(), 0, 0, 1, ' ', 0)
104104
fmt.Fprintf(w, "NAME/NODE\tDRIVER/ENDPOINT\tSTATUS\tBUILDKIT\tPLATFORMS\n")
105105

106106
currentSet := false
107+
printErr := false
107108
for _, b := range builders {
108109
if !currentSet && b.ng.Name == currentName {
109110
b.ng.Name += " *"
110111
currentSet = true
111112
}
112-
printngi(w, b)
113+
if ok := printngi(w, b); !ok {
114+
printErr = true
115+
}
113116
}
114117

115118
w.Flush()
116119

120+
if printErr {
121+
_, _ = fmt.Fprintf(dockerCli.Err(), "\n")
122+
for _, b := range builders {
123+
if b.err != nil {
124+
_, _ = fmt.Fprintf(dockerCli.Err(), "Cannot load builder %s: %s\n", b.ng.Name, strings.TrimSpace(b.err.Error()))
125+
} else {
126+
for idx, n := range b.ng.Nodes {
127+
d := b.drivers[idx]
128+
var nodeErr string
129+
if d.err != nil {
130+
nodeErr = d.err.Error()
131+
} else if d.di.Err != nil {
132+
nodeErr = d.di.Err.Error()
133+
}
134+
if nodeErr != "" {
135+
_, _ = fmt.Fprintf(dockerCli.Err(), "Failed to get status for %s (%s): %s\n", b.ng.Name, n.Name, strings.TrimSpace(nodeErr))
136+
}
137+
}
138+
}
139+
}
140+
}
141+
117142
return nil
118143
}
119144

120-
func printngi(w io.Writer, ngi *nginfo) {
145+
func printngi(w io.Writer, ngi *nginfo) (ok bool) {
146+
ok = true
121147
var err string
122148
if ngi.err != nil {
123-
err = ngi.err.Error()
149+
ok = false
150+
err = "error"
124151
}
125152
fmt.Fprintf(w, "%s\t%s\t%s\t\t\n", ngi.ng.Name, ngi.ng.Driver, err)
126153
if ngi.err == nil {
127154
for idx, n := range ngi.ng.Nodes {
128155
d := ngi.drivers[idx]
129-
var err string
130-
if d.err != nil {
131-
err = d.err.Error()
132-
} else if d.di.Err != nil {
133-
err = d.di.Err.Error()
134-
}
135156
var status string
136157
if d.info != nil {
137158
status = d.info.Status.String()
138159
}
139-
if err != "" {
140-
fmt.Fprintf(w, " %s\t%s\t%s\n", n.Name, n.Endpoint, err)
160+
if d.err != nil || d.di.Err != nil {
161+
ok = false
162+
fmt.Fprintf(w, " %s\t%s\t%s\t\t\n", n.Name, n.Endpoint, "error")
141163
} else {
142164
fmt.Fprintf(w, " %s\t%s\t%s\t%s\t%s\n", n.Name, n.Endpoint, status, d.version, strings.Join(platformutil.FormatInGroups(n.Platforms, d.platforms), ", "))
143165
}
144166
}
145167
}
168+
return
146169
}
147170

148171
func lsCmd(dockerCli command.Cli) *cobra.Command {

0 commit comments

Comments
 (0)