From aeda0ec0391c211216cc467953396145b0d2dfa7 Mon Sep 17 00:00:00 2001 From: sophia Date: Fri, 7 Jan 2022 12:41:59 -0600 Subject: [PATCH] Pass error status with job completion results --- internal/core/error.go | 10 ++++++++++ internal/core/project.go | 4 ++++ internal/runner/operation_run.go | 5 +---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/internal/core/error.go b/internal/core/error.go index bac2db5eb..9a84e43a3 100644 --- a/internal/core/error.go +++ b/internal/core/error.go @@ -2,16 +2,20 @@ package core import ( "fmt" + + "google.golang.org/genproto/googleapis/rpc/status" ) type CommandError interface { error ExitCode() int32 + Status() *status.Status } type runError struct { err error exitCode int32 + status *status.Status } // Error implements error @@ -22,6 +26,12 @@ func (r *runError) Error() string { return fmt.Sprintf("non-zero exit code: %d", r.exitCode) } +// runError implements CommandError func (r *runError) ExitCode() int32 { return r.exitCode } + +// runError implements CommandError +func (r *runError) Status() *status.Status { + return r.status +} diff --git a/internal/core/project.go b/internal/core/project.go index 81b407fb8..355364ce1 100644 --- a/internal/core/project.go +++ b/internal/core/project.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/go-argmapper" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-multierror" + "google.golang.org/grpc/status" "github.com/hashicorp/vagrant-plugin-sdk/component" "github.com/hashicorp/vagrant-plugin-sdk/core" @@ -298,6 +299,9 @@ func (p *Project) Run(ctx context.Context, task *vagrant_server.Task) (err error cmdErr := &runError{} if err != nil { cmdErr.err = err + if st, ok := status.FromError(err); ok { + cmdErr.status = st.Proto() + } } if result != nil { cmdErr.exitCode = result.(int32) diff --git a/internal/runner/operation_run.go b/internal/runner/operation_run.go index ce8ca1622..186d2728c 100644 --- a/internal/runner/operation_run.go +++ b/internal/runner/operation_run.go @@ -3,8 +3,6 @@ package runner import ( "context" - "google.golang.org/grpc/status" - "github.com/hashicorp/vagrant/internal/core" "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" ) @@ -37,8 +35,7 @@ func (r *Runner) executeRunOp( jrr.RunResult = err == nil if err != nil { - st, _ := status.FromError(err) - jrr.RunError = st.Proto() + jrr.RunError = err.(core.CommandError).Status() if cmdErr, ok := err.(core.CommandError); ok { jrr.ExitCode = int32(cmdErr.ExitCode()) }