mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-22 08:18:32 +00:00
Add required option to new toml config
This change adds a "required" option to the new toml config that controls whether a default config is returned or not. This is useful from the NVIDIA Container Runtime Hook, where /run/driver/nvidia/etc/nvidia-container-runtime/config.toml is checked before the standard path. This fixes a bug where the default config was always applied when this config was not used. See https://github.com/NVIDIA/nvidia-container-toolkit/issues/106 Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
parent
d74f7fef4e
commit
4ec9bd751e
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
## v1.14.1
|
## v1.14.1
|
||||||
* Use libelf.so on RPM-based systems due to removed mageia repositories hosting pmake and bmake.
|
* Use libelf.so on RPM-based systems due to removed mageia repositories hosting pmake and bmake.
|
||||||
|
* Fixed bug where contents of `/etc/nvidia-container-runtime/config.toml` is ignored by the NVIDIA Container Runtime Hook.
|
||||||
|
|
||||||
## v1.14.0
|
## v1.14.0
|
||||||
* Promote v1.14.0-rc.3 to v1.14.0
|
* Promote v1.14.0-rc.3 to v1.14.0
|
||||||
|
@ -45,6 +45,7 @@ func loadConfig() (*config.Config, error) {
|
|||||||
for _, p := range configPaths {
|
for _, p := range configPaths {
|
||||||
cfg, err := config.New(
|
cfg, err := config.New(
|
||||||
config.WithConfigFile(p),
|
config.WithConfigFile(p),
|
||||||
|
config.WithRequired(true),
|
||||||
)
|
)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return cfg.Config()
|
return cfg.Config()
|
||||||
|
@ -31,6 +31,7 @@ type Toml toml.Tree
|
|||||||
|
|
||||||
type options struct {
|
type options struct {
|
||||||
configFile string
|
configFile string
|
||||||
|
required bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Option is a functional option for loading TOML config files.
|
// Option is a functional option for loading TOML config files.
|
||||||
@ -43,6 +44,14 @@ func WithConfigFile(configFile string) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithRequired sets the required option.
|
||||||
|
// If this is set to true, a failure to open the specified file is treated as an error
|
||||||
|
func WithRequired(required bool) Option {
|
||||||
|
return func(o *options) {
|
||||||
|
o.required = required
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// New creates a new toml tree based on the provided options
|
// New creates a new toml tree based on the provided options
|
||||||
func New(opts ...Option) (*Toml, error) {
|
func New(opts ...Option) (*Toml, error) {
|
||||||
o := &options{}
|
o := &options{}
|
||||||
@ -50,19 +59,25 @@ func New(opts ...Option) (*Toml, error) {
|
|||||||
opt(o)
|
opt(o)
|
||||||
}
|
}
|
||||||
|
|
||||||
return loadConfigToml(o.configFile)
|
return o.loadConfigToml()
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadConfigToml(filename string) (*Toml, error) {
|
func (o options) loadConfigToml() (*Toml, error) {
|
||||||
|
filename := o.configFile
|
||||||
if filename == "" {
|
if filename == "" {
|
||||||
return defaultToml()
|
return defaultToml()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err := os.Stat(filename)
|
||||||
|
if os.IsNotExist(err) && o.required {
|
||||||
|
return nil, os.ErrNotExist
|
||||||
|
}
|
||||||
|
|
||||||
tomlFile, err := os.Open(filename)
|
tomlFile, err := os.Open(filename)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return defaultToml()
|
return defaultToml()
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return nil, fmt.Errorf("failed to load specified config file: %v", err)
|
return nil, fmt.Errorf("failed to load specified config file: %w", err)
|
||||||
}
|
}
|
||||||
defer tomlFile.Close()
|
defer tomlFile.Close()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user