Skip to content

Commit

Permalink
Use system defaults if storage.conf does not exist in XDG_CONFIG_HOME
Browse files Browse the repository at this point in the history
Follow up to containers#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 <dwalsh@redhat.com>
  • Loading branch information
rhatdan committed Sep 26, 2022
1 parent c796944 commit 5845779
Showing 1 changed file with 34 additions and 19 deletions.
53 changes: 34 additions & 19 deletions types/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,23 +38,42 @@ 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
}
}
setDefaults()

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.
Expand All @@ -63,22 +82,18 @@ func loadDefaultStoreOptions() {
loadDefaultStoreOptionsErr = err
return
}
} else {
if !os.IsNotExist(err) {
logrus.Warningf("Attempting to use %s, %v", defaultConfigFile, err)
}
if err := ReloadConfigurationFileIfNeeded(defaultConfigFile, &defaultStoreOptions); err != nil && !errors.Is(err, os.ErrNotExist) {
loadDefaultStoreOptionsErr = err
return
}
setDefaults()
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 !os.IsNotExist(err) {
logrus.Warningf("Attempting to use %s, %v", defaultConfigFile, err)
}
if defaultStoreOptions.GraphRoot == "" {
defaultStoreOptions.GraphRoot = defaultGraphRoot
if err := ReloadConfigurationFileIfNeeded(defaultConfigFile, &defaultStoreOptions); err != nil && !errors.Is(err, os.ErrNotExist) {
loadDefaultStoreOptionsErr = err
return
}
setDefaults()
}

// defaultStoreOptionsIsolated is an internal implementation detail of DefaultStoreOptions to allow testing.
Expand Down

0 comments on commit 5845779

Please sign in to comment.