Expose opt-in features in toolkit-container

This change enables opt-in (off-by-default) features to be opted into.
These features can be toggled by name by specifying the (repeated)
--opt-in-features command line argument or as a comma-separated list
in the NVIDIA_CONTAINER_TOOLKIT_OPT_IN_FEATURES environment variable.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
Evan Lezar 2024-09-18 22:20:56 +02:00
parent ec8dfaf779
commit bc9180b59d

View File

@ -79,6 +79,8 @@ type Options struct {
acceptNVIDIAVisibleDevicesAsVolumeMounts bool acceptNVIDIAVisibleDevicesAsVolumeMounts bool
ignoreErrors bool ignoreErrors bool
optInFeatures cli.StringSlice
} }
func Flags(opts *Options) []cli.Flag { func Flags(opts *Options) []cli.Flag {
@ -202,6 +204,12 @@ func Flags(opts *Options) []cli.Flag {
Destination: &opts.createDeviceNodes, Destination: &opts.createDeviceNodes,
EnvVars: []string{"CREATE_DEVICE_NODES"}, EnvVars: []string{"CREATE_DEVICE_NODES"},
}, },
&cli.StringSliceFlag{
Name: "opt-in-features",
Hidden: true,
Destination: &opts.optInFeatures,
EnvVars: []string{"NVIDIA_CONTAINER_TOOLKIT_OPT_IN_FEATURES"},
},
} }
return flags return flags
@ -457,6 +465,10 @@ func installToolkitConfig(c *cli.Context, toolkitConfigPath string, nvidiaContai
configValues["nvidia-container-runtime.runtimes"] = toolkitRuntimeList configValues["nvidia-container-runtime.runtimes"] = toolkitRuntimeList
} }
for _, optInFeature := range opts.optInFeatures.Value() {
configValues["features."+optInFeature] = true
}
for key, value := range configValues { for key, value := range configValues {
cfg.Set(key, value) cfg.Set(key, value)
} }
@ -471,6 +483,7 @@ func installToolkitConfig(c *cli.Context, toolkitConfigPath string, nvidiaContai
"nvidia-container-runtime.runtimes": opts.ContainerRuntimeRuntimes, "nvidia-container-runtime.runtimes": opts.ContainerRuntimeRuntimes,
"nvidia-container-cli.debug": opts.ContainerCLIDebug, "nvidia-container-cli.debug": opts.ContainerCLIDebug,
} }
for key, value := range optionalConfigValues { for key, value := range optionalConfigValues {
if !c.IsSet(key) { if !c.IsSet(key) {
log.Infof("Skipping unset option: %v", key) log.Infof("Skipping unset option: %v", key)