Files
Jing ChenandgVisor bot 630a6b2c38 Implement containerd Sandbox Controller API in runsc shim.
For now, all sandbox controller methods are implemented to return unimplemented
errors (errdefs.ErrNotImplemented).

Add an integration test to verify that
containerd correctly routes sandbox API calls to our shim when configured
with "sandboxer = shim" (or "sandbox_mode = "shim" for containerd 1.7), and
that the shim returns the expected unimplemented error.

PiperOrigin-RevId: 923663790
2026-05-29 16:47:29 -07:00

94 lines
2.8 KiB
Go

// Copyright 2018 The gVisor 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
//
// https://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 runsc
import (
"os"
"github.com/BurntSushi/toml"
"github.com/containerd/log"
)
const optionsType = "io.containerd.runsc.v1.options"
// GetRuntimeOptions returns the runtime options from the global config file.
func GetRuntimeOptions() *Options {
opts := &Options{}
shimConfigPaths := []string{
"/run/containerd/runsc/config.toml",
"/etc/containerd/runsc/config.toml",
"config.toml",
}
tomlPath := ""
for _, path := range shimConfigPaths {
if _, err := os.Stat(path); err == nil {
log.L.Debugf("Found shim config file %q", path)
tomlPath = path
break
}
}
if len(tomlPath) == 0 {
log.L.Debugf("Failed to find shim config file")
return opts
}
if _, err := toml.DecodeFile(tomlPath, opts); err != nil {
log.L.Debugf("Failed to decode shim config file %q: %v", tomlPath, err)
return opts
}
return opts
}
// Options is runtime options for io.containerd.runsc.v1.
type Options struct {
// ShimCgroup is the cgroup the shim should be in.
ShimCgroup string `toml:"shim_cgroup" json:"shimCgroup"`
// IoUID is the I/O's pipes uid.
IoUID uint32 `toml:"io_uid" json:"ioUid"`
// IoGID is the I/O's pipes gid.
IoGID uint32 `toml:"io_gid" json:"ioGid"`
// BinaryName is the binary name of the runsc binary.
BinaryName string `toml:"binary_name" json:"binaryName"`
// Root is the runsc root directory.
Root string `toml:"root" json:"root"`
// LogLevel sets the logging level. Some of the possible values are: debug,
// info, warning.
//
// This configuration only applies when the shim is running as a service.
LogLevel string `toml:"log_level" json:"logLevel"`
// LogPath is the path to log directory. %ID% tags inside the string are
// replaced with the container ID.
//
// This configuration only applies when the shim is running as a service.
LogPath string `toml:"log_path" json:"logPath"`
// Grouping indicates if shim grouping should be enabled.
Grouping bool `toml:"grouping" json:"grouping"`
// EnableHibernateServer indicates if the hibernate server should be started.
EnableHibernateServer bool `toml:"enable_hibernate_server" json:"enableHibernateServer"`
// RunscConfig is a key/value map of all runsc flags.
RunscConfig map[string]string `toml:"runsc_config" json:"runscConfig"`
}