| /** |
| # Copyright 2024 NVIDIA CORPORATION |
| # |
| # 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 |
| # |
| # http://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 engine |
| |
| import "strings" |
| |
| // GetBinaryPathsForRuntimes returns the list of binary paths for common runtimes. |
| // The following list of runtimes is considered: |
| // |
| // the default runtime, "runc", and "crun" |
| // |
| // If an nvidia* runtime is set as the default runtime, this is ignored. |
| func GetBinaryPathsForRuntimes(cfg Interface) []string { |
| |
| var binaryPaths []string |
| seen := make(map[string]bool) |
| for _, runtime := range GetLowLevelRuntimes(cfg) { |
| runtimeConfig, err := cfg.GetRuntimeConfig(runtime) |
| if err != nil { |
| // TODO: It will be useful to log the error when GetRuntimeConfig fails for a runtime |
| continue |
| } |
| binaryPath := runtimeConfig.GetBinaryPath() |
| if binaryPath == "" || seen[binaryPath] { |
| continue |
| } |
| seen[binaryPath] = true |
| binaryPaths = append(binaryPaths, binaryPath) |
| } |
| |
| return binaryPaths |
| } |
| |
| // GetLowLevelRuntimes returns a predefined list low-level runtimes from the specified config. |
| // nvidia* runtimes are ignored. |
| func GetLowLevelRuntimes(cfg Interface) []string { |
| var runtimes []string |
| isValidDefault := func(s string) bool { |
| if s == "" { |
| return false |
| } |
| // ignore nvidia* runtimes. |
| return !strings.HasPrefix(s, "nvidia") |
| } |
| if defaultRuntime := cfg.DefaultRuntime(); isValidDefault(defaultRuntime) { |
| runtimes = append(runtimes, defaultRuntime) |
| } |
| return append(runtimes, "runc", "crun") |
| } |