mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2025-02-03 19:45:36 +00:00
Merge pull request #874 from elezar/skip-graphics-for-csv
Skip graphics modifier in CSV mode
This commit is contained in:
commit
6375e832ff
@ -22,14 +22,12 @@ import (
|
|||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
|
||||||
)
|
)
|
||||||
|
|
||||||
type list struct {
|
type List []oci.SpecModifier
|
||||||
modifiers []oci.SpecModifier
|
|
||||||
}
|
|
||||||
|
|
||||||
// Merge merges a set of OCI specification modifiers as a list.
|
// Merge merges a set of OCI specification modifiers as a list.
|
||||||
// This can be used to compose modifiers.
|
// This can be used to compose modifiers.
|
||||||
func Merge(modifiers ...oci.SpecModifier) oci.SpecModifier {
|
func Merge(modifiers ...oci.SpecModifier) oci.SpecModifier {
|
||||||
var filteredModifiers []oci.SpecModifier
|
var filteredModifiers List
|
||||||
for _, m := range modifiers {
|
for _, m := range modifiers {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
continue
|
continue
|
||||||
@ -37,19 +35,19 @@ func Merge(modifiers ...oci.SpecModifier) oci.SpecModifier {
|
|||||||
filteredModifiers = append(filteredModifiers, m)
|
filteredModifiers = append(filteredModifiers, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
return list{
|
return filteredModifiers
|
||||||
modifiers: filteredModifiers,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Modify applies a list of modifiers in sequence and returns on any errors encountered.
|
// Modify applies a list of modifiers in sequence and returns on any errors encountered.
|
||||||
func (m list) Modify(spec *specs.Spec) error {
|
func (m List) Modify(spec *specs.Spec) error {
|
||||||
for _, mm := range m.modifiers {
|
for _, mm := range m {
|
||||||
|
if mm == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
err := mm.Modify(spec)
|
err := mm.Modify(spec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -79,26 +79,27 @@ func newSpecModifier(logger logger.Interface, cfg *config.Config, ociSpec oci.Sp
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// For CDI mode we make no additional modifications.
|
|
||||||
if mode == "cdi" {
|
var modifiers modifier.List
|
||||||
return modeModifier, nil
|
for _, modifierType := range supportedModifierTypes(mode) {
|
||||||
|
switch modifierType {
|
||||||
|
case "mode":
|
||||||
|
modifiers = append(modifiers, modeModifier)
|
||||||
|
case "graphics":
|
||||||
|
graphicsModifier, err := modifier.NewGraphicsModifier(logger, cfg, image, driver)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
modifiers = append(modifiers, graphicsModifier)
|
||||||
|
case "feature-gated":
|
||||||
|
featureGatedModifier, err := modifier.NewFeatureGatedModifier(logger, cfg, image)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
modifiers = append(modifiers, featureGatedModifier)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
graphicsModifier, err := modifier.NewGraphicsModifier(logger, cfg, image, driver)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
featureModifier, err := modifier.NewFeatureGatedModifier(logger, cfg, image)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
modifiers := modifier.Merge(
|
|
||||||
modeModifier,
|
|
||||||
graphicsModifier,
|
|
||||||
featureModifier,
|
|
||||||
)
|
|
||||||
return modifiers, nil
|
return modifiers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,3 +115,17 @@ func newModeModifier(logger logger.Interface, mode string, cfg *config.Config, o
|
|||||||
|
|
||||||
return nil, fmt.Errorf("invalid runtime mode: %v", cfg.NVIDIAContainerRuntimeConfig.Mode)
|
return nil, fmt.Errorf("invalid runtime mode: %v", cfg.NVIDIAContainerRuntimeConfig.Mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// supportedModifierTypes returns the modifiers supported for a specific runtime mode.
|
||||||
|
func supportedModifierTypes(mode string) []string {
|
||||||
|
switch mode {
|
||||||
|
case "cdi":
|
||||||
|
// For CDI mode we make no additional modifications.
|
||||||
|
return []string{"mode"}
|
||||||
|
case "csv":
|
||||||
|
// For CSV mode we support mode and feature-gated modification.
|
||||||
|
return []string{"mode", "feature-gated"}
|
||||||
|
default:
|
||||||
|
return []string{"mode", "graphics", "feature-gated"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user