diff options
author | Matthew Heon <matthew.heon@gmail.com> | 2018-03-01 15:33:04 -0500 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-03-06 01:21:09 +0000 |
commit | 32be712cd32bbfb7babb27e5405db08967a5af71 (patch) | |
tree | adc99361ae8fae7dd2c46bebe9d81e06f54ef1e5 | |
parent | bd8557da858b9743f99aab42c762197cd291fe04 (diff) | |
download | podman-32be712cd32bbfb7babb27e5405db08967a5af71.tar.gz podman-32be712cd32bbfb7babb27e5405db08967a5af71.tar.bz2 podman-32be712cd32bbfb7babb27e5405db08967a5af71.zip |
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
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | libpod/runtime.go | 38 |
2 files changed, 25 insertions, 17 deletions
@@ -10,9 +10,9 @@ PREFIX ?= ${DESTDIR}/usr/local BINDIR ?= ${PREFIX}/bin LIBEXECDIR ?= ${PREFIX}/libexec MANDIR ?= ${PREFIX}/share/man +SHAREDIR_CONTAINERS ?= ${PREFIX}/share/containers ETCDIR ?= ${DESTDIR}/etc ETCDIR_LIBPOD ?= ${ETCDIR}/crio -ETCDIR_CONTAINERS ?= ${ETCDIR}/containers BUILDTAGS ?= seccomp $(shell hack/btrfs_tag.sh) $(shell hack/libdm_tag.sh) $(shell hack/btrfs_installed_tag.sh) $(shell hack/ostree_tag.sh) $(shell hack/selinux_tag.sh) BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions @@ -152,7 +152,7 @@ install.man: docs install ${SELINUXOPT} -m 644 $(filter %.1,$(MANPAGES)) -t $(MANDIR)/man1 install.config: - install ${SELINUXOPT} -D -m 644 libpod.conf ${ETCDIR_CONTAINERS}/libpod.conf + install ${SELINUXOPT} -D -m 644 libpod.conf ${SHAREDIR_CONTAINERS}/libpod.conf install ${SELINUXOPT} -D -m 644 seccomp.json $(ETCDIR_LIBPOD)/seccomp.json install ${SELINUXOPT} -D -m 644 crio-umount.conf $(OCIUMOUNTINSTALLDIR)/crio-umount.conf 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) } } |