diff options
author | Adin Scannell <ascannell@google.com> | 2020-05-05 22:00:14 -0700 |
---|---|---|
committer | Adin Scannell <ascannell@google.com> | 2020-07-09 17:39:47 -0700 |
commit | 2afff44403e046078301de39f0252bb57fc018c7 (patch) | |
tree | f944f66ffaab8f10029b451755bcb20a3ff40269 /pkg/shim/runsc | |
parent | 2f24ab339736315659f26699ab50aa2982d7e890 (diff) |
Update shim to build using bazel.
The go.mod dependency tree for the shim was somehow contradictory. After
resolving these issues (e.g. explicitly imported k8s 1.14, pulling a
specific dbus version), and adding all dependencies, the shim can now be
build as part of the regular bazel tree.
As part of this process, minor cleanup was done in all the source files:
headers were standardized (and include "The gVisor Authors" in addition
to the "The containerd Authors" if originally derived from containerd
sources), and comments were cleaned up to meet coding standards.
This change makes the containerd installation dynamic, so that multiple
versions can be tested, and drops the static installer for the VM image
itself.
This change also updates test/root/crictl_test.go and related utilities,
so that the containerd tests can be run on any version (and in cases
where it applies, they can be run on both v1 and v2 as parameterized
tests).
Diffstat (limited to 'pkg/shim/runsc')
-rw-r--r-- | pkg/shim/runsc/BUILD | 16 | ||||
-rw-r--r-- | pkg/shim/runsc/runsc.go | 49 |
2 files changed, 42 insertions, 23 deletions
diff --git a/pkg/shim/runsc/BUILD b/pkg/shim/runsc/BUILD new file mode 100644 index 000000000..4d388ca05 --- /dev/null +++ b/pkg/shim/runsc/BUILD @@ -0,0 +1,16 @@ +load("//tools:defs.bzl", "go_library") + +package(licenses = ["notice"]) + +go_library( + name = "runsc", + srcs = [ + "runsc.go", + "utils.go", + ], + visibility = ["//:sandbox"], + deps = [ + "@com_github_containerd_go_runc//:go_default_library", + "@com_github_opencontainers_runtime-spec//specs-go:go_default_library", + ], +) diff --git a/pkg/shim/runsc/runsc.go b/pkg/shim/runsc/runsc.go index 41ba9c3af..50807d0c5 100644 --- a/pkg/shim/runsc/runsc.go +++ b/pkg/shim/runsc/runsc.go @@ -34,10 +34,10 @@ import ( var Monitor runc.ProcessMonitor = runc.Monitor -// DefaultCommand is the default command for Runsc +// DefaultCommand is the default command for Runsc. const DefaultCommand = "runsc" -// Runsc is the client to the runsc cli +// Runsc is the client to the runsc cli. type Runsc struct { Command string PdeathSignal syscall.Signal @@ -48,7 +48,7 @@ type Runsc struct { Config map[string]string } -// List returns all containers created inside the provided runsc root directory +// List returns all containers created inside the provided runsc root directory. func (r *Runsc) List(context context.Context) ([]*runc.Container, error) { data, err := cmdOutput(r.command(context, "list", "--format=json"), false) if err != nil { @@ -61,7 +61,7 @@ func (r *Runsc) List(context context.Context) ([]*runc.Container, error) { return out, nil } -// State returns the state for the container provided by id +// State returns the state for the container provided by id. func (r *Runsc) State(context context.Context, id string) (*runc.Container, error) { data, err := cmdOutput(r.command(context, "state", id), true) if err != nil { @@ -76,9 +76,11 @@ func (r *Runsc) State(context context.Context, id string) (*runc.Container, erro type CreateOpts struct { runc.IO - // PidFile is a path to where a pid file should be created - PidFile string ConsoleSocket runc.ConsoleSocket + + // PidFile is a path to where a pid file should be created. + PidFile string + // UserLog is a path to where runsc user log should be generated. UserLog string } @@ -100,7 +102,7 @@ func (o *CreateOpts) args() (out []string, err error) { return out, nil } -// Create creates a new container and returns its pid if it was created successfully +// Create creates a new container and returns its pid if it was created successfully. func (r *Runsc) Create(context context.Context, id, bundle string, opts *CreateOpts) error { args := []string{"create", "--bundle", bundle} if opts != nil { @@ -141,7 +143,7 @@ func (r *Runsc) Create(context context.Context, id, bundle string, opts *CreateO return err } -// Start will start an already created container +// Start will start an already created container. func (r *Runsc) Start(context context.Context, id string, cio runc.IO) error { cmd := r.command(context, "start", id) if cio != nil { @@ -181,6 +183,7 @@ type waitResult struct { } // Wait will wait for a running container, and return its exit status. +// // TODO(random-liu): Add exec process support. func (r *Runsc) Wait(context context.Context, id string) (int, error) { data, err := cmdOutput(r.command(context, "wait", id), true) @@ -226,8 +229,8 @@ func (o *ExecOpts) args() (out []string, err error) { return out, nil } -// Exec executres and additional process inside the container based on a full -// OCI Process specification +// Exec executes an additional process inside the container based on a full OCI +// Process specification. func (r *Runsc) Exec(context context.Context, id string, spec specs.Process, opts *ExecOpts) error { f, err := ioutil.TempFile(os.Getenv("XDG_RUNTIME_DIR"), "runsc-process") if err != nil { @@ -276,8 +279,8 @@ func (r *Runsc) Exec(context context.Context, id string, spec specs.Process, opt return err } -// Run runs the create, start, delete lifecycle of the container -// and returns its exit status after it has exited +// Run runs the create, start, delete lifecycle of the container and returns +// its exit status after it has exited. func (r *Runsc) Run(context context.Context, id, bundle string, opts *CreateOpts) (int, error) { args := []string{"run", "--bundle", bundle} if opts != nil { @@ -309,7 +312,7 @@ func (o *DeleteOpts) args() (out []string) { return out } -// Delete deletes the container +// Delete deletes the container. func (r *Runsc) Delete(context context.Context, id string, opts *DeleteOpts) error { args := []string{"delete"} if opts != nil { @@ -318,7 +321,7 @@ func (r *Runsc) Delete(context context.Context, id string, opts *DeleteOpts) err return r.runOrError(r.command(context, append(args, id)...)) } -// KillOpts specifies options for killing a container and its processes +// KillOpts specifies options for killing a container and its processes. type KillOpts struct { All bool Pid int @@ -334,7 +337,7 @@ func (o *KillOpts) args() (out []string) { return out } -// Kill sends the specified signal to the container +// Kill sends the specified signal to the container. func (r *Runsc) Kill(context context.Context, id string, sig int, opts *KillOpts) error { args := []string{ "kill", @@ -345,7 +348,7 @@ func (r *Runsc) Kill(context context.Context, id string, sig int, opts *KillOpts return r.runOrError(r.command(context, append(args, id, strconv.Itoa(sig))...)) } -// Stats return the stats for a container like cpu, memory, and io +// Stats return the stats for a container like cpu, memory, and I/O. func (r *Runsc) Stats(context context.Context, id string) (*runc.Stats, error) { cmd := r.command(context, "events", "--stats", id) rd, err := cmd.StdoutPipe() @@ -367,7 +370,7 @@ func (r *Runsc) Stats(context context.Context, id string) (*runc.Stats, error) { return e.Stats, nil } -// Events returns an event stream from runsc for a container with stats and OOM notifications +// Events returns an event stream from runsc for a container with stats and OOM notifications. func (r *Runsc) Events(context context.Context, id string, interval time.Duration) (chan *runc.Event, error) { cmd := r.command(context, "events", fmt.Sprintf("--interval=%ds", int(interval.Seconds())), id) rd, err := cmd.StdoutPipe() @@ -406,7 +409,7 @@ func (r *Runsc) Events(context context.Context, id string, interval time.Duratio return c, nil } -// Ps lists all the processes inside the container returning their pids +// Ps lists all the processes inside the container returning their pids. func (r *Runsc) Ps(context context.Context, id string) ([]int, error) { data, err := cmdOutput(r.command(context, "ps", "--format", "json", id), true) if err != nil { @@ -419,7 +422,7 @@ func (r *Runsc) Ps(context context.Context, id string) ([]int, error) { return pids, nil } -// Top lists all the processes inside the container returning the full ps data +// Top lists all the processes inside the container returning the full ps data. func (r *Runsc) Top(context context.Context, id string) (*runc.TopResults, error) { data, err := cmdOutput(r.command(context, "ps", "--format", "table", id), true) if err != nil { @@ -450,10 +453,10 @@ func (r *Runsc) args() []string { return args } -// runOrError will run the provided command. If an error is -// encountered and neither Stdout or Stderr was set the error and the -// stderr of the command will be returned in the format of <error>: -// <stderr> +// runOrError will run the provided command. +// +// If an error is encountered and neither Stdout or Stderr was set the error +// will be returned in the format of <error>: <stderr>. func (r *Runsc) runOrError(cmd *exec.Cmd) error { if cmd.Stdout != nil || cmd.Stderr != nil { ec, err := Monitor.Start(cmd) |