aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/kpod/rm.go47
-rw-r--r--completions/bash/kpod2
-rw-r--r--docs/kpod-rm.1.md9
-rw-r--r--test/kpod_rm.bats75
4 files changed, 76 insertions, 57 deletions
diff --git a/cmd/kpod/rm.go b/cmd/kpod/rm.go
index 86d08f2d3..511679770 100644
--- a/cmd/kpod/rm.go
+++ b/cmd/kpod/rm.go
@@ -2,8 +2,10 @@ package main
import (
"fmt"
+ "os"
"github.com/pkg/errors"
+ "github.com/projectatomic/libpod/libpod"
"github.com/urfave/cli"
)
@@ -13,6 +15,10 @@ var (
Name: "force, f",
Usage: "Force removal of a running container. The default is false",
},
+ cli.BoolFlag{
+ Name: "all, a",
+ Usage: "Remove all containers",
+ },
}
rmDescription = "Remove one or more containers"
rmCommand = cli.Command{
@@ -39,20 +45,45 @@ func rmCmd(c *cli.Context) error {
defer runtime.Shutdown(false)
args := c.Args()
- if len(args) == 0 {
+ if len(args) == 0 && !c.Bool("all") {
return errors.Errorf("specify one or more containers to remove")
}
- for _, container := range args {
- ctr, err := runtime.LookupContainer(container)
+ var delContainers []*libpod.Container
+ var lastError error
+ if c.Bool("all") {
+ delContainers, err = runtime.GetContainers()
+ if err != nil {
+ return errors.Wrapf(err, "unable to get container list")
+ }
+ } else {
+ for _, i := range args {
+ container, err := runtime.LookupContainer(i)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ lastError = errors.Wrapf(err, "unable to find container %s", i)
+ continue
+ }
+ delContainers = append(delContainers, container)
+ }
+ }
+ for _, container := range delContainers {
if err != nil {
- return errors.Wrapf(err, "error looking up container", container)
+ if lastError != nil {
+ fmt.Fprintln(os.Stderr, lastError)
+ }
+ lastError = errors.Wrapf(err, "failed to find container %s", container.ID())
+ continue
}
- err = runtime.RemoveContainer(ctr, c.Bool("force"))
+ err = runtime.RemoveContainer(container, c.Bool("force"))
if err != nil {
- return errors.Wrapf(err, "error removing container %q", ctr.ID())
+ if lastError != nil {
+ fmt.Fprintln(os.Stderr, lastError)
+ }
+ lastError = errors.Wrapf(err, "failed to delete container %v", container.ID())
+ } else {
+ fmt.Println(container.ID())
}
- fmt.Println(ctr.ID())
}
- return nil
+ return lastError
}
diff --git a/completions/bash/kpod b/completions/bash/kpod
index 8b7e121d8..0fb413fe8 100644
--- a/completions/bash/kpod
+++ b/completions/bash/kpod
@@ -1213,6 +1213,8 @@ _kpod_run() {
_kpod_rm() {
local boolean_options="
+ --all
+ -a
--force
-f
"
diff --git a/docs/kpod-rm.1.md b/docs/kpod-rm.1.md
index 4e2c490a6..77753f1fe 100644
--- a/docs/kpod-rm.1.md
+++ b/docs/kpod-rm.1.md
@@ -9,7 +9,7 @@ kpod rm - Remove one or more containers
**kpod** **rm** [*options* [...]] container
## DESCRIPTION
-Kpod rm will remove one or more containers from the host. The container name or ID can be used. This does not remove images. Running containers will not be removed without the -f option
+kpod rm will remove one or more containers from the host. The container name or ID can be used. This does not remove images. Running containers will not be removed without the -f option
## OPTIONS
@@ -17,13 +17,20 @@ Kpod rm will remove one or more containers from the host. The container name or
Force the removal of a running container
+**--all, a**
+
+Remove all containers. Can be used in conjunction with -f as well.
## EXAMPLE
kpod rm mywebserver
+kpod rm mywebserver myflaskserver 860a4b23
+
kpod rm -f 860a4b23
+kpod rm -f -a
+
## SEE ALSO
kpod(1), kpod-rmi(1)
diff --git a/test/kpod_rm.bats b/test/kpod_rm.bats
index 73d469ca2..3a7551ea6 100644
--- a/test/kpod_rm.bats
+++ b/test/kpod_rm.bats
@@ -2,60 +2,28 @@
load helpers
-IMAGE="alpine:latest"
-
-function teardown() {
- cleanup_test
-}
-
function setup() {
copy_images
}
@test "remove a stopped container" {
- skip "Test needs to be converted to kpod run"
- start_crio
- run crioctl pod run --config "$TESTDATA"/sandbox_config.json
- echo "$output"
- [ "$status" -eq 0 ]
- pod_id="$output"
- run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id"
+ run ${KPOD_BINARY} $KPOD_OPTIONS run -d ${ALPINE} ls
echo "$output"
[ "$status" -eq 0 ]
ctr_id="$output"
- run crioctl ctr start --id "$ctr_id"
- echo "$output"
- [ "$status" -eq 0 ]
- run crioctl ctr stop --id "$ctr_id"
- echo "$output"
- [ "$status" -eq 0 ]
run bash -c ${KPOD_BINARY} $KPOD_OPTIONS rm "$ctr_id"
echo "$output"
[ "$status" -eq 0 ]
- cleanup_pods
- stop_crio
}
@test "refuse to remove a running container" {
- skip "Test needs to be converted to kpod run"
- start_crio
- run crioctl pod run --config "$TESTDATA"/sandbox_config.json
- echo "$output"
- [ "$status" -eq 0 ]
- pod_id="$output"
- run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id"
+ run ${KPOD_BINARY} $KPOD_OPTIONS run -d ${ALPINE} sleep 15
echo "$output"
[ "$status" -eq 0 ]
ctr_id="$output"
- run crioctl ctr start --id "$ctr_id"
- echo "$output"
- [ "$status" -eq 0 ]
- run bash -c ${KPOD_BINARY} $KPOD_OPTIONS rm "$ctr_id"
+ run bash ${KPOD_BINARY} $KPOD_OPTIONS rm "$ctr_id"
echo "$output"
[ "$status" -ne 0 ]
- cleanup_ctrs
- cleanup_pods
- stop_crio
}
@test "remove a created container" {
@@ -69,22 +37,33 @@ function setup() {
}
@test "remove a running container" {
- skip "Test needs to be converted to kpod run"
- start_crio
- run crioctl pod run --config "$TESTDATA"/sandbox_config.json
- echo "$output"
- [ "$status" -eq 0 ]
- pod_id="$output"
- run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id"
+ skip "Skipping until kpod stop is implemented"
+ run ${KPOD_BINARY} $KPOD_OPTIONS run -d ${ALPINE} sleep 15
echo "$output"
[ "$status" -eq 0 ]
ctr_id="$output"
- run crioctl ctr start --id "$ctr_id"
- echo "$output"
- [ "$status" -eq 0 ]
run bash -c ${KPOD_BINARY} $KPOD_OPTIONS rm -f "$ctr_id"
echo "$output"
- [ "$status" -eq 0 ]
- cleanup_pods
- stop_crio
+ [ "$status" -eq 1 ]
+}
+
+@test "remove all containers" {
+ ${KPOD_BINARY} ${KPOD_OPTIONS} create $BB ls
+ ${KPOD_BINARY} ${KPOD_OPTIONS} create $BB ls -l
+ ${KPOD_BINARY} ${KPOD_OPTIONS} create $BB true
+ ${KPOD_BINARY} ${KPOD_OPTIONS} create $BB whoami
+ run ${KPOD_BINARY} $KPOD_OPTIONS rm -a
+ echo "$output"
+ [ "$status" -eq 1 ]
+}
+
+@test "remove all containers with one running" {
+ skip "Skipping until kpod stop is implemented"
+ ${KPOD_BINARY} ${KPOD_OPTIONS} create $BB ls
+ ${KPOD_BINARY} ${KPOD_OPTIONS} create $BB ls -l
+ ${KPOD_BINARY} ${KPOD_OPTIONS} create $BB whoami
+ ${KPOD_BINARY} ${KPOD_OPTIONS} run -d ${ALPINE} sleep 30
+ run ${KPOD_BINARY} $KPOD_OPTIONS rm -a -f
+ echo "$output"
+ [ "$status" -eq 1 ]
}