diff options
author | haircommander <pehunt@redhat.com> | 2018-06-05 14:21:41 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-06-07 18:20:19 +0000 |
commit | d7f9781bd6cef1373227585bb3b71f557b818822 (patch) | |
tree | 32fa1f268030a04b6eb2154ac3b26dfde8f9f604 | |
parent | cf7c8295b8875ddd4fe87a4207aa302efbd90b18 (diff) | |
download | podman-d7f9781bd6cef1373227585bb3b71f557b818822.tar.gz podman-d7f9781bd6cef1373227585bb3b71f557b818822.tar.bz2 podman-d7f9781bd6cef1373227585bb3b71f557b818822.zip |
Propegate exit code on Exec calls and integrated test
Signed-off-by: haircommander <pehunt@redhat.com>
Closes: #904
Approved by: rhatdan
-rw-r--r-- | cmd/podman/main.go | 8 | ||||
-rw-r--r-- | test/e2e/exec_test.go | 9 |
2 files changed, 17 insertions, 0 deletions
diff --git a/cmd/podman/main.go b/cmd/podman/main.go index d4c437706..8edecffb3 100644 --- a/cmd/podman/main.go +++ b/cmd/podman/main.go @@ -3,7 +3,9 @@ package main import ( "fmt" "os" + "os/exec" "runtime/pprof" + "syscall" "github.com/containers/storage/pkg/reexec" "github.com/pkg/errors" @@ -175,6 +177,12 @@ func main() { if debug { logrus.Errorf(err.Error()) } else { + // Retrieve the exit error from the exec call, if it exists + if ee, ok := err.(*exec.ExitError); ok { + if status, ok := ee.Sys().(syscall.WaitStatus); ok { + exitCode = status.ExitStatus() + } + } fmt.Fprintln(os.Stderr, err.Error()) } } else { diff --git a/test/e2e/exec_test.go b/test/e2e/exec_test.go index c64c8666c..510fc81aa 100644 --- a/test/e2e/exec_test.go +++ b/test/e2e/exec_test.go @@ -86,5 +86,14 @@ var _ = Describe("Podman exec", func() { os.Unsetenv("FOO") }) + It("podman exec exit code", func() { + setup := podmanTest.RunTopContainer("test1") + setup.WaitWithDefaultTimeout() + Expect(setup.ExitCode()).To(Equal(0)) + + session := podmanTest.Podman([]string{"exec", "test1", "sh", "-c", "exit 100"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(100)) + }) }) |