summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@gmail.com>2018-03-01 15:33:04 -0500
committerAtomic Bot <atomic-devel@projectatomic.io>2018-03-06 01:21:09 +0000
commit32be712cd32bbfb7babb27e5405db08967a5af71 (patch)
treeadc99361ae8fae7dd2c46bebe9d81e06f54ef1e5
parentbd8557da858b9743f99aab42c762197cd291fe04 (diff)
downloadpodman-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--Makefile4
-rw-r--r--libpod/runtime.go38
2 files changed, 25 insertions, 17 deletions
diff --git a/Makefile b/Makefile
index 50766900a..da007064f 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
}
}