Skip to content

Commit e9b8ad9

Browse files
committed
Fallback to file for runtime config
This change ensures that we fall back to the previous behaviour of reading the existing config from the specified config file if extracting the current config from the command line fails. This fixes use cases where the containerd / crio executables are not available. Signed-off-by: Evan Lezar <[email protected]>
1 parent 8328180 commit e9b8ad9

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)