From 7377870641c0d2a3ee705970369fe42fcf8aa88d Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Thu, 20 Jun 2019 15:05:46 -0400 Subject: 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 --- libpod/runtime.go | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'libpod') diff --git a/libpod/runtime.go b/libpod/runtime.go index 56ad1ffe8..d4d34242c 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -6,6 +6,7 @@ import ( "io/ioutil" "os" "path/filepath" + "strings" "sync" "syscall" @@ -837,13 +838,35 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) { runtime.ociRuntimes[name] = ociRuntime } - // Set default runtime + // Do we have a default OCI runtime? if runtime.config.OCIRuntime != "" { - ociRuntime, ok := runtime.ociRuntimes[runtime.config.OCIRuntime] - if !ok { - return errors.Wrapf(ErrInvalidArg, "default OCI runtime %q not found", 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] + if !ok { + 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? -- cgit v1.2.3-54-g00ecf