From 749f296bcfe19b10bf14603857404213336310bd Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Mon, 19 Apr 2021 17:58:39 +0200 Subject: [PATCH] [skip changelog] Add gRPC status unwrapping in error feedback --- cli/feedback/feedback.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cli/feedback/feedback.go b/cli/feedback/feedback.go index 810f079b6b2..c97a5f4c1fe 100644 --- a/cli/feedback/feedback.go +++ b/cli/feedback/feedback.go @@ -17,11 +17,13 @@ package feedback import ( "encoding/json" + "errors" "fmt" "io" "os" "github.com/sirupsen/logrus" + "google.golang.org/grpc/status" ) // OutputFormat is used to determine the output format @@ -102,6 +104,16 @@ func (fb *Feedback) Print(v interface{}) { // Errorf behaves like fmt.Printf but writes on the error writer and adds a // newline. It also logs the error. func (fb *Feedback) Errorf(format string, v ...interface{}) { + // Unbox grpc status errors + for i := range v { + if s, isStatus := v[i].(*status.Status); isStatus { + v[i] = errors.New(s.Message()) + } else if err, isErr := v[i].(error); isErr { + if s, isStatus := status.FromError(err); isStatus { + v[i] = errors.New(s.Message()) + } + } + } fb.Error(fmt.Sprintf(format, v...)) }