diff --git a/pkg/kubelet/rkt/rkt.go b/pkg/kubelet/rkt/rkt.go index 36c5b6b8e0b..9ae6f824db4 100644 --- a/pkg/kubelet/rkt/rkt.go +++ b/pkg/kubelet/rkt/rkt.go @@ -27,6 +27,7 @@ import ( "path" "strconv" "strings" + "syscall" "time" appcschema "github.com/appc/spec/schema" @@ -46,6 +47,7 @@ import ( "k8s.io/kubernetes/pkg/securitycontext" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util" + utilexec "k8s.io/kubernetes/pkg/util/exec" ) const ( @@ -1108,8 +1110,25 @@ func (r *Runtime) RunInContainer(containerID string, cmd []string) ([]byte, erro args := append([]string{}, "enter", fmt.Sprintf("--app=%s", id.appName), id.uuid) args = append(args, cmd...) - result, err := r.runCommand(args...) - return []byte(strings.Join(result, "\n")), err + result, err := r.buildCommand(args...).CombinedOutput() + if err != nil { + if exitErr, ok := err.(*exec.ExitError); ok { + err = &rktExitError{exitErr} + } + } + return result, err +} + +// rktExitError implemets /pkg/util/exec.ExitError interface. +type rktExitError struct{ *exec.ExitError } + +var _ utilexec.ExitError = &rktExitError{} + +func (r *rktExitError) ExitStatus() int { + if status, ok := r.Sys().(syscall.WaitStatus); ok { + return status.ExitStatus() + } + return 0 } func (r *Runtime) AttachContainer(containerID string, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool) error {