mirror of
https://github.com/containers/podman.git
synced 2025-09-27 16:54:42 +08:00

This enables programs and scripts wrapping the podman command to handle 'podman rm' and 'podman rmi' failures caused by paused or running containers or due to images having other child images or dependent containers. These errors are common enough that it makes sense to have a more machine readable way of detecting them than parsing the standard error output. Signed-off-by: Ondrej Zoder <ozoder@redhat.com> Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
40 lines
679 B
Go
40 lines
679 B
Go
// +build !remoteclient
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"syscall"
|
|
|
|
"github.com/containers/libpod/libpod/define"
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func outputError(err error) {
|
|
if MainGlobalOpts.LogLevel == "debug" {
|
|
logrus.Errorf(err.Error())
|
|
} else {
|
|
ee, ok := err.(*exec.ExitError)
|
|
if ok {
|
|
if status, ok := ee.Sys().(syscall.WaitStatus); ok {
|
|
exitCode = status.ExitStatus()
|
|
}
|
|
}
|
|
fmt.Fprintln(os.Stderr, "Error:", err.Error())
|
|
}
|
|
}
|
|
|
|
func setExitCode(err error) int {
|
|
cause := errors.Cause(err)
|
|
switch cause {
|
|
case define.ErrNoSuchCtr:
|
|
return 1
|
|
case define.ErrCtrStateInvalid:
|
|
return 2
|
|
}
|
|
return exitCode
|
|
}
|