diff --git a/api/client/commands.go b/api/client/commands.go index e86bab8f35832..2f677170cb665 100644 --- a/api/client/commands.go +++ b/api/client/commands.go @@ -17,6 +17,7 @@ import ( "runtime" "strconv" "strings" + "sync" "syscall" "text/tabwriter" "text/template" @@ -28,10 +29,10 @@ import ( "github.com/docker/docker/engine" "github.com/docker/docker/hosts" "github.com/docker/docker/hosts/drivers" + _ "github.com/docker/docker/hosts/drivers/azure" _ "github.com/docker/docker/hosts/drivers/digitalocean" _ "github.com/docker/docker/hosts/drivers/none" _ "github.com/docker/docker/hosts/drivers/virtualbox" - _ "github.com/docker/docker/hosts/drivers/azure" "github.com/docker/docker/nat" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/log" @@ -2560,39 +2561,49 @@ func (cli *DockerCli) CmdHostsList(args ...string) error { if !*quiet { fmt.Fprintln(w, "NAME\tACTIVE\tDRIVER\tSTATE\tURL") } - // w.Flush() + + wg := sync.WaitGroup{} for _, host := range hostList { + host := host if *quiet { fmt.Fprintf(w, "%s\n", host.Name) } else { - isActive, err := store.IsActive(&host) - if err != nil { - log.Errorf("error determining whether host %q is active: %s", - host.Name, err) - } + wg.Add(1) + go func() { + currentState, err := host.Driver.GetState() + if err != nil { + log.Errorf("error getting state for host %s: %s", host.Name, err) + } - activeString := "" - if isActive { - activeString = "*" - } + if err = host.SaveConfig(); err != nil { + log.Errorf("error saving host config after learning state: %s", err) + } - state, err := host.Driver.GetState() - if err != nil { - log.Errorf("error getting state for host %s: %s", host.Name, err) - } + url, err := host.Driver.GetURL() + if err != nil { + log.Errorf("error getting URL for host %s: %s", host.Name, err) + } - url, err := host.Driver.GetURL() - if err != nil { - log.Errorf("error getting URL for host %s: %s", host.Name, err) - } + isActive, err := store.IsActive(&host) + if err != nil { + log.Errorf("error determining whether host %q is active: %s", + host.Name, err) + } + + activeString := "" + if isActive { + activeString = "*" + } - fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\n", - host.Name, activeString, host.Driver.DriverName(), state.String(), url) - // w.Flush() + fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\n", + host.Name, activeString, host.Driver.DriverName(), currentState, url) + wg.Done() + }() } } + wg.Wait() w.Flush() return nil