summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2022-07-26 06:41:08 -0400
committerMatthew Heon <mheon@redhat.com>2022-08-10 16:46:05 -0400
commit32848b95f6fcf9e8dcd51f23f43846d66886f1ac (patch)
treea3b5ece563a8cc7cc096eb0703f901279dc12a39
parent312bef288bd7b7cd2e52d25e4f5911f730fad4e8 (diff)
downloadpodman-32848b95f6fcf9e8dcd51f23f43846d66886f1ac.tar.gz
podman-32848b95f6fcf9e8dcd51f23f43846d66886f1ac.tar.bz2
podman-32848b95f6fcf9e8dcd51f23f43846d66886f1ac.zip
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>
-rw-r--r--cmd/podman/containers/rm.go6
-rw-r--r--cmd/podman/images/rm.go18
-rw-r--r--cmd/podman/networks/rm.go6
-rw-r--r--cmd/podman/pods/rm.go7
-rw-r--r--cmd/podman/volumes/rm.go6
-rw-r--r--test/system/010-images.bats7
-rw-r--r--test/system/055-rm.bats7
-rw-r--r--test/system/160-volumes.bats7
-rw-r--r--test/system/200-pod.bats7
-rw-r--r--test/system/500-networking.bats9
10 files changed, 76 insertions, 4 deletions
diff --git a/cmd/podman/containers/rm.go b/cmd/podman/containers/rm.go
index 9fa688d23..056e32651 100644
--- a/cmd/podman/containers/rm.go
+++ b/cmd/podman/containers/rm.go
@@ -126,6 +126,9 @@ func removeContainers(namesOrIDs []string, rmOptions entities.RmOptions, setExit
var errs utils.OutputErrors
responses, err := registry.ContainerEngine().ContainerRm(context.Background(), namesOrIDs, rmOptions)
if err != nil {
+ if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchCtr.Error()) {
+ return nil
+ }
if setExit {
setExitCode(err)
}
@@ -136,6 +139,9 @@ func removeContainers(namesOrIDs []string, rmOptions entities.RmOptions, setExit
if errors.Is(r.Err, define.ErrWillDeadlock) {
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 {
setExitCode(r.Err)
}
diff --git a/cmd/podman/images/rm.go b/cmd/podman/images/rm.go
index 18b22e51d..d3fd17440 100644
--- a/cmd/podman/images/rm.go
+++ b/cmd/podman/images/rm.go
@@ -3,11 +3,14 @@ package images
import (
"errors"
"fmt"
+ "strings"
"github.com/containers/podman/v4/cmd/podman/common"
"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/errorhandling"
+ "github.com/containers/storage/types"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
@@ -81,8 +84,19 @@ func rm(cmd *cobra.Command, args []string) error {
fmt.Println("Deleted: " + d)
}
}
- registry.SetExitCode(report.ExitCode)
+ for _, err := range rmErrors {
+ if !imageOpts.Force || !strings.Contains(err.Error(), types.ErrImageUnknown.Error()) {
+ 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)
}
diff --git a/cmd/podman/networks/rm.go b/cmd/podman/networks/rm.go
index c2d3f655f..d734b2867 100644
--- a/cmd/podman/networks/rm.go
+++ b/cmd/podman/networks/rm.go
@@ -63,6 +63,9 @@ func networkRm(cmd *cobra.Command, args []string) error {
}
responses, err := registry.ContainerEngine().NetworkRm(registry.Context(), args, networkRmOptions)
if err != nil {
+ if networkRmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchNetwork.Error()) {
+ return nil
+ }
setExitCode(err)
return err
}
@@ -70,6 +73,9 @@ func networkRm(cmd *cobra.Command, args []string) error {
if r.Err == nil {
fmt.Println(r.Name)
} else {
+ if networkRmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchNetwork.Error()) {
+ continue
+ }
setExitCode(r.Err)
errs = append(errs, r.Err)
}
diff --git a/cmd/podman/pods/rm.go b/cmd/podman/pods/rm.go
index 2ffd968f9..0aa64481d 100644
--- a/cmd/podman/pods/rm.go
+++ b/cmd/podman/pods/rm.go
@@ -93,6 +93,9 @@ func removePods(namesOrIDs []string, rmOptions entities.PodRmOptions, printIDs b
responses, err := registry.ContainerEngine().PodRm(context.Background(), namesOrIDs, rmOptions)
if err != nil {
+ if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchPod.Error()) {
+ return nil
+ }
setExitCode(err)
return err
}
@@ -104,13 +107,15 @@ func removePods(namesOrIDs []string, rmOptions entities.PodRmOptions, printIDs b
fmt.Println(r.Id)
}
} else {
+ if rmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchPod.Error()) {
+ continue
+ }
setExitCode(r.Err)
errs = append(errs, r.Err)
}
}
return errs.PrintErrors()
}
-
func setExitCode(err error) {
if errors.Is(err, define.ErrNoSuchPod) || strings.Contains(err.Error(), define.ErrNoSuchPod.Error()) {
registry.SetExitCode(1)
diff --git a/cmd/podman/volumes/rm.go b/cmd/podman/volumes/rm.go
index c160b8623..1383da279 100644
--- a/cmd/podman/volumes/rm.go
+++ b/cmd/podman/volumes/rm.go
@@ -65,6 +65,9 @@ func rm(cmd *cobra.Command, args []string) error {
}
responses, err := registry.ContainerEngine().VolumeRm(context.Background(), args, rmOptions)
if err != nil {
+ if rmOptions.Force && strings.Contains(err.Error(), define.ErrNoSuchVolume.Error()) {
+ return nil
+ }
setExitCode(err)
return err
}
@@ -72,6 +75,9 @@ func rm(cmd *cobra.Command, args []string) error {
if r.Err == nil {
fmt.Println(r.Id)
} else {
+ if rmOptions.Force && strings.Contains(r.Err.Error(), define.ErrNoSuchVolume.Error()) {
+ continue
+ }
setExitCode(r.Err)
errs = append(errs, r.Err)
}
diff --git a/test/system/010-images.bats b/test/system/010-images.bats
index 638910302..aa390f236 100644
--- a/test/system/010-images.bats
+++ b/test/system/010-images.bats
@@ -317,4 +317,11 @@ Deleted: $pauseID"
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
diff --git a/test/system/055-rm.bats b/test/system/055-rm.bats
index 0ef2216b8..dcd679a1f 100644
--- a/test/system/055-rm.bats
+++ b/test/system/055-rm.bats
@@ -96,4 +96,11 @@ load helpers
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
diff --git a/test/system/160-volumes.bats b/test/system/160-volumes.bats
index da60112a0..dfc1a8413 100644
--- a/test/system/160-volumes.bats
+++ b/test/system/160-volumes.bats
@@ -473,4 +473,11 @@ EOF
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
diff --git a/test/system/200-pod.bats b/test/system/200-pod.bats
index 7b7f5e8bb..8d884f6af 100644
--- a/test/system/200-pod.bats
+++ b/test/system/200-pod.bats
@@ -517,4 +517,11 @@ spec:
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
diff --git a/test/system/500-networking.bats b/test/system/500-networking.bats
index 50eb15216..d0f9266ba 100644
--- a/test/system/500-networking.bats
+++ b/test/system/500-networking.bats
@@ -259,7 +259,7 @@ load helpers
run_podman rm -t 0 -f $cid
run_podman network rm $mynetname
- run_podman 1 network rm -f $mynetname
+ run_podman 1 network rm $mynetname
}
@test "podman network reload" {
@@ -758,4 +758,11 @@ EOF
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