Merge pull request #16513 from vrothberg/fix-16502

remove pod if creation has failed
This commit is contained in:
OpenShift Merge Robot
2022-11-15 21:54:57 +00:00
committed by GitHub
2 changed files with 24 additions and 1 deletions

View File

@ -18,7 +18,15 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
func MakePod(p *entities.PodSpec, rt *libpod.Runtime) (*libpod.Pod, error) { func MakePod(p *entities.PodSpec, rt *libpod.Runtime) (_ *libpod.Pod, finalErr error) {
var createdPod *libpod.Pod
defer func() {
if finalErr != nil && createdPod != nil {
if err := rt.RemovePod(context.Background(), createdPod, true, true, nil); err != nil {
logrus.Errorf("Removing pod: %v", err)
}
}
}()
if err := p.PodSpecGen.Validate(); err != nil { if err := p.PodSpecGen.Validate(); err != nil {
return nil, err return nil, err
} }
@ -69,6 +77,8 @@ func MakePod(p *entities.PodSpec, rt *libpod.Runtime) (*libpod.Pod, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
createdPod = pod
if !p.PodSpecGen.NoInfra && p.PodSpecGen.InfraContainerSpec != nil { if !p.PodSpecGen.NoInfra && p.PodSpecGen.InfraContainerSpec != nil {
if p.PodSpecGen.InfraContainerSpec.Name == "" { if p.PodSpecGen.InfraContainerSpec.Name == "" {
p.PodSpecGen.InfraContainerSpec.Name = pod.ID()[:12] + "-infra" p.PodSpecGen.InfraContainerSpec.Name = pod.ID()[:12] + "-infra"

View File

@ -554,4 +554,17 @@ io.max | $lomajmin rbps=1048576 wbps=1048576 riops=max wiops=max
is "$output" "" "Should print no output" is "$output" "" "Should print no output"
} }
@test "podman pod create on failure" {
podname=pod$(random_string)
nwname=pod$(random_string)
run_podman 125 pod create --network $nwname --name $podname
# FIXME: podman and podman-remote do not return the same error message
# but consistency would be nice
is "$output" "Error: .*unable to find network with name or ID $nwname: network not found"
# Make sure the pod doesn't get created on failure
run_podman 1 pod exists $podname
}
# vim: filetype=sh # vim: filetype=sh