Improve error reporting when invoking weave script

This commit is contained in:
Alfonso Acosta
2017-03-15 10:45:43 +00:00
parent 2fe3216e0a
commit 31def70fc9

View File

@@ -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
}