From 32be712cd32bbfb7babb27e5405db08967a5af71 Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Thu, 1 Mar 2018 15:33:04 -0500 Subject: 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 Closes: #430 Approved by: rhatdan --- libpod/runtime.go | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'libpod') diff --git a/libpod/runtime.go b/libpod/runtime.go index 3570290c0..a2331e38e 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -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) } } -- cgit v1.2.3-54-g00ecf