Initial add of zookeeper remote

This commit is contained in:
Jimmy Tang 2016-06-07 21:13:14 +01:00
parent c1ccc378a0
commit 7822eb6fbc
3 changed files with 11 additions and 7 deletions

View file

@ -25,7 +25,7 @@ and formats. It supports:
* reading from JSON, TOML, YAML, HCL, and Java properties config files * reading from JSON, TOML, YAML, HCL, and Java properties config files
* live watching and re-reading of config files (optional) * live watching and re-reading of config files (optional)
* reading from environment variables * reading from environment variables
* reading from remote config systems (etcd or Consul), and watching changes * reading from remote config systems (etcd, Consul or zookeeper), and watching changes
* reading from command line flags * reading from command line flags
* reading from buffer * reading from buffer
* setting explicit values * setting explicit values
@ -320,7 +320,7 @@ package:
`import _ "github.com/spf13/viper/remote"` `import _ "github.com/spf13/viper/remote"`
Viper will read a config string (as JSON, TOML, YAML or HCL) retrieved from a path Viper will read a config string (as JSON, TOML, YAML or HCL) retrieved from a path
in a Key/Value store such as etcd or Consul. These values take precedence over in a Key/Value store such as etcd, Consul or zookeeper. These values take precedence over
default values, but are overridden by configuration values retrieved from disk, default values, but are overridden by configuration values retrieved from disk,
flags, or environment variables. flags, or environment variables.

View file

@ -55,12 +55,16 @@ func getConfigManager(rp viper.RemoteProvider) (crypt.ConfigManager, error) {
} }
if rp.Provider() == "etcd" { if rp.Provider() == "etcd" {
cm, err = crypt.NewEtcdConfigManager([]string{rp.Endpoint()}, kr) cm, err = crypt.NewEtcdConfigManager([]string{rp.Endpoint()}, kr)
} else if rp.Provider() == "zookeeper" {
cm, err = crypt.NewZookeeperConfigManager([]string{rp.Endpoint()}, kr)
} else { } else {
cm, err = crypt.NewConsulConfigManager([]string{rp.Endpoint()}, kr) cm, err = crypt.NewConsulConfigManager([]string{rp.Endpoint()}, kr)
} }
} else { } else {
if rp.Provider() == "etcd" { if rp.Provider() == "etcd" {
cm, err = crypt.NewStandardEtcdConfigManager([]string{rp.Endpoint()}) cm, err = crypt.NewStandardEtcdConfigManager([]string{rp.Endpoint()})
} else if rp.Provider() == "zookeeper" {
cm, err = crypt.NewStandardZookeeperConfigManager([]string{rp.Endpoint()})
} else { } else {
cm, err = crypt.NewStandardConsulConfigManager([]string{rp.Endpoint()}) cm, err = crypt.NewStandardConsulConfigManager([]string{rp.Endpoint()})
} }

View file

@ -62,7 +62,7 @@ func (str UnsupportedConfigError) Error() string {
} }
// Denotes encountering an unsupported remote // Denotes encountering an unsupported remote
// provider. Currently only etcd and Consul are // provider. Currently only etcd, Consul, zookeeper are
// supported. // supported.
type UnsupportedRemoteProviderError string type UnsupportedRemoteProviderError string
@ -179,7 +179,7 @@ func New() *Viper {
func Reset() { func Reset() {
v = New() v = New()
SupportedExts = []string{"json", "toml", "yaml", "yml", "hcl"} SupportedExts = []string{"json", "toml", "yaml", "yml", "hcl"}
SupportedRemoteProviders = []string{"etcd", "consul"} SupportedRemoteProviders = []string{"etcd", "consul", "zookeeper"}
} }
type defaultRemoteProvider struct { type defaultRemoteProvider struct {
@ -220,7 +220,7 @@ type RemoteProvider interface {
var SupportedExts []string = []string{"json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl"} var SupportedExts []string = []string{"json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl"}
// Universally supported remote providers. // Universally supported remote providers.
var SupportedRemoteProviders []string = []string{"etcd", "consul"} var SupportedRemoteProviders []string = []string{"etcd", "consul", "zookeeper"}
func OnConfigChange(run func(in fsnotify.Event)) { v.OnConfigChange(run) } func OnConfigChange(run func(in fsnotify.Event)) { v.OnConfigChange(run) }
func (v *Viper) OnConfigChange(run func(in fsnotify.Event)) { func (v *Viper) OnConfigChange(run func(in fsnotify.Event)) {
@ -326,7 +326,7 @@ 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.
// provider is a string value, "etcd" or "consul" are currently supported. // provider is a string value, "etcd", "consul" or "zookeeper" 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
// 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
@ -355,7 +355,7 @@ func (v *Viper) AddRemoteProvider(provider, endpoint, path string) error {
// AddSecureRemoteProvider adds a remote configuration source. // AddSecureRemoteProvider adds a remote configuration source.
// Secure Remote Providers are searched in the order they are added. // Secure Remote Providers are searched in the order they are added.
// provider is a string value, "etcd" or "consul" are currently supported. // provider is a string value, "etcd", "consul" or "zookeeper" 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
// secretkeyring is the filepath to your openpgp secret keyring. e.g. /etc/secrets/myring.gpg // secretkeyring is the filepath to your openpgp secret keyring. e.g. /etc/secrets/myring.gpg
// path is the path in the k/v store to retrieve configuration // path is the path in the k/v store to retrieve configuration