From 3f581958a323c64498ed4e334ee61a0f705cddfc Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Mon, 26 Sep 2022 14:08:20 -0400 Subject: [PATCH] Use system defaults if storage.conf does not exist in XDG_CONFIG_HOME Follow up to https://github.com/containers/storage/pull/1357 Podman tests suggest that do not need to use XDG_CONFIG_HOME if storage.conf does not exists. In that case we fall back to /etc/containers/storage.conf and /usr/share/containers/storage.conf Signed-off-by: Daniel J Walsh --- types/options.go | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/types/options.go b/types/options.go index 581d91ba99..c6931602d8 100644 --- a/types/options.go +++ b/types/options.go @@ -38,23 +38,41 @@ var ( ) func loadDefaultStoreOptions() { - defaultStoreOptions.RunRoot = defaultRunRoot - defaultStoreOptions.GraphRoot = defaultGraphRoot defaultStoreOptions.GraphDriverName = "" + setDefaults = func() { + // reload could set values to empty for run and graph root if config does not contains anything + if defaultStoreOptions.RunRoot == "" { + defaultStoreOptions.RunRoot = defaultRunRoot + } + if defaultStoreOptions.GraphRoot == "" { + defaultStoreOptions.GraphRoot = defaultGraphRoot + } + } + if path, ok := os.LookupEnv(storageConfEnv); ok { defaultOverrideConfigFile = path if err := ReloadConfigurationFileIfNeeded(path, &defaultStoreOptions); err != nil { loadDefaultStoreOptionsErr = err return } - } else if path, ok := os.LookupEnv("XDG_CONFIG_HOME"); ok { - defaultOverrideConfigFile = filepath.Join(path, "containers", "storage.conf") - if err := ReloadConfigurationFileIfNeeded(defaultOverrideConfigFile, &defaultStoreOptions); err != nil { + setDefaults() + return + } + + if path, ok := os.LookupEnv("XDG_CONFIG_HOME"); ok { + homeConfigFile := filepath.Join(path, "containers", "storage.conf") + if _, err := os.Stat(homeConfigFile); err != nil && !os.IsNotExist(err) { loadDefaultStoreOptionsErr = err return } - } else if _, err := os.Stat(defaultOverrideConfigFile); err == nil { + // if storage.conf exists in XDG_CONFIG_HOME then use it. + if err == nil { + defaultOverrideConfigFile = homeConfigFile + } + } + + if _, err := os.Stat(defaultOverrideConfigFile); err == nil { // The DefaultConfigFile(rootless) function returns the path // of the used storage.conf file, by returning defaultConfigFile // If override exists containers/storage uses it by default. @@ -72,13 +90,7 @@ func loadDefaultStoreOptions() { return } } - // reload could set values to empty for run and graph root if config does not contains anything - if defaultStoreOptions.RunRoot == "" { - defaultStoreOptions.RunRoot = defaultRunRoot - } - if defaultStoreOptions.GraphRoot == "" { - defaultStoreOptions.GraphRoot = defaultGraphRoot - } + setDefaults() } // defaultStoreOptionsIsolated is an internal implementation detail of DefaultStoreOptions to allow testing.