ctr: make kill use stop-signal by default

The OCI image specification includes a `StopSignal` field in the image
configuration, denoting the system call signal to be sent to the
container to exit.  This commit adds a new `WithImageStopSignal` container
option that can be used for storing the `StopSignal` field as a label on
the container.  This commit also adjusts `ctr run` to call
`WithImageStopSignal` and `ctr tasks kill` to send the signal stored in
that label by default.

Signed-off-by: Samuel Karp <skarp@amazon.com>
This commit is contained in:
Samuel Karp
2018-09-27 14:56:34 -07:00
parent b392a3a8e4
commit 607888ce29
4 changed files with 97 additions and 5 deletions

View File

@@ -23,6 +23,8 @@ import (
"github.com/urfave/cli"
)
const defaultSignal = "SIGTERM"
var killCommand = cli.Command{
Name: "kill",
Usage: "signal a container (default: SIGTERM)",
@@ -30,7 +32,7 @@ var killCommand = cli.Command{
Flags: []cli.Flag{
cli.StringFlag{
Name: "signal, s",
Value: "SIGTERM",
Value: "",
Usage: "signal to send to the container",
},
cli.StringFlag{
@@ -47,7 +49,7 @@ var killCommand = cli.Command{
if id == "" {
return errors.New("container id must be provided")
}
signal, err := containerd.ParseSignal(context.String("signal"))
signal, err := containerd.ParseSignal(defaultSignal)
if err != nil {
return err
}
@@ -74,6 +76,17 @@ var killCommand = cli.Command{
if err != nil {
return err
}
if context.String("signal") != "" {
signal, err = containerd.ParseSignal(context.String("signal"))
if err != nil {
return err
}
} else {
signal, err = containerd.GetStopSignal(ctx, container, signal)
if err != nil {
return err
}
}
task, err := container.Task(ctx, nil)
if err != nil {
return err