diff --git a/.changelog/18444.txt b/.changelog/18444.txt new file mode 100644 index 000000000..f52f630c0 --- /dev/null +++ b/.changelog/18444.txt @@ -0,0 +1,3 @@ +```release-note:improvement +status: go-getter failure reason now shown in `alloc status` +``` diff --git a/client/allocrunner/taskrunner/getter/util.go b/client/allocrunner/taskrunner/getter/util.go index fb34fc93e..04bdb3b38 100644 --- a/client/allocrunner/taskrunner/getter/util.go +++ b/client/allocrunner/taskrunner/getter/util.go @@ -143,10 +143,11 @@ func (s *Sandbox) runCmd(env *parameters) error { // start & wait for the subprocess to terminate if err := cmd.Run(); err != nil { - subproc.Log(output, s.logger.Error) + msg := subproc.Log(output, s.logger.Error) + return &Error{ URL: env.Source, - Err: fmt.Errorf("getter subprocess failed: %v", err), + Err: fmt.Errorf("getter subprocess failed: %v: %v", err, msg), Recoverable: true, } } diff --git a/helper/subproc/subproc.go b/helper/subproc/subproc.go index be8e6cf08..adeae700d 100644 --- a/helper/subproc/subproc.go +++ b/helper/subproc/subproc.go @@ -10,6 +10,7 @@ import ( "io" "os" "time" + "strings" ) const ( @@ -45,12 +46,15 @@ func Print(format string, args ...any) { // // r should be a buffer containing output (typically combined stdin + stdout) // f should be an HCLogger Print method (e.g. log.Debug) -func Log(r io.Reader, f func(msg string, args ...any)) { +func Log(r io.Reader, f func(msg string, args ...any)) string { scanner := bufio.NewScanner(r) + lines := "" for scanner.Scan() { line := scanner.Text() + lines += line + "\n" f("sub-process", "OUTPUT", line) } + return strings.TrimSpace(lines) } // Context creates a context setup with the given timeout.