diff --git a/common/weave/client.go b/common/weave/client.go index eb21af3cb..77aba87b8 100644 --- a/common/weave/client.go +++ b/common/weave/client.go @@ -4,6 +4,7 @@ import ( "bufio" "bytes" "fmt" + "io/ioutil" "net" "net/http" "net/url" @@ -164,7 +165,11 @@ func (c *client) AddDNSEntry(fqdn, containerID string, ip net.IP) error { func (c *client) PS() (map[string]PSEntry, error) { cmd := weaveCommand("--local", "ps") - out, err := cmd.StdoutPipe() + stdOut, err := cmd.StdoutPipe() + if err != nil { + return nil, err + } + stdErr, err := cmd.StderrPipe() if err != nil { return nil, err } @@ -173,7 +178,7 @@ func (c *client) PS() (map[string]PSEntry, error) { } psEntriesByPrefix := map[string]PSEntry{} - scanner := bufio.NewScanner(out) + scanner := bufio.NewScanner(stdOut) for scanner.Scan() { line := scanner.Text() groups := weavePsMatch.FindStringSubmatch(line) @@ -193,7 +198,8 @@ func (c *client) PS() (map[string]PSEntry, error) { scannerErr := scanner.Err() cmdErr := cmd.Wait() if cmdErr != nil { - return nil, cmdErr + slurp, _ := ioutil.ReadAll(stdErr) + return nil, fmt.Errorf("%s: %q", cmdErr, slurp) } if scannerErr != nil { return nil, scannerErr @@ -202,17 +208,29 @@ func (c *client) PS() (map[string]PSEntry, error) { } func (c *client) Expose() error { - output, err := weaveCommand("--local", "ps", "weave:expose").Output() + cmd := weaveCommand("--local", "ps", "weave:expose") + stdErr, err := cmd.StderrPipe() if err != nil { return err } + output, err := cmd.Output() + if err != nil { + slurp, _ := ioutil.ReadAll(stdErr) + return fmt.Errorf("Error running weave ps: %s: %q", err, slurp) + } ips := ipMatch.FindAllSubmatch(output, -1) if ips != nil { // Alread exposed! return nil } - if err := weaveCommand("--local", "expose").Run(); err != nil { - return fmt.Errorf("Error running weave expose: %v", err) + cmd = weaveCommand("--local", "expose") + stdErr, err = cmd.StderrPipe() + if err != nil { + return err + } + if err := cmd.Run(); err != nil { + slurp, _ := ioutil.ReadAll(stdErr) + return fmt.Errorf("Error running weave expose: %s: %q", err, slurp) } return nil }