summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-09-24 17:04:03 +0000
committerGitHub <noreply@github.com>2020-09-24 17:04:03 +0000
commit684cde87fa8f78a2ba7389e6eecd36dda00cfdff (patch)
tree081fca1f0b58a0ff0d8f692014cb75e16e4c704f
parent0839300a712479248788910a083adc843190a0ab (diff)
parented930d9d7cde94533c765ee83f9ece56397dc779 (diff)
downloadpodman-684cde87fa8f78a2ba7389e6eecd36dda00cfdff.tar.gz
podman-684cde87fa8f78a2ba7389e6eecd36dda00cfdff.tar.bz2
podman-684cde87fa8f78a2ba7389e6eecd36dda00cfdff.zip
Merge pull request #7662 from jwhonce/issues/7535
Evict containers before removing via V2 API
-rw-r--r--pkg/api/handlers/compat/containers.go22
1 files changed, 20 insertions, 2 deletions
diff --git a/pkg/api/handlers/compat/containers.go b/pkg/api/handlers/compat/containers.go
index 63c44eaef..3a904ba87 100644
--- a/pkg/api/handlers/compat/containers.go
+++ b/pkg/api/handlers/compat/containers.go
@@ -17,6 +17,7 @@ import (
"github.com/docker/go-connections/nat"
"github.com/gorilla/schema"
"github.com/pkg/errors"
+ "github.com/sirupsen/logrus"
)
func RemoveContainer(w http.ResponseWriter, r *http.Request) {
@@ -44,8 +45,25 @@ func RemoveContainer(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value("runtime").(*libpod.Runtime)
name := utils.GetName(r)
con, err := runtime.LookupContainer(name)
- if err != nil {
- utils.ContainerNotFound(w, name, err)
+ if err != nil && errors.Cause(err) == define.ErrNoSuchCtr {
+ // Failed to get container. If force is specified, get the container's ID
+ // and evict it
+ if !query.Force {
+ utils.ContainerNotFound(w, name, err)
+ return
+ }
+
+ if _, err := runtime.EvictContainer(r.Context(), name, query.Vols); err != nil {
+ if errors.Cause(err) == define.ErrNoSuchCtr {
+ logrus.Debugf("Ignoring error (--allow-missing): %q", err)
+ w.WriteHeader(http.StatusNoContent)
+ return
+ }
+ logrus.Warn(errors.Wrapf(err, "Failed to evict container: %q", name))
+ utils.InternalServerError(w, err)
+ return
+ }
+ w.WriteHeader(http.StatusNoContent)
return
}