mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
When removing objects specifying --force,podman should exit with 0
This Patch will cause podman COMMAND rm --force bogus not fail This is how Docker works, so Podman should follow this to allow existing scripts to convert from Docker to Podman. Fixes: #14612 Oprignal version of this patch came from wufan 1991849113@qq.com Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:

committed by
Matthew Heon

parent
312bef288b
commit
32848b95f6
@ -126,6 +126,9 @@ func removeContainers(namesOrIDs []string, rmOptions entities.RmOptions, setExit
|
|||||||
var errs utils.OutputErrors
|
var errs utils.OutputErrors
|
||||||
responses, err := registry.ContainerEngine().ContainerRm(context.Background(), namesOrIDs, rmOptions)
|
responses, err := registry.ContainerEngine().ContainerRm(context.Background(), namesOrIDs, rmOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchCtr.Error()) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if setExit {
|
if setExit {
|
||||||
setExitCode(err)
|
setExitCode(err)
|
||||||
}
|
}
|
||||||
@ -136,6 +139,9 @@ func removeContainers(namesOrIDs []string, rmOptions entities.RmOptions, setExit
|
|||||||
if errors.Is(r.Err, define.ErrWillDeadlock) {
|
if errors.Is(r.Err, define.ErrWillDeadlock) {
|
||||||
logrus.Errorf("Potential deadlock detected - please run 'podman system renumber' to resolve")
|
logrus.Errorf("Potential deadlock detected - please run 'podman system renumber' to resolve")
|
||||||
}
|
}
|
||||||
|
if rmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchCtr.Error()) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if setExit {
|
if setExit {
|
||||||
setExitCode(r.Err)
|
setExitCode(r.Err)
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,14 @@ package images
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/containers/podman/v4/cmd/podman/common"
|
"github.com/containers/podman/v4/cmd/podman/common"
|
||||||
"github.com/containers/podman/v4/cmd/podman/registry"
|
"github.com/containers/podman/v4/cmd/podman/registry"
|
||||||
|
"github.com/containers/podman/v4/cmd/podman/utils"
|
||||||
"github.com/containers/podman/v4/pkg/domain/entities"
|
"github.com/containers/podman/v4/pkg/domain/entities"
|
||||||
"github.com/containers/podman/v4/pkg/errorhandling"
|
"github.com/containers/podman/v4/pkg/errorhandling"
|
||||||
|
"github.com/containers/storage/types"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
)
|
)
|
||||||
@ -81,8 +84,19 @@ func rm(cmd *cobra.Command, args []string) error {
|
|||||||
fmt.Println("Deleted: " + d)
|
fmt.Println("Deleted: " + d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for _, err := range rmErrors {
|
||||||
|
if !imageOpts.Force || !strings.Contains(err.Error(), types.ErrImageUnknown.Error()) {
|
||||||
registry.SetExitCode(report.ExitCode)
|
registry.SetExitCode(report.ExitCode)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return errorhandling.JoinErrors(rmErrors)
|
}
|
||||||
|
|
||||||
|
var errs utils.OutputErrors
|
||||||
|
for _, err := range rmErrors {
|
||||||
|
if imageOpts.Force && strings.Contains(err.Error(), types.ErrImageUnknown.Error()) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
errs = append(errs, err)
|
||||||
|
}
|
||||||
|
return errorhandling.JoinErrors(errs)
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,9 @@ func networkRm(cmd *cobra.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
responses, err := registry.ContainerEngine().NetworkRm(registry.Context(), args, networkRmOptions)
|
responses, err := registry.ContainerEngine().NetworkRm(registry.Context(), args, networkRmOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if networkRmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchNetwork.Error()) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
setExitCode(err)
|
setExitCode(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -70,6 +73,9 @@ func networkRm(cmd *cobra.Command, args []string) error {
|
|||||||
if r.Err == nil {
|
if r.Err == nil {
|
||||||
fmt.Println(r.Name)
|
fmt.Println(r.Name)
|
||||||
} else {
|
} else {
|
||||||
|
if networkRmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchNetwork.Error()) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
setExitCode(r.Err)
|
setExitCode(r.Err)
|
||||||
errs = append(errs, r.Err)
|
errs = append(errs, r.Err)
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,9 @@ func removePods(namesOrIDs []string, rmOptions entities.PodRmOptions, printIDs b
|
|||||||
|
|
||||||
responses, err := registry.ContainerEngine().PodRm(context.Background(), namesOrIDs, rmOptions)
|
responses, err := registry.ContainerEngine().PodRm(context.Background(), namesOrIDs, rmOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchPod.Error()) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
setExitCode(err)
|
setExitCode(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -104,13 +107,15 @@ func removePods(namesOrIDs []string, rmOptions entities.PodRmOptions, printIDs b
|
|||||||
fmt.Println(r.Id)
|
fmt.Println(r.Id)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if rmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchPod.Error()) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
setExitCode(r.Err)
|
setExitCode(r.Err)
|
||||||
errs = append(errs, r.Err)
|
errs = append(errs, r.Err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return errs.PrintErrors()
|
return errs.PrintErrors()
|
||||||
}
|
}
|
||||||
|
|
||||||
func setExitCode(err error) {
|
func setExitCode(err error) {
|
||||||
if errors.Is(err, define.ErrNoSuchPod) || strings.Contains(err.Error(), define.ErrNoSuchPod.Error()) {
|
if errors.Is(err, define.ErrNoSuchPod) || strings.Contains(err.Error(), define.ErrNoSuchPod.Error()) {
|
||||||
registry.SetExitCode(1)
|
registry.SetExitCode(1)
|
||||||
|
@ -65,6 +65,9 @@ func rm(cmd *cobra.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
responses, err := registry.ContainerEngine().VolumeRm(context.Background(), args, rmOptions)
|
responses, err := registry.ContainerEngine().VolumeRm(context.Background(), args, rmOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchVolume.Error()) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
setExitCode(err)
|
setExitCode(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -72,6 +75,9 @@ func rm(cmd *cobra.Command, args []string) error {
|
|||||||
if r.Err == nil {
|
if r.Err == nil {
|
||||||
fmt.Println(r.Id)
|
fmt.Println(r.Id)
|
||||||
} else {
|
} else {
|
||||||
|
if rmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchVolume.Error()) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
setExitCode(r.Err)
|
setExitCode(r.Err)
|
||||||
errs = append(errs, r.Err)
|
errs = append(errs, r.Err)
|
||||||
}
|
}
|
||||||
|
@ -317,4 +317,11 @@ Deleted: $pauseID"
|
|||||||
is "$output" ""
|
is "$output" ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "podman image rm --force bogus" {
|
||||||
|
run_podman 1 image rm bogus
|
||||||
|
is "$output" "Error: bogus: image not known" "Should print error"
|
||||||
|
run_podman image rm --force bogus
|
||||||
|
is "$output" "" "Should print no output"
|
||||||
|
}
|
||||||
|
|
||||||
# vim: filetype=sh
|
# vim: filetype=sh
|
||||||
|
@ -96,4 +96,11 @@ load helpers
|
|||||||
run_podman 137 run --name $rand $IMAGE sleep 30
|
run_podman 137 run --name $rand $IMAGE sleep 30
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "podman container rm --force bogus" {
|
||||||
|
run_podman 1 container rm bogus
|
||||||
|
is "$output" "Error: no container with name or ID \"bogus\" found: no such container" "Should print error"
|
||||||
|
run_podman container rm --force bogus
|
||||||
|
is "$output" "" "Should print no output"
|
||||||
|
}
|
||||||
|
|
||||||
# vim: filetype=sh
|
# vim: filetype=sh
|
||||||
|
@ -473,4 +473,11 @@ EOF
|
|||||||
run_podman image rm --force localhost/volume_image
|
run_podman image rm --force localhost/volume_image
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "podman volume rm --force bogus" {
|
||||||
|
run_podman 1 volume rm bogus
|
||||||
|
is "$output" "Error: no volume with name \"bogus\" found: no such volume" "Should print error"
|
||||||
|
run_podman volume rm --force bogus
|
||||||
|
is "$output" "" "Should print no output"
|
||||||
|
}
|
||||||
|
|
||||||
# vim: filetype=sh
|
# vim: filetype=sh
|
||||||
|
@ -517,4 +517,11 @@ spec:
|
|||||||
wait
|
wait
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "podman pod rm --force bogus" {
|
||||||
|
run_podman 1 pod rm bogus
|
||||||
|
is "$output" "Error: .*bogus.*: no such pod" "Should print error"
|
||||||
|
run_podman pod rm --force bogus
|
||||||
|
is "$output" "" "Should print no output"
|
||||||
|
}
|
||||||
|
|
||||||
# vim: filetype=sh
|
# vim: filetype=sh
|
||||||
|
@ -259,7 +259,7 @@ load helpers
|
|||||||
|
|
||||||
run_podman rm -t 0 -f $cid
|
run_podman rm -t 0 -f $cid
|
||||||
run_podman network rm $mynetname
|
run_podman network rm $mynetname
|
||||||
run_podman 1 network rm -f $mynetname
|
run_podman 1 network rm $mynetname
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "podman network reload" {
|
@test "podman network reload" {
|
||||||
@ -758,4 +758,11 @@ EOF
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "podman network rm --force bogus" {
|
||||||
|
run_podman 1 network rm bogus
|
||||||
|
is "$output" "Error: unable to find network with name or ID bogus: network not found" "Should print error"
|
||||||
|
run_podman network rm --force bogus
|
||||||
|
is "$output" "" "Should print no output"
|
||||||
|
}
|
||||||
|
|
||||||
# vim: filetype=sh
|
# vim: filetype=sh
|
||||||
|
Reference in New Issue
Block a user