mirror of https://github.com/containers/podman.git
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/common/pkg/config"
|
||||||
"github.com/containers/podman/v2/cmd/podman/registry"
|
"github.com/containers/podman/v2/cmd/podman/registry"
|
||||||
"github.com/containers/podman/v2/cmd/podman/validate"
|
"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/domain/entities"
|
||||||
"github.com/containers/podman/v2/pkg/parallel"
|
"github.com/containers/podman/v2/pkg/parallel"
|
||||||
"github.com/containers/podman/v2/pkg/rootless"
|
"github.com/containers/podman/v2/pkg/rootless"
|
||||||
|
@ -84,7 +85,7 @@ func init() {
|
||||||
|
|
||||||
func Execute() {
|
func Execute() {
|
||||||
if err := rootCmd.ExecuteContext(registry.GetContextWithOptions()); err != nil {
|
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 {
|
} else if registry.GetExitCode() == registry.ExecErrorCodeGeneric {
|
||||||
// The exitCode modified from registry.ExecErrorCodeGeneric,
|
// The exitCode modified from registry.ExecErrorCodeGeneric,
|
||||||
// indicates an application
|
// indicates an application
|
||||||
|
@ -331,3 +332,19 @@ func resolveDestination() (string, string, string) {
|
||||||
}
|
}
|
||||||
return cfg.Engine.ActiveService, uri, ident
|
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
|
||||||
|
}
|
||||||
|
|
|
@ -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 New Issue