forked from wal-g/wal-g
/
storage_adapter.go
56 lines (48 loc) · 1.74 KB
/
storage_adapter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package internal
import (
"strings"
"github.com/T0n0T/wal-g/pkg/storages/azure"
"github.com/T0n0T/wal-g/pkg/storages/fs"
"github.com/T0n0T/wal-g/pkg/storages/gcs"
"github.com/T0n0T/wal-g/pkg/storages/s3"
"github.com/T0n0T/wal-g/pkg/storages/sh"
"github.com/T0n0T/wal-g/pkg/storages/storage"
"github.com/T0n0T/wal-g/pkg/storages/swift"
"github.com/spf13/viper"
)
type StorageAdapter struct {
prefixName string // actually this is an env key suffix, but all names contains '_PREFIX' word at the end, see StorageAdapters
settingNames []string
configureFolder func(string, map[string]string) (storage.Folder, error)
prefixPreprocessor func(string) string
}
func (adapter *StorageAdapter) loadSettings(config *viper.Viper) map[string]string {
settings := make(map[string]string)
for _, settingName := range adapter.settingNames {
settingValue := config.GetString(settingName)
if config.IsSet(settingName) {
settings[settingName] = settingValue
/* prefer config values */
continue
}
settingValue, ok := getWaleCompatibleSettingFrom(settingName, config)
if !ok {
settingValue, ok = GetSetting(settingName)
}
if ok {
settings[settingName] = settingValue
}
}
return settings
}
func preprocessFilePrefix(prefix string) string {
return strings.TrimPrefix(prefix, WaleFileHost) // WAL-E backward compatibility
}
var StorageAdapters = []StorageAdapter{
{"S3_PREFIX", s3.SettingList, s3.ConfigureFolder, nil},
{"FILE_PREFIX", nil, fs.ConfigureFolder, preprocessFilePrefix},
{"GS_PREFIX", gcs.SettingList, gcs.ConfigureFolder, nil},
{"AZ_PREFIX", azure.SettingList, azure.ConfigureFolder, nil},
{"SWIFT_PREFIX", swift.SettingList, swift.ConfigureFolder, nil},
{"SSH_PREFIX", sh.SettingsList, sh.ConfigureFolder, nil},
}