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...)) }