49
49
defaultConfigFile = SystemConfigFile
50
50
// DefaultStoreOptions is a reasonable default set of options.
51
51
defaultStoreOptions StoreOptions
52
+
53
+ // defaultOverrideConfigFile path to override the default system wide storage.conf file
54
+ defaultOverrideConfigFile = "/etc/containers/storage.conf"
55
+
56
+ // defaultDropInConfigDir path to the folder containing drop in config files
57
+ defaultDropInConfigDir = defaultOverrideConfigFile + ".d"
52
58
)
53
59
54
60
func loadDefaultStoreOptions () {
@@ -114,11 +120,53 @@ func loadDefaultStoreOptions() {
114
120
115
121
// loadStoreOptions returns the default storage ops for containers
116
122
func loadStoreOptions () (StoreOptions , error ) {
117
- storageConf , err := DefaultConfigFile ()
123
+ baseConf , err := DefaultConfigFile ()
124
+ if err != nil {
125
+ return defaultStoreOptions , err
126
+ }
127
+
128
+ // Load the base config file
129
+ baseOptions , err := loadStoreOptionsFromConfFile (baseConf )
118
130
if err != nil {
119
131
return defaultStoreOptions , err
120
132
}
121
- return loadStoreOptionsFromConfFile (storageConf )
133
+
134
+ if _ , err := os .Stat (defaultDropInConfigDir ); err == nil {
135
+ // The directory exists, so merge the configuration from this directory
136
+ err = mergeConfigFromDirectory (& baseOptions , defaultDropInConfigDir )
137
+ if err != nil {
138
+ return defaultStoreOptions , err
139
+ }
140
+ } else if ! os .IsNotExist (err ) {
141
+ // There was an error other than the directory not existing
142
+ return defaultStoreOptions , err
143
+ }
144
+
145
+ return baseOptions , nil
146
+ }
147
+
148
+ func mergeConfigFromDirectory (baseOptions * StoreOptions , configDir string ) error {
149
+ return filepath .Walk (configDir , func (path string , info os.FileInfo , err error ) error {
150
+ if err != nil {
151
+ return err
152
+ }
153
+ if info .IsDir () {
154
+ return nil
155
+ }
156
+
157
+ // Only consider files with .conf extension
158
+ if filepath .Ext (path ) != ".conf" {
159
+ return nil
160
+ }
161
+
162
+ // Load drop-in options from the current file
163
+ err = ReloadConfigurationFile (path , baseOptions , false )
164
+ if err != nil {
165
+ return err
166
+ }
167
+
168
+ return nil
169
+ })
122
170
}
123
171
124
172
// usePerUserStorage returns whether the user private storage must be used.
@@ -399,7 +447,7 @@ func ReloadConfigurationFileIfNeeded(configFile string, storeOptions *StoreOptio
399
447
return nil
400
448
}
401
449
402
- if err := ReloadConfigurationFile (configFile , storeOptions ); err != nil {
450
+ if err := ReloadConfigurationFile (configFile , storeOptions , true ); err != nil {
403
451
return err
404
452
}
405
453
@@ -412,7 +460,7 @@ func ReloadConfigurationFileIfNeeded(configFile string, storeOptions *StoreOptio
412
460
413
461
// ReloadConfigurationFile parses the specified configuration file and overrides
414
462
// the configuration in storeOptions.
415
- func ReloadConfigurationFile (configFile string , storeOptions * StoreOptions ) error {
463
+ func ReloadConfigurationFile (configFile string , storeOptions * StoreOptions , initializeOptions bool ) error {
416
464
config := new (TomlConfig )
417
465
418
466
meta , err := toml .DecodeFile (configFile , & config )
@@ -428,8 +476,11 @@ func ReloadConfigurationFile(configFile string, storeOptions *StoreOptions) erro
428
476
}
429
477
}
430
478
431
- // Clear storeOptions of previous settings
432
- * storeOptions = StoreOptions {}
479
+ if initializeOptions {
480
+ // Clear storeOptions of previous settings
481
+ * storeOptions = StoreOptions {}
482
+ }
483
+
433
484
if config .Storage .Driver != "" {
434
485
storeOptions .GraphDriverName = config .Storage .Driver
435
486
}
@@ -519,8 +570,13 @@ func ReloadConfigurationFile(configFile string, storeOptions *StoreOptions) erro
519
570
storeOptions .PullOptions = config .Storage .Options .PullOptions
520
571
}
521
572
522
- storeOptions .DisableVolatile = config .Storage .Options .DisableVolatile
523
- storeOptions .TransientStore = config .Storage .TransientStore
573
+ if config .Storage .Options .DisableVolatile {
574
+ storeOptions .DisableVolatile = config .Storage .Options .DisableVolatile
575
+ }
576
+
577
+ if config .Storage .TransientStore {
578
+ storeOptions .TransientStore = config .Storage .TransientStore
579
+ }
524
580
525
581
storeOptions .GraphDriverOptions = append (storeOptions .GraphDriverOptions , cfg .GetGraphDriverOptions (storeOptions .GraphDriverName , config .Storage .Options )... )
526
582
0 commit comments