Skip to content

Commit b03e942

Browse files
authored
Merge pull request #780 from elezar/add-config-fallback
Fallback to file for runtime config
2 parents 3cb613a + a918591 commit b03e942

File tree

3 files changed

+43
-36
lines changed

3 files changed

+43
-36
lines changed

tools/container/runtime/containerd/containerd.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525

2626
"github.com/NVIDIA/nvidia-container-toolkit/pkg/config/engine"
2727
"github.com/NVIDIA/nvidia-container-toolkit/pkg/config/engine/containerd"
28+
"github.com/NVIDIA/nvidia-container-toolkit/pkg/config/toml"
2829
"github.com/NVIDIA/nvidia-container-toolkit/tools/container"
2930
)
3031

@@ -84,13 +85,7 @@ func Flags(opts *Options) []cli.Flag {
8485
func Setup(c *cli.Context, o *container.Options, co *Options) error {
8586
log.Infof("Starting 'setup' for %v", c.App.Name)
8687

87-
cfg, err := containerd.New(
88-
containerd.WithPath(o.Config),
89-
containerd.WithConfigSource(containerd.CommandLineSource(o.HostRootMount)),
90-
containerd.WithRuntimeType(co.runtimeType),
91-
containerd.WithUseLegacyConfig(co.useLegacyConfig),
92-
containerd.WithContainerAnnotations(co.containerAnnotationsFromCDIPrefixes()...),
93-
)
88+
cfg, err := getRuntimeConfig(o, co)
9489
if err != nil {
9590
return fmt.Errorf("unable to load config: %v", err)
9691
}
@@ -114,13 +109,7 @@ func Setup(c *cli.Context, o *container.Options, co *Options) error {
114109
func Cleanup(c *cli.Context, o *container.Options, co *Options) error {
115110
log.Infof("Starting 'cleanup' for %v", c.App.Name)
116111

117-
cfg, err := containerd.New(
118-
containerd.WithPath(o.Config),
119-
containerd.WithConfigSource(containerd.CommandLineSource(o.HostRootMount)),
120-
containerd.WithRuntimeType(co.runtimeType),
121-
containerd.WithUseLegacyConfig(co.useLegacyConfig),
122-
containerd.WithContainerAnnotations(co.containerAnnotationsFromCDIPrefixes()...),
123-
)
112+
cfg, err := getRuntimeConfig(o, co)
124113
if err != nil {
125114
return fmt.Errorf("unable to load config: %v", err)
126115
}
@@ -169,13 +158,24 @@ func (o *Options) runtimeConfigOverride() (map[string]interface{}, error) {
169158
}
170159

171160
func GetLowlevelRuntimePaths(o *container.Options, co *Options) ([]string, error) {
172-
cfg, err := containerd.New(
173-
containerd.WithConfigSource(containerd.CommandLineSource(o.HostRootMount)),
174-
containerd.WithRuntimeType(co.runtimeType),
175-
containerd.WithUseLegacyConfig(co.useLegacyConfig),
176-
)
161+
cfg, err := getRuntimeConfig(o, co)
177162
if err != nil {
178163
return nil, fmt.Errorf("unable to load containerd config: %w", err)
179164
}
180165
return engine.GetBinaryPathsForRuntimes(cfg), nil
181166
}
167+
168+
func getRuntimeConfig(o *container.Options, co *Options) (engine.Interface, error) {
169+
return containerd.New(
170+
containerd.WithPath(o.Config),
171+
containerd.WithConfigSource(
172+
toml.LoadFirst(
173+
containerd.CommandLineSource(o.HostRootMount),
174+
toml.FromFile(o.Config),
175+
),
176+
),
177+
containerd.WithRuntimeType(co.runtimeType),
178+
containerd.WithUseLegacyConfig(co.useLegacyConfig),
179+
containerd.WithContainerAnnotations(co.containerAnnotationsFromCDIPrefixes()...),
180+
)
181+
}

tools/container/runtime/crio/crio.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/NVIDIA/nvidia-container-toolkit/pkg/config/engine"
2929
"github.com/NVIDIA/nvidia-container-toolkit/pkg/config/engine/crio"
3030
"github.com/NVIDIA/nvidia-container-toolkit/pkg/config/ocihook"
31+
"github.com/NVIDIA/nvidia-container-toolkit/pkg/config/toml"
3132
"github.com/NVIDIA/nvidia-container-toolkit/tools/container"
3233
)
3334

@@ -116,10 +117,7 @@ func setupHook(o *container.Options, co *Options) error {
116117
func setupConfig(o *container.Options) error {
117118
log.Infof("Updating config file")
118119

119-
cfg, err := crio.New(
120-
crio.WithPath(o.Config),
121-
crio.WithConfigSource(crio.CommandLineSource(o.HostRootMount)),
122-
)
120+
cfg, err := getRuntimeConfig(o)
123121
if err != nil {
124122
return fmt.Errorf("unable to load config: %v", err)
125123
}
@@ -168,10 +166,7 @@ func cleanupHook(co *Options) error {
168166
func cleanupConfig(o *container.Options) error {
169167
log.Infof("Reverting config file modifications")
170168

171-
cfg, err := crio.New(
172-
crio.WithPath(o.Config),
173-
crio.WithConfigSource(crio.CommandLineSource(o.HostRootMount)),
174-
)
169+
cfg, err := getRuntimeConfig(o)
175170
if err != nil {
176171
return fmt.Errorf("unable to load config: %v", err)
177172
}
@@ -195,11 +190,21 @@ func RestartCrio(o *container.Options) error {
195190
}
196191

197192
func GetLowlevelRuntimePaths(o *container.Options) ([]string, error) {
198-
cfg, err := crio.New(
199-
crio.WithConfigSource(crio.CommandLineSource(o.HostRootMount)),
200-
)
193+
cfg, err := getRuntimeConfig(o)
201194
if err != nil {
202195
return nil, fmt.Errorf("unable to load crio config: %w", err)
203196
}
204197
return engine.GetBinaryPathsForRuntimes(cfg), nil
205198
}
199+
200+
func getRuntimeConfig(o *container.Options) (engine.Interface, error) {
201+
return crio.New(
202+
crio.WithPath(o.Config),
203+
crio.WithConfigSource(
204+
toml.LoadFirst(
205+
crio.CommandLineSource(o.HostRootMount),
206+
toml.FromFile(o.Config),
207+
),
208+
),
209+
)
210+
}

tools/container/runtime/docker/docker.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ func Flags(opts *Options) []cli.Flag {
4545
func Setup(c *cli.Context, o *container.Options) error {
4646
log.Infof("Starting 'setup' for %v", c.App.Name)
4747

48-
cfg, err := docker.New(
49-
docker.WithPath(o.Config),
50-
)
48+
cfg, err := getRuntimeConfig(o)
5149
if err != nil {
5250
return fmt.Errorf("unable to load config: %v", err)
5351
}
@@ -71,9 +69,7 @@ func Setup(c *cli.Context, o *container.Options) error {
7169
func Cleanup(c *cli.Context, o *container.Options) error {
7270
log.Infof("Starting 'cleanup' for %v", c.App.Name)
7371

74-
cfg, err := docker.New(
75-
docker.WithPath(o.Config),
76-
)
72+
cfg, err := getRuntimeConfig(o)
7773
if err != nil {
7874
return fmt.Errorf("unable to load config: %v", err)
7975
}
@@ -107,3 +103,9 @@ func GetLowlevelRuntimePaths(o *container.Options) ([]string, error) {
107103
}
108104
return engine.GetBinaryPathsForRuntimes(cfg), nil
109105
}
106+
107+
func getRuntimeConfig(o *container.Options) (engine.Interface, error) {
108+
return docker.New(
109+
docker.WithPath(o.Config),
110+
)
111+
}

0 commit comments

Comments
 (0)