Merge pull request #2346 from giuseppe/fix-runtime-lookup

libpod.conf: add backward compatibility for runtime_path
This commit is contained in:
OpenShift Merge Robot
2019-02-15 14:21:43 +01:00
committed by GitHub
3 changed files with 31 additions and 4 deletions

View File

@ -12,8 +12,11 @@ libpod to manage containers.
**image_default_transport**=""
Default transport method for pulling and pushing images
**runtime_path**=""
Paths to search for a valid OCI runtime binary
**runtime**=""
Default OCI runtime to use if nothing is specified
**runtimes**
For each OCI runtime, specify a list of paths to look for. The first one found is used.
**conmon_path**=""
Paths to search for the Conmon container manager binary

View File

@ -88,6 +88,8 @@ pause_command = "/pause"
# Default libpod support for container labeling
# label=true
runtime = "runc"
# Paths to look for a valid OCI runtime (runc, runv, etc)
[runtimes]
runc = [

View File

@ -130,6 +130,12 @@ type RuntimeConfig struct {
OCIRuntime string `toml:"runtime"`
// OCIRuntimes are the set of configured OCI runtimes (default is runc)
OCIRuntimes map[string][]string `toml:"runtimes"`
// RuntimePath is the path to OCI runtime binary for launching
// containers.
// The first path pointing to a valid file will be used
// This is used only when there are no OCIRuntime/OCIRuntimes defined. It
// is used only to be backward compatible with older versions of Podman.
RuntimePath []string `toml:"runtime_path"`
// ConmonPath is the path to the Conmon binary used for managing
// containers
// The first path pointing to a valid file will be used
@ -389,7 +395,7 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) {
// If the configuration file was not found but we are running in rootless, a subset of the
// global config file is used.
for _, path := range []string{OverrideConfigPath, ConfigPath} {
contents, err := ioutil.ReadFile(OverrideConfigPath)
contents, err := ioutil.ReadFile(path)
if err != nil {
// Ignore any error, the file might not be readable by us.
continue
@ -403,6 +409,7 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) {
runtime.config.ConmonPath = tmpConfig.ConmonPath
runtime.config.ConmonEnvVars = tmpConfig.ConmonEnvVars
runtime.config.OCIRuntimes = tmpConfig.OCIRuntimes
runtime.config.RuntimePath = tmpConfig.RuntimePath
runtime.config.CNIPluginDir = tmpConfig.CNIPluginDir
runtime.config.NoPivotRoot = tmpConfig.NoPivotRoot
break
@ -485,10 +492,25 @@ func NewRuntimeFromConfig(configPath string, options ...RuntimeOption) (runtime
// Make a new runtime based on the given configuration
// Sets up containers/storage, state store, OCI runtime
func makeRuntime(runtime *Runtime) (err error) {
// Backward compatibility for `runtime_path`
if runtime.config.RuntimePath != nil {
// Don't print twice in rootless mode.
if os.Geteuid() == 0 {
logrus.Warningf("The configuration is using `runtime_path`, which is deprecated and will be removed in future. Please use `runtimes` and `runtime`")
logrus.Warningf("If you are using both `runtime_path` and `runtime`, the configuration from `runtime_path` is used")
}
// Transform `runtime_path` into `runtimes` and `runtime`.
name := filepath.Base(runtime.config.RuntimePath[0])
runtime.config.OCIRuntime = name
runtime.config.OCIRuntimes = map[string][]string{name: runtime.config.RuntimePath}
}
// Find a working OCI runtime binary
foundRuntime := false
// If runtime is an absolute path, then use it as it is.
if runtime.config.OCIRuntime[0] == '/' {
if runtime.config.OCIRuntime != "" && runtime.config.OCIRuntime[0] == '/' {
foundRuntime = true
runtime.ociRuntimePath = OCIRuntimePath{Name: filepath.Base(runtime.config.OCIRuntime), Paths: []string{runtime.config.OCIRuntime}}
} else {