mirror of
https://github.com/containers/podman
synced 2024-10-19 16:54:07 +00:00
Merge pull request #7968 from xordspar0/oci-runtime-error
Print the correct underlying cause for OCI errors
This commit is contained in:
commit
cec240375d
|
@ -11,6 +11,7 @@ import (
|
|||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/podman/v2/cmd/podman/registry"
|
||||
"github.com/containers/podman/v2/cmd/podman/validate"
|
||||
"github.com/containers/podman/v2/libpod/define"
|
||||
"github.com/containers/podman/v2/pkg/domain/entities"
|
||||
"github.com/containers/podman/v2/pkg/parallel"
|
||||
"github.com/containers/podman/v2/pkg/rootless"
|
||||
|
@ -84,7 +85,7 @@ func init() {
|
|||
|
||||
func Execute() {
|
||||
if err := rootCmd.ExecuteContext(registry.GetContextWithOptions()); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "Error:", err.Error())
|
||||
fmt.Fprintln(os.Stderr, formatError(err))
|
||||
} else if registry.GetExitCode() == registry.ExecErrorCodeGeneric {
|
||||
// The exitCode modified from registry.ExecErrorCodeGeneric,
|
||||
// indicates an application
|
||||
|
@ -331,3 +332,19 @@ func resolveDestination() (string, string, string) {
|
|||
}
|
||||
return cfg.Engine.ActiveService, uri, ident
|
||||
}
|
||||
|
||||
func formatError(err error) string {
|
||||
var message string
|
||||
if errors.Cause(err) == define.ErrOCIRuntime {
|
||||
// OCIRuntimeErrors include the reason for the failure in the
|
||||
// second to last message in the error chain.
|
||||
message = fmt.Sprintf(
|
||||
"Error: %s: %s",
|
||||
define.ErrOCIRuntime.Error(),
|
||||
strings.TrimSuffix(err.Error(), ": "+define.ErrOCIRuntime.Error()),
|
||||
)
|
||||
} else {
|
||||
message = "Error: " + err.Error()
|
||||
}
|
||||
return message
|
||||
}
|
||||
|
|
34
cmd/podman/root_test.go
Normal file
34
cmd/podman/root_test.go
Normal file
|
@ -0,0 +1,34 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/containers/podman/v2/libpod/define"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func TestFormatError(t *testing.T) {
|
||||
err := errors.New("unknown error")
|
||||
output := formatError(err)
|
||||
expected := fmt.Sprintf("Error: %v", err)
|
||||
|
||||
if output != expected {
|
||||
t.Errorf("Expected \"%s\" to equal \"%s\"", output, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormatOCIError(t *testing.T) {
|
||||
expectedPrefix := "Error: "
|
||||
expectedSuffix := "OCI runtime output"
|
||||
err := errors.Wrap(define.ErrOCIRuntime, expectedSuffix)
|
||||
output := formatError(err)
|
||||
|
||||
if !strings.HasPrefix(output, expectedPrefix) {
|
||||
t.Errorf("Expected \"%s\" to start with \"%s\"", output, expectedPrefix)
|
||||
}
|
||||
if !strings.HasSuffix(output, expectedSuffix) {
|
||||
t.Errorf("Expected \"%s\" to end with \"%s\"", output, expectedSuffix)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue