summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2018-10-01 08:02:27 -0700
committerGitHub <noreply@github.com>2018-10-01 08:02:27 -0700
commit3bdccd8a461217ac6d0094c2081f50612d60c19a (patch)
tree8816c905cec898421f857c57628e5036a5de66a1
parentdf978a264d7944351e7cded0a9506cab8a7bb0db (diff)
parent249a51a2fc40e8aace6cc3e3b6deb594e7c93d33 (diff)
downloadpodman-3bdccd8a461217ac6d0094c2081f50612d60c19a.tar.gz
podman-3bdccd8a461217ac6d0094c2081f50612d60c19a.tar.bz2
podman-3bdccd8a461217ac6d0094c2081f50612d60c19a.zip
Merge pull request #1568 from rhatdan/kill
Add --all flag to podman kill
-rw-r--r--cmd/podman/kill.go64
-rw-r--r--completions/bash/podman2
-rw-r--r--docs/podman-kill.1.md6
-rw-r--r--docs/podman-stop.1.md8
4 files changed, 57 insertions, 23 deletions
diff --git a/cmd/podman/kill.go b/cmd/podman/kill.go
index f80d77b8f..db3300984 100644
--- a/cmd/podman/kill.go
+++ b/cmd/podman/kill.go
@@ -6,6 +6,7 @@ import (
"fmt"
"github.com/containers/libpod/cmd/podman/libpodruntime"
+ "github.com/containers/libpod/libpod"
"github.com/containers/libpod/pkg/rootless"
"github.com/docker/docker/pkg/signal"
"github.com/pkg/errors"
@@ -14,6 +15,10 @@ import (
var (
killFlags = []cli.Flag{
+ cli.BoolFlag{
+ Name: "all, a",
+ Usage: "Signal all running containers",
+ },
cli.StringFlag{
Name: "signal, s",
Usage: "Signal to send to the container",
@@ -28,7 +33,7 @@ var (
Description: killDescription,
Flags: killFlags,
Action: killCmd,
- ArgsUsage: "[CONTAINER_NAME_OR_ID]",
+ ArgsUsage: "CONTAINER-NAME [CONTAINER-NAME ...]",
UseShortOptionHandling: true,
OnUsageError: usageErrorHandler,
}
@@ -37,11 +42,17 @@ var (
// killCmd kills one or more containers with a signal
func killCmd(c *cli.Context) error {
args := c.Args()
- if len(args) == 0 && !c.Bool("latest") {
- return errors.Errorf("specify one or more containers to kill")
+ if (!c.Bool("all") && !c.Bool("latest")) && len(args) == 0 {
+ return errors.Errorf("you must specify one or more containers to kill")
+ }
+ if (c.Bool("all") || c.Bool("latest")) && len(args) > 0 {
+ return errors.Errorf("you cannot specify any containers to kill with --latest or --all")
+ }
+ if c.Bool("all") && c.Bool("latest") {
+ return errors.Errorf("--all and --latest cannot be used together")
}
- if len(args) > 0 && c.Bool("latest") {
- return errors.Errorf("you cannot specific any containers to kill with --latest")
+ if len(args) < 1 && !c.Bool("all") && !c.Bool("latest") {
+ return errors.Errorf("you must provide at least one container name or id")
}
if err := validateFlags(c, killFlags); err != nil {
return err
@@ -65,30 +76,45 @@ func killCmd(c *cli.Context) error {
killSignal = uint(sysSignal)
}
- if c.Bool("latest") {
- latestCtr, err := runtime.GetLatestContainer()
+ var filterFuncs []libpod.ContainerFilter
+ var containers []*libpod.Container
+ var lastError error
+ if c.Bool("all") {
+ // only get running containers
+ filterFuncs = append(filterFuncs, func(c *libpod.Container) bool {
+ state, _ := c.State()
+ return state == libpod.ContainerStateRunning
+ })
+ containers, err = runtime.GetContainers(filterFuncs...)
if err != nil {
- return errors.Wrapf(err, "unable to get latest container")
+ return errors.Wrapf(err, "unable to get running containers")
}
- args = append(args, latestCtr.ID())
- }
-
- var lastError error
- for _, container := range args {
- ctr, err := runtime.LookupContainer(container)
+ } else if c.Bool("latest") {
+ lastCtr, err := runtime.GetLatestContainer()
if err != nil {
- if lastError != nil {
- fmt.Fprintln(os.Stderr, lastError)
+ return errors.Wrapf(err, "unable to get last created container")
+ }
+ containers = append(containers, lastCtr)
+ } else {
+ for _, i := range args {
+ container, err := runtime.LookupContainer(i)
+ if err != nil {
+ if lastError != nil {
+ fmt.Fprintln(os.Stderr, lastError)
+ }
+ lastError = errors.Wrapf(err, "unable to find container %s", i)
+ continue
}
- lastError = errors.Wrapf(err, "unable to find container %v", container)
- continue
+ containers = append(containers, container)
}
+ }
+ for _, ctr := range containers {
if err := ctr.Kill(killSignal); err != nil {
if lastError != nil {
fmt.Fprintln(os.Stderr, lastError)
}
- lastError = errors.Wrapf(err, "unable to find container %v", container)
+ lastError = errors.Wrapf(err, "unable to find container %v", ctr.ID())
} else {
fmt.Println(ctr.ID())
}
diff --git a/completions/bash/podman b/completions/bash/podman
index b97c4b0d5..bdd5a34e2 100644
--- a/completions/bash/podman
+++ b/completions/bash/podman
@@ -1282,6 +1282,8 @@ _podman_kill() {
--signal -s
"
local boolean_options="
+ --all
+ -a
--help
-h
--latest
diff --git a/docs/podman-kill.1.md b/docs/podman-kill.1.md
index 79449fc57..14066d151 100644
--- a/docs/podman-kill.1.md
+++ b/docs/podman-kill.1.md
@@ -10,6 +10,10 @@ podman\-kill - Kills one or more containers with a signal
The main process inside each container specified will be sent SIGKILL, or any signal specified with option --signal.
## OPTIONS
+**--all, -a**
+
+Signal all running containers. This does not include paused containers.
+
**--latest, -l**
Instead of providing the container name or ID, use the last created container. If you use methods other than Podman
@@ -30,6 +34,8 @@ podman kill --signal TERM 860a4b23
podman kill --latest
+podman kill --signal KILL -a
+
## SEE ALSO
podman(1), podman-stop(1)
diff --git a/docs/podman-stop.1.md b/docs/podman-stop.1.md
index 98f74f269..813f0ef9e 100644
--- a/docs/podman-stop.1.md
+++ b/docs/podman-stop.1.md
@@ -15,10 +15,6 @@ container and also via command line when creating the container.
## OPTIONS
-**--timeout, --time, t**
-
-Timeout to wait before forcibly stopping the container
-
**--all, -a**
Stop all running containers. This does not include paused containers.
@@ -28,6 +24,10 @@ Stop all running containers. This does not include paused containers.
Instead of providing the container name or ID, use the last created container. If you use methods other than Podman
to run containers such as CRI-O, the last started container could be from either of those methods.
+**--timeout, --time, t**
+
+Timeout to wait before forcibly stopping the container
+
## EXAMPLE
podman stop mywebserver