mirror of
https://github.com/spf13/viper
synced 2024-12-23 03:57:01 +00:00
enhance(remote): one RemoteProvider support multiple addresses
- split provider url by commas - update `AddRemoteProvider` comment let us can config multiple addresses in one provider.
This commit is contained in:
parent
c975dc1b4e
commit
b42d870a30
2 changed files with 20 additions and 13 deletions
|
@ -12,6 +12,7 @@ import (
|
||||||
crypt "github.com/xordataexchange/crypt/config"
|
crypt "github.com/xordataexchange/crypt/config"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type remoteConfigProvider struct{}
|
type remoteConfigProvider struct{}
|
||||||
|
@ -54,15 +55,15 @@ func getConfigManager(rp viper.RemoteProvider) (crypt.ConfigManager, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if rp.Provider() == "etcd" {
|
if rp.Provider() == "etcd" {
|
||||||
cm, err = crypt.NewEtcdConfigManager([]string{rp.Endpoint()}, kr)
|
cm, err = crypt.NewEtcdConfigManager(toMachines(rp.Endpoint()), kr)
|
||||||
} else {
|
} else {
|
||||||
cm, err = crypt.NewConsulConfigManager([]string{rp.Endpoint()}, kr)
|
cm, err = crypt.NewConsulConfigManager(toMachines(rp.Endpoint()), kr)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if rp.Provider() == "etcd" {
|
if rp.Provider() == "etcd" {
|
||||||
cm, err = crypt.NewStandardEtcdConfigManager([]string{rp.Endpoint()})
|
cm, err = crypt.NewStandardEtcdConfigManager(toMachines(rp.Endpoint()))
|
||||||
} else {
|
} else {
|
||||||
cm, err = crypt.NewStandardConsulConfigManager([]string{rp.Endpoint()})
|
cm, err = crypt.NewStandardConsulConfigManager(toMachines(rp.Endpoint()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -72,6 +73,11 @@ func getConfigManager(rp viper.RemoteProvider) (crypt.ConfigManager, error) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toMachines(endpoint string) []string {
|
||||||
|
machines := strings.Split(endpoint, ",")
|
||||||
|
return machines
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
viper.RemoteConfig = &remoteConfigProvider{}
|
viper.RemoteConfig = &remoteConfigProvider{}
|
||||||
}
|
}
|
||||||
|
|
19
viper.go
19
viper.go
|
@ -326,9 +326,10 @@ func (v *Viper) AddConfigPath(in string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddRemoteProvider adds a remote configuration source.
|
// AddRemoteProvider adds a remote configuration source.
|
||||||
// Remote Providers are searched in the order they are added.
|
// Remote Providers are searched in the order they are added, and use first found provider.
|
||||||
// provider is a string value, "etcd" or "consul" are currently supported.
|
// provider is a string value, "etcd" or "consul" are currently supported.
|
||||||
// endpoint is the url. etcd requires http://ip:port consul requires ip:port
|
// endpoint is the url. etcd requires http://ip:port consul requires ip:port
|
||||||
|
// multiple addresses can configured in one url separated by commas
|
||||||
// path is the path in the k/v store to retrieve configuration
|
// path is the path in the k/v store to retrieve configuration
|
||||||
// To retrieve a config file called myapp.json from /configs/myapp.json
|
// To retrieve a config file called myapp.json from /configs/myapp.json
|
||||||
// you should set path to /configs and set config name (SetConfigName()) to
|
// you should set path to /configs and set config name (SetConfigName()) to
|
||||||
|
@ -1156,36 +1157,36 @@ func AllKeys() []string { return v.AllKeys() }
|
||||||
func (v *Viper) AllKeys() []string {
|
func (v *Viper) AllKeys() []string {
|
||||||
m := map[string]struct{}{}
|
m := map[string]struct{}{}
|
||||||
|
|
||||||
for key, _ := range v.defaults {
|
for key := range v.defaults {
|
||||||
m[strings.ToLower(key)] = struct{}{}
|
m[strings.ToLower(key)] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, _ := range v.pflags {
|
for key := range v.pflags {
|
||||||
m[strings.ToLower(key)] = struct{}{}
|
m[strings.ToLower(key)] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, _ := range v.env {
|
for key := range v.env {
|
||||||
m[strings.ToLower(key)] = struct{}{}
|
m[strings.ToLower(key)] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, _ := range v.config {
|
for key := range v.config {
|
||||||
m[strings.ToLower(key)] = struct{}{}
|
m[strings.ToLower(key)] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, _ := range v.kvstore {
|
for key := range v.kvstore {
|
||||||
m[strings.ToLower(key)] = struct{}{}
|
m[strings.ToLower(key)] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, _ := range v.override {
|
for key := range v.override {
|
||||||
m[strings.ToLower(key)] = struct{}{}
|
m[strings.ToLower(key)] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, _ := range v.aliases {
|
for key := range v.aliases {
|
||||||
m[strings.ToLower(key)] = struct{}{}
|
m[strings.ToLower(key)] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
a := []string{}
|
a := []string{}
|
||||||
for x, _ := range m {
|
for x := range m {
|
||||||
a = append(a, x)
|
a = append(a, x)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue