podman wait: return 0 if container never ran

Make sure to return/exit with 0 when waiting for a container that never
ran.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
This commit is contained in:
Valentin Rothberg
2022-07-08 15:17:43 +02:00
parent b41e42f42b
commit 62cdc387de
3 changed files with 16 additions and 1 deletions

View File

@ -551,6 +551,10 @@ func (c *Container) WaitForExit(ctx context.Context, pollInterval time.Duration)
exitCode, err := c.runtime.state.GetContainerExitCode(id)
if err != nil {
if errors.Is(err, define.ErrNoSuchExitCode) && c.ensureState(define.ContainerStateConfigured, define.ContainerStateCreated) {
// The container never ran.
return true, 0, nil
}
return true, -1, err
}

View File

@ -303,7 +303,7 @@ func (r *ConmonOCIRuntime) UpdateContainerStatus(ctr *Container) error {
ctr.state.ExitCode = -1
ctr.state.FinishedTime = time.Now()
ctr.state.State = define.ContainerStateExited
return nil
return ctr.runtime.state.AddContainerExitCode(ctr.ID(), ctr.state.ExitCode)
}
return fmt.Errorf("error getting container %s state. stderr/out: %s: %w", ctr.ID(), out, err)
}

View File

@ -140,4 +140,15 @@ load helpers
run_podman rm -f $random_name
}
@test "podman wait - exit codes" {
random_name=$(random_string 10)
run_podman create --name=$random_name $IMAGE /no/such/command
# Container never ran -> exit code == 0
run_podman wait $random_name
# Container did not start successfully -> exit code != 0
run_podman 125 start $random_name
# FIXME(#14873): while older Podmans return 0 on wait, Docker does not.
run_podman wait $random_name
}
# vim: filetype=sh