Skip to content

Commit 6375e83

Browse files
authored
Merge pull request #874 from elezar/skip-graphics-for-csv
Skip graphics modifier in CSV mode
2 parents d75b1ad + 991b9c2 commit 6375e83

File tree

2 files changed

+40
-27
lines changed

2 files changed

+40
-27
lines changed

internal/modifier/list.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,32 @@ import (
2222
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
2323
)
2424

25-
type list struct {
26-
modifiers []oci.SpecModifier
27-
}
25+
type List []oci.SpecModifier
2826

2927
// Merge merges a set of OCI specification modifiers as a list.
3028
// This can be used to compose modifiers.
3129
func Merge(modifiers ...oci.SpecModifier) oci.SpecModifier {
32-
var filteredModifiers []oci.SpecModifier
30+
var filteredModifiers List
3331
for _, m := range modifiers {
3432
if m == nil {
3533
continue
3634
}
3735
filteredModifiers = append(filteredModifiers, m)
3836
}
3937

40-
return list{
41-
modifiers: filteredModifiers,
42-
}
38+
return filteredModifiers
4339
}
4440

4541
// Modify applies a list of modifiers in sequence and returns on any errors encountered.
46-
func (m list) Modify(spec *specs.Spec) error {
47-
for _, mm := range m.modifiers {
42+
func (m List) Modify(spec *specs.Spec) error {
43+
for _, mm := range m {
44+
if mm == nil {
45+
continue
46+
}
4847
err := mm.Modify(spec)
4948
if err != nil {
5049
return err
5150
}
5251
}
53-
5452
return nil
5553
}

internal/runtime/runtime_factory.go

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -79,26 +79,27 @@ func newSpecModifier(logger logger.Interface, cfg *config.Config, ociSpec oci.Sp
7979
if err != nil {
8080
return nil, err
8181
}
82-
// For CDI mode we make no additional modifications.
83-
if mode == "cdi" {
84-
return modeModifier, nil
85-
}
8682

87-
graphicsModifier, err := modifier.NewGraphicsModifier(logger, cfg, image, driver)
88-
if err != nil {
89-
return nil, err
90-
}
91-
92-
featureModifier, err := modifier.NewFeatureGatedModifier(logger, cfg, image)
93-
if err != nil {
94-
return nil, err
83+
var modifiers modifier.List
84+
for _, modifierType := range supportedModifierTypes(mode) {
85+
switch modifierType {
86+
case "mode":
87+
modifiers = append(modifiers, modeModifier)
88+
case "graphics":
89+
graphicsModifier, err := modifier.NewGraphicsModifier(logger, cfg, image, driver)
90+
if err != nil {
91+
return nil, err
92+
}
93+
modifiers = append(modifiers, graphicsModifier)
94+
case "feature-gated":
95+
featureGatedModifier, err := modifier.NewFeatureGatedModifier(logger, cfg, image)
96+
if err != nil {
97+
return nil, err
98+
}
99+
modifiers = append(modifiers, featureGatedModifier)
100+
}
95101
}
96102

97-
modifiers := modifier.Merge(
98-
modeModifier,
99-
graphicsModifier,
100-
featureModifier,
101-
)
102103
return modifiers, nil
103104
}
104105

@@ -114,3 +115,17 @@ func newModeModifier(logger logger.Interface, mode string, cfg *config.Config, o
114115

115116
return nil, fmt.Errorf("invalid runtime mode: %v", cfg.NVIDIAContainerRuntimeConfig.Mode)
116117
}
118+
119+
// supportedModifierTypes returns the modifiers supported for a specific runtime mode.
120+
func supportedModifierTypes(mode string) []string {
121+
switch mode {
122+
case "cdi":
123+
// For CDI mode we make no additional modifications.
124+
return []string{"mode"}
125+
case "csv":
126+
// For CSV mode we support mode and feature-gated modification.
127+
return []string{"mode", "feature-gated"}
128+
default:
129+
return []string{"mode", "graphics", "feature-gated"}
130+
}
131+
}

0 commit comments

Comments
 (0)