summaryrefslogtreecommitdiff
path: root/pkg/hooks/exec/exec.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/hooks/exec/exec.go')
-rw-r--r--pkg/hooks/exec/exec.go69
1 files changed, 0 insertions, 69 deletions
diff --git a/pkg/hooks/exec/exec.go b/pkg/hooks/exec/exec.go
deleted file mode 100644
index bc639245f..000000000
--- a/pkg/hooks/exec/exec.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// Package exec provides utilities for executing Open Container Initiative runtime hooks.
-package exec
-
-import (
- "bytes"
- "context"
- "fmt"
- "io"
- osexec "os/exec"
- "time"
-
- rspec "github.com/opencontainers/runtime-spec/specs-go"
- "github.com/sirupsen/logrus"
-)
-
-// DefaultPostKillTimeout is the recommended default post-kill timeout.
-const DefaultPostKillTimeout = time.Duration(10) * time.Second
-
-// Run executes the hook and waits for it to complete or for the
-// context or hook-specified timeout to expire.
-func Run(ctx context.Context, hook *rspec.Hook, state []byte, stdout io.Writer, stderr io.Writer, postKillTimeout time.Duration) (hookErr, err error) {
- cmd := osexec.Cmd{
- Path: hook.Path,
- Args: hook.Args,
- Env: hook.Env,
- Stdin: bytes.NewReader(state),
- Stdout: stdout,
- Stderr: stderr,
- }
- if cmd.Env == nil {
- cmd.Env = []string{}
- }
-
- if hook.Timeout != nil {
- var cancel context.CancelFunc
- ctx, cancel = context.WithTimeout(ctx, time.Duration(*hook.Timeout)*time.Second)
- defer cancel()
- }
-
- err = cmd.Start()
- if err != nil {
- return err, err
- }
- exit := make(chan error, 1)
- go func() {
- err := cmd.Wait()
- if err != nil {
- err = fmt.Errorf("executing %v: %w", cmd.Args, err)
- }
- exit <- err
- }()
-
- select {
- case err = <-exit:
- return err, err
- case <-ctx.Done():
- if err := cmd.Process.Kill(); err != nil {
- logrus.Errorf("Failed to kill pid %v", cmd.Process)
- }
- timer := time.NewTimer(postKillTimeout)
- defer timer.Stop()
- select {
- case <-timer.C:
- err = fmt.Errorf("failed to reap process within %s of the kill signal", postKillTimeout)
- case err = <-exit:
- }
- return err, ctx.Err()
- }
-}