From b392a3a8e457f3a13d96d8da179892371b724464 Mon Sep 17 00:00:00 2001 From: Samuel Karp Date: Thu, 27 Sep 2018 14:55:32 -0700 Subject: [PATCH] signals: move ParseSignal to containerd package Signed-off-by: Samuel Karp --- cmd/ctr/commands/signals.go | 23 ---------- cmd/ctr/commands/tasks/kill.go | 2 +- ...signal_map_linux.go => signal_map_linux.go | 2 +- .../signal_map_unix.go => signal_map_unix.go | 2 +- ...al_map_windows.go => signal_map_windows.go | 2 +- signals.go | 44 +++++++++++++++++++ 6 files changed, 48 insertions(+), 27 deletions(-) rename cmd/ctr/commands/signal_map_linux.go => signal_map_linux.go (98%) rename cmd/ctr/commands/signal_map_unix.go => signal_map_unix.go (98%) rename cmd/ctr/commands/signal_map_windows.go => signal_map_windows.go (98%) create mode 100644 signals.go diff --git a/cmd/ctr/commands/signals.go b/cmd/ctr/commands/signals.go index 581234469..51afb0f7b 100644 --- a/cmd/ctr/commands/signals.go +++ b/cmd/ctr/commands/signals.go @@ -18,11 +18,8 @@ package commands import ( gocontext "context" - "fmt" "os" "os/signal" - "strconv" - "strings" "syscall" "github.com/containerd/containerd" @@ -53,23 +50,3 @@ func StopCatch(sigc chan os.Signal) { signal.Stop(sigc) close(sigc) } - -// ParseSignal parses a given string into a syscall.Signal -// it checks that the signal exists in the platform-appropriate signalMap -func ParseSignal(rawSignal string) (syscall.Signal, error) { - s, err := strconv.Atoi(rawSignal) - if err == nil { - sig := syscall.Signal(s) - for _, msig := range signalMap { - if sig == msig { - return sig, nil - } - } - return -1, fmt.Errorf("unknown signal %q", rawSignal) - } - signal, ok := signalMap[strings.TrimPrefix(strings.ToUpper(rawSignal), "SIG")] - if !ok { - return -1, fmt.Errorf("unknown signal %q", rawSignal) - } - return signal, nil -} diff --git a/cmd/ctr/commands/tasks/kill.go b/cmd/ctr/commands/tasks/kill.go index 7d3125892..24e93cafd 100644 --- a/cmd/ctr/commands/tasks/kill.go +++ b/cmd/ctr/commands/tasks/kill.go @@ -47,7 +47,7 @@ var killCommand = cli.Command{ if id == "" { return errors.New("container id must be provided") } - signal, err := commands.ParseSignal(context.String("signal")) + signal, err := containerd.ParseSignal(context.String("signal")) if err != nil { return err } diff --git a/cmd/ctr/commands/signal_map_linux.go b/signal_map_linux.go similarity index 98% rename from cmd/ctr/commands/signal_map_linux.go rename to signal_map_linux.go index 11799eaed..554011074 100644 --- a/cmd/ctr/commands/signal_map_linux.go +++ b/signal_map_linux.go @@ -14,7 +14,7 @@ limitations under the License. */ -package commands +package containerd import ( "syscall" diff --git a/cmd/ctr/commands/signal_map_unix.go b/signal_map_unix.go similarity index 98% rename from cmd/ctr/commands/signal_map_unix.go rename to signal_map_unix.go index 9f624a4b4..62ccba9ac 100644 --- a/cmd/ctr/commands/signal_map_unix.go +++ b/signal_map_unix.go @@ -16,7 +16,7 @@ limitations under the License. */ -package commands +package containerd import ( "syscall" diff --git a/cmd/ctr/commands/signal_map_windows.go b/signal_map_windows.go similarity index 98% rename from cmd/ctr/commands/signal_map_windows.go rename to signal_map_windows.go index f95b5559c..ef17a8fdb 100644 --- a/cmd/ctr/commands/signal_map_windows.go +++ b/signal_map_windows.go @@ -14,7 +14,7 @@ limitations under the License. */ -package commands +package containerd import ( "syscall" diff --git a/signals.go b/signals.go new file mode 100644 index 000000000..cdcb5e72d --- /dev/null +++ b/signals.go @@ -0,0 +1,44 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package containerd + +import ( + "fmt" + "strconv" + "strings" + "syscall" +) + +// ParseSignal parses a given string into a syscall.Signal +// it checks that the signal exists in the platform-appropriate signalMap +func ParseSignal(rawSignal string) (syscall.Signal, error) { + s, err := strconv.Atoi(rawSignal) + if err == nil { + sig := syscall.Signal(s) + for _, msig := range signalMap { + if sig == msig { + return sig, nil + } + } + return -1, fmt.Errorf("unknown signal %q", rawSignal) + } + signal, ok := signalMap[strings.TrimPrefix(strings.ToUpper(rawSignal), "SIG")] + if !ok { + return -1, fmt.Errorf("unknown signal %q", rawSignal) + } + return signal, nil +}