diff --git a/config/source/consul/consul.go b/config/source/consul/consul.go index 16e85332..c4a6bf60 100644 --- a/config/source/consul/consul.go +++ b/config/source/consul/consul.go @@ -74,6 +74,11 @@ func NewSource(opts ...source.Option) source.Source { // use default config config := api.DefaultConfig() + // use the consul config passed in the options if any + if co, ok := options.Context.Value(consulConfigKey{}).(*api.Config); ok { + config = co + } + // check if there are any addrs a, ok := options.Context.Value(addressKey{}).(string) if ok { diff --git a/config/source/consul/options.go b/config/source/consul/options.go index 9420a803..a1a1fadb 100644 --- a/config/source/consul/options.go +++ b/config/source/consul/options.go @@ -3,6 +3,7 @@ package consul import ( "context" + "github.com/hashicorp/consul/api" "github.com/micro/go-micro/config/source" ) @@ -11,6 +12,7 @@ type prefixKey struct{} type stripPrefixKey struct{} type dcKey struct{} type tokenKey struct{} +type consulConfigKey struct{} // WithAddress sets the consul address func WithAddress(a string) source.Option { @@ -61,3 +63,13 @@ func WithToken(p string) source.Option { o.Context = context.WithValue(o.Context, tokenKey{}, p) } } + +// WithConsulConfig set consul-specific options +func WithConsulConfig(c *api.Config) source.Option { + return func(o *source.Options) { + if o.Context == nil { + o.Context = context.Background() + } + o.Context = context.WithValue(o.Context, consulConfigKey{}, c) + } +}