Add the ability to pass consul client config via registry options.

This can be used when you need to configure the consul client to use a specific configuration (E.G to pass a Token if consul is using ACL policies)
This commit is contained in:
chriss 2016-11-17 21:03:54 +00:00
parent 74d8ea6817
commit 3d7187f405
2 changed files with 24 additions and 1 deletions

View File

@ -0,0 +1,16 @@
package consul
import (
consul "github.com/hashicorp/consul/api"
"github.com/micro/go-micro/registry"
"golang.org/x/net/context"
)
func Config(c *consul.Config) registry.Option {
return func(o *registry.Options) {
if o.Context == nil {
o.Context = context.Background()
}
o.Context = context.WithValue(o.Context, "consul_config", c)
}
}

View File

@ -53,6 +53,13 @@ func newConsulRegistry(opts ...Option) Registry {
// use default config // use default config
config := consul.DefaultConfig() config := consul.DefaultConfig()
if options.Context != nil {
// Use the consul config passed in the options, if available
c := options.Context.Value("consul_config")
if c != nil {
config = c.(*consul.Config)
}
}
// set timeout // set timeout
if options.Timeout > 0 { if options.Timeout > 0 {
@ -253,7 +260,7 @@ func (c *consulRegistry) ListServices() ([]*Service, error) {
var services []*Service var services []*Service
for service, _ := range rsp { for service := range rsp {
services = append(services, &Service{Name: service}) services = append(services, &Service{Name: service})
} }