Make Vagrant driver code pass through logs as it receives them rather than buffering and returning them all at the end of the call.
This commit is contained in:
parent
ce248c9df4
commit
a7be0bed30
|
@ -8,6 +8,7 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/go-version"
|
"github.com/hashicorp/go-version"
|
||||||
)
|
)
|
||||||
|
@ -197,17 +198,53 @@ func (d *Vagrant_2_2_Driver) vagrantCmd(args ...string) (string, string, error)
|
||||||
cmd.Env = append(os.Environ(), fmt.Sprintf("VAGRANT_CWD=%s", d.VagrantCWD))
|
cmd.Env = append(os.Environ(), fmt.Sprintf("VAGRANT_CWD=%s", d.VagrantCWD))
|
||||||
cmd.Stdout = &stdout
|
cmd.Stdout = &stdout
|
||||||
cmd.Stderr = &stderr
|
cmd.Stderr = &stderr
|
||||||
err := cmd.Run()
|
|
||||||
|
|
||||||
stdoutString := strings.TrimSpace(stdout.String())
|
cmd.Start()
|
||||||
stderrString := strings.TrimSpace(stderr.String())
|
|
||||||
|
stdoutString := ""
|
||||||
|
stderrString := ""
|
||||||
|
|
||||||
|
donech := make(chan bool)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-donech:
|
||||||
|
line := stdout.String()
|
||||||
|
if line != "" {
|
||||||
|
log.Printf("[vagrant driver] stdout: %s", line)
|
||||||
|
}
|
||||||
|
stdoutString += line
|
||||||
|
line = stderr.String()
|
||||||
|
if line != "" {
|
||||||
|
log.Printf("[vagrant driver] stderr: %s", line)
|
||||||
|
}
|
||||||
|
stderrString += line
|
||||||
|
default:
|
||||||
|
line, _ := stdout.ReadString('\n')
|
||||||
|
if line != "" {
|
||||||
|
log.Printf("[vagrant driver] stdout: %s", line)
|
||||||
|
stdoutString += line
|
||||||
|
|
||||||
|
}
|
||||||
|
line, _ = stderr.ReadString('\n')
|
||||||
|
if line != "" {
|
||||||
|
log.Printf("[vagrant driver] stderr: %s", line)
|
||||||
|
stderrString += line
|
||||||
|
|
||||||
|
}
|
||||||
|
time.Sleep(500)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
err := cmd.Wait()
|
||||||
|
|
||||||
|
donech <- true
|
||||||
|
|
||||||
if _, ok := err.(*exec.ExitError); ok {
|
if _, ok := err.(*exec.ExitError); ok {
|
||||||
err = fmt.Errorf("Vagrant error: %s", stderrString)
|
err = fmt.Errorf("Vagrant error: %s", stderrString)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("[vagrant driver] stdout: %s", stdoutString)
|
|
||||||
log.Printf("[vagrant driver] stderr: %s", stderrString)
|
|
||||||
|
|
||||||
return stdoutString, stderrString, err
|
return stdoutString, stderrString, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ func (s *StepUp) Run(ctx context.Context, state multistep.StateBag) multistep.St
|
||||||
driver := state.Get("driver").(VagrantDriver)
|
driver := state.Get("driver").(VagrantDriver)
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
|
|
||||||
ui.Say("Calling Vagrant Up...")
|
ui.Say("Calling Vagrant Up (this can take some time)...")
|
||||||
|
|
||||||
_, _, err := driver.Up(s.generateArgs())
|
_, _, err := driver.Up(s.generateArgs())
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue