Change standard config path and add override config

The standard config has moved to /usr/share/containers/ per
discussion. An override configuration file is allowed at the
previous /etc/containers/ location. This override will be used in
place of the normal config if both are present, and exists to
override distro packaged configs without modifying the standard
config.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>

Closes: #430
Approved by: rhatdan
This commit is contained in:
Matthew Heon
2018-03-01 15:33:04 -05:00
committed by Atomic Bot
parent bd8557da85
commit 32be712cd3
2 changed files with 25 additions and 17 deletions

View File

@ -44,7 +44,11 @@ const (
// If it is not present, the builtin default config is used instead
// This path can be overridden when the runtime is created by using
// NewRuntimeFromConfig() instead of NewRuntime()
ConfigPath = "/etc/containers/libpod.conf"
ConfigPath = "/usr/share/containers/libpod.conf"
// OverrideConfigPath is the path to an override for the default libpod
// configuration file. If OverrideConfigPath exists, it will be used in
// place of the configuration file pointed to by ConfigPath.
OverrideConfigPath = "/etc/containers/libpod.conf"
)
// A RuntimeOption is a functional option which alters the Runtime created by
@ -163,20 +167,24 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) {
// Copy the default configuration
deepcopier.Copy(defaultRuntimeConfig).To(runtime.config)
// Now overwrite it with the given configuration file, if it exists
// Do not fail on error, instead just use the builtin defaults
if _, err := os.Stat(ConfigPath); err == nil {
// Read the contents of the config file
contents, err := ioutil.ReadFile(ConfigPath)
if err == nil {
// Only proceed if we successfully read the file
_, err := toml.Decode(string(contents), runtime.config)
if err != nil {
// We may have just ruined our RuntimeConfig
// Make a new one to be safe
runtime.config = new(RuntimeConfig)
deepcopier.Copy(defaultRuntimeConfig).To(runtime.config)
}
configPath := ConfigPath
foundConfig := true
if _, err := os.Stat(OverrideConfigPath); err == nil {
// Use the override configuration path
configPath = OverrideConfigPath
} else if _, err := os.Stat(ConfigPath); err != nil {
// Both stat checks failed, no config found
foundConfig = false
}
// If we have a valid configuration file, load it in
if foundConfig {
contents, err := ioutil.ReadFile(configPath)
if err != nil {
return nil, errors.Wrapf(err, "error reading configuration file %s", configPath)
}
if _, err := toml.Decode(string(contents), runtime.config); err != nil {
return nil, errors.Wrapf(err, "error decoding configuration file %s", configPath)
}
}