Merge branch 'CNT-3297/cdi-config' into 'main'

Add runtime config option for CDI spec dirs

See merge request nvidia/container-toolkit/container-toolkit!190
This commit is contained in:
Evan Lezar 2022-07-13 09:36:33 +00:00
commit eb85d45137
2 changed files with 18 additions and 4 deletions

View File

@ -44,6 +44,12 @@ type RuntimeConfig struct {
// modesConfig defines (optional) per-mode configs // modesConfig defines (optional) per-mode configs
type modesConfig struct { type modesConfig struct {
CSV csvModeConfig `toml:"csv"` CSV csvModeConfig `toml:"csv"`
CDI cdiModeConfig `toml:"cdi"`
}
type cdiModeConfig struct {
// SpecDirs allows for the default spec dirs for CDI to be overridden
SpecDirs []string `toml:"spec-dirs"`
} }
type csvModeConfig struct { type csvModeConfig struct {

View File

@ -29,8 +29,9 @@ import (
) )
type cdiModifier struct { type cdiModifier struct {
logger *logrus.Logger logger *logrus.Logger
devices []string specDirs []string
devices []string
} }
// NewCDIModifier creates an OCI spec modifier that determines the modifications to make based on the // NewCDIModifier creates an OCI spec modifier that determines the modifications to make based on the
@ -46,9 +47,15 @@ func NewCDIModifier(logger *logrus.Logger, cfg *config.Config, ociSpec oci.Spec)
return nil, nil return nil, nil
} }
specDirs := cdi.DefaultSpecDirs
if len(cfg.NVIDIAContainerRuntimeConfig.Modes.CDI.SpecDirs) > 0 {
specDirs = cfg.NVIDIAContainerRuntimeConfig.Modes.CDI.SpecDirs
}
m := cdiModifier{ m := cdiModifier{
logger: logger, logger: logger,
devices: devices, specDirs: specDirs,
devices: devices,
} }
return m, nil return m, nil
@ -91,6 +98,7 @@ func getDevicesFromSpec(ociSpec oci.Spec) ([]string, error) {
// Modify loads the CDI registry and injects the specified CDI devices into the OCI runtime specification. // Modify loads the CDI registry and injects the specified CDI devices into the OCI runtime specification.
func (m cdiModifier) Modify(spec *specs.Spec) error { func (m cdiModifier) Modify(spec *specs.Spec) error {
registry := cdi.GetRegistry( registry := cdi.GetRegistry(
cdi.WithSpecDirs(m.specDirs...),
cdi.WithAutoRefresh(false), cdi.WithAutoRefresh(false),
) )
if errs := registry.GetErrors(); len(errs) > 0 { if errs := registry.GetErrors(); len(errs) > 0 {