mirror of
https://github.com/containers/podman.git
synced 2025-12-05 12:52:12 +08:00
Fix handling of exit codes
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com> Closes: #183 Approved by: TomSweeneyRedHat
This commit is contained in:
committed by
Atomic Bot
parent
137e5c8ffd
commit
b231e3412e
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user