@@ -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\t DRIVER/ENDPOINT\t STATUS\t BUILDKIT\t PLATFORMS\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
148171func lsCmd (dockerCli command.Cli ) * cobra.Command {
0 commit comments