diff options
author | baude <bbaude@redhat.com> | 2017-11-24 09:21:09 -0600 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2017-11-27 16:46:06 +0000 |
commit | dd88ce005f244c761e209347c63d4e65c9df9e26 (patch) | |
tree | 5c64da3091f8dfccb29a2984f040fbb5daef3fe9 | |
parent | 61e0ab4f47b63039152a5576a2f9a1741d45b654 (diff) | |
download | podman-dd88ce005f244c761e209347c63d4e65c9df9e26.tar.gz podman-dd88ce005f244c761e209347c63d4e65c9df9e26.tar.bz2 podman-dd88ce005f244c761e209347c63d4e65c9df9e26.zip |
kpod_rm: Add option for --all
Remove all containers with -a, --all.
Enable kpod rm tests which were all set to skip. Add two
tests for -a
Signed-off-by: baude <bbaude@redhat.com>
Closes: #74
Approved by: rhatdan
-rw-r--r-- | cmd/kpod/rm.go | 47 | ||||
-rw-r--r-- | completions/bash/kpod | 2 | ||||
-rw-r--r-- | docs/kpod-rm.1.md | 9 | ||||
-rw-r--r-- | test/kpod_rm.bats | 75 |
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 ] } |