Fix handling of exit codes

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #183
Approved by: TomSweeneyRedHat
This commit is contained in:
Daniel J Walsh
2018-01-04 08:53:46 -05:00
committed by Atomic Bot
parent 137e5c8ffd
commit b231e3412e
15 changed files with 103 additions and 21 deletions

View File

@@ -13,7 +13,10 @@ import (
// This is populated by the Makefile from the VERSION file
// in the repository
var podmanVersion = ""
var (
podmanVersion = ""
exitCode = 125
)
func main() {
debug := false
@@ -152,5 +155,14 @@ func main() {
} else {
fmt.Fprintln(os.Stderr, err.Error())
}
} else {
// The exitCode modified from 125, indicates an application
// running inside of a container failed, as opposed to the
// podman command failed. Must exit with that exit code
// otherwise command exited correctly.
if exitCode == 125 {
exitCode = 0
}
}
os.Exit(exitCode)
}

View File

@@ -3,6 +3,7 @@ package main
import (
"encoding/json"
"fmt"
"strings"
"sync"
"github.com/pkg/errors"
@@ -62,6 +63,11 @@ func runCmd(c *cli.Context) error {
logrus.Debug("new container created ", ctr.ID())
if err := ctr.Init(); err != nil {
// This means the command did not exist
exitCode = 126
if strings.Index(err.Error(), "permission denied") > -1 {
exitCode = 127
}
return err
}
logrus.Debugf("container storage created for %q", ctr.ID())
@@ -109,9 +115,15 @@ func runCmd(c *cli.Context) error {
}
if createConfig.Detach {
fmt.Printf("%s\n", ctr.ID())
exitCode = 0
return nil
}
wg.Wait()
if ecode, err := ctr.ExitCode(); err != nil {
logrus.Errorf("unable to get exit code of container %s: %q", ctr.ID(), err)
} else {
exitCode = int(ecode)
}
if createConfig.Rm {
return runtime.RemoveContainer(ctr, true)

View File

@@ -126,6 +126,11 @@ func startCmd(c *cli.Context) error {
fmt.Println(ctr.ID())
}
wg.Wait()
if ecode, err := ctr.ExitCode(); err != nil {
logrus.Errorf("unable to get exit code of container %s: %q", ctr.ID(), err)
} else {
exitCode = int(ecode)
}
}
return lastError
}