Properly handle OCI runtime being set to a path

This is done by the --runtime flag, and as such, by all our CI.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
This commit is contained in:
Matthew Heon 2019-06-20 15:05:46 -04:00
parent 3d78085d52
commit 7377870641
1 changed files with 28 additions and 5 deletions

View File

@ -6,6 +6,7 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"sync" "sync"
"syscall" "syscall"
@ -837,14 +838,36 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
runtime.ociRuntimes[name] = ociRuntime runtime.ociRuntimes[name] = ociRuntime
} }
// Set default runtime // Do we have a default OCI runtime?
if runtime.config.OCIRuntime != "" { if runtime.config.OCIRuntime != "" {
// If the string starts with / it's a path to a runtime
// executable.
if strings.HasPrefix(runtime.config.OCIRuntime, "/") {
name := filepath.Base(runtime.config.OCIRuntime)
supportsJSON := false
for _, r := range runtime.config.RuntimeSupportsJSON {
if r == name {
supportsJSON = true
break
}
}
ociRuntime, err := newOCIRuntime(name, []string{runtime.config.OCIRuntime}, runtime.conmonPath, runtime.config, supportsJSON)
if err != nil {
return err
}
runtime.ociRuntimes[name] = ociRuntime
runtime.defaultOCIRuntime = ociRuntime
} else {
ociRuntime, ok := runtime.ociRuntimes[runtime.config.OCIRuntime] ociRuntime, ok := runtime.ociRuntimes[runtime.config.OCIRuntime]
if !ok { if !ok {
return errors.Wrapf(ErrInvalidArg, "default OCI runtime %q not found", runtime.config.OCIRuntime) return errors.Wrapf(ErrInvalidArg, "default OCI runtime %q not found", runtime.config.OCIRuntime)
} }
runtime.defaultOCIRuntime = ociRuntime runtime.defaultOCIRuntime = ociRuntime
} }
}
// Do we have at least one valid OCI runtime? // Do we have at least one valid OCI runtime?
if len(runtime.ociRuntimes) == 0 { if len(runtime.ociRuntimes) == 0 {