diff --git a/registry/consul/options.go b/registry/consul/options.go new file mode 100644 index 00000000..f85bbf79 --- /dev/null +++ b/registry/consul/options.go @@ -0,0 +1,25 @@ +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) + } +} + +func Token(t string) registry.Option { + return func(o *registry.Options) { + if o.Context == nil { + o.Context = context.Background() + } + o.Context = context.WithValue(o.Context, "consul_token", t) + } +} diff --git a/registry/consul_registry.go b/registry/consul_registry.go index 4eecde04..32a12490 100644 --- a/registry/consul_registry.go +++ b/registry/consul_registry.go @@ -53,6 +53,17 @@ func newConsulRegistry(opts ...Option) Registry { // use default config 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) + } + t := options.Context.Value("consul_token") + if t != nil { + config.Token = t.(string) + } + } // set timeout if options.Timeout > 0 { @@ -253,7 +264,7 @@ func (c *consulRegistry) ListServices() ([]*Service, error) { var services []*Service - for service, _ := range rsp { + for service := range rsp { services = append(services, &Service{Name: service}) }