mirror of https://github.com/containers/podman.git
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
This commit is contained in:
parent
61e0ab4f47
commit
dd88ce005f
|
@ -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, "error looking up container", container)
|
||||
return errors.Wrapf(err, "unable to get container list")
|
||||
}
|
||||
err = runtime.RemoveContainer(ctr, c.Bool("force"))
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error removing container %q", ctr.ID())
|
||||
} 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)
|
||||
}
|
||||
fmt.Println(ctr.ID())
|
||||
}
|
||||
return nil
|
||||
for _, container := range delContainers {
|
||||
if err != nil {
|
||||
if lastError != nil {
|
||||
fmt.Fprintln(os.Stderr, lastError)
|
||||
}
|
||||
lastError = errors.Wrapf(err, "failed to find container %s", container.ID())
|
||||
continue
|
||||
}
|
||||
err = runtime.RemoveContainer(container, c.Bool("force"))
|
||||
if err != nil {
|
||||
if lastError != nil {
|
||||
fmt.Fprintln(os.Stderr, lastError)
|
||||
}
|
||||
lastError = errors.Wrapf(err, "failed to delete container %v", container.ID())
|
||||
} else {
|
||||
fmt.Println(container.ID())
|
||||
}
|
||||
}
|
||||
return lastError
|
||||
}
|
||||
|
|
|
@ -1213,6 +1213,8 @@ _kpod_run() {
|
|||
|
||||
_kpod_rm() {
|
||||
local boolean_options="
|
||||
--all
|
||||
-a
|
||||
--force
|
||||
-f
|
||||
"
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 ]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue