71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package etcd
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/micro/go-micro/v3/config/source"
 | |
| )
 | |
| 
 | |
| type addressKey struct{}
 | |
| type prefixKey struct{}
 | |
| type stripPrefixKey struct{}
 | |
| type authKey struct{}
 | |
| type dialTimeoutKey struct{}
 | |
| 
 | |
| type authCreds struct {
 | |
| 	Username string
 | |
| 	Password string
 | |
| }
 | |
| 
 | |
| // WithAddress sets the etcd address
 | |
| func WithAddress(a ...string) source.Option {
 | |
| 	return func(o *source.Options) {
 | |
| 		if o.Context == nil {
 | |
| 			o.Context = context.Background()
 | |
| 		}
 | |
| 		o.Context = context.WithValue(o.Context, addressKey{}, a)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // WithPrefix sets the key prefix to use
 | |
| func WithPrefix(p string) source.Option {
 | |
| 	return func(o *source.Options) {
 | |
| 		if o.Context == nil {
 | |
| 			o.Context = context.Background()
 | |
| 		}
 | |
| 		o.Context = context.WithValue(o.Context, prefixKey{}, p)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // StripPrefix indicates whether to remove the prefix from config entries, or leave it in place.
 | |
| func StripPrefix(strip bool) source.Option {
 | |
| 	return func(o *source.Options) {
 | |
| 		if o.Context == nil {
 | |
| 			o.Context = context.Background()
 | |
| 		}
 | |
| 
 | |
| 		o.Context = context.WithValue(o.Context, stripPrefixKey{}, strip)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Auth allows you to specify username/password
 | |
| func Auth(username, password string) source.Option {
 | |
| 	return func(o *source.Options) {
 | |
| 		if o.Context == nil {
 | |
| 			o.Context = context.Background()
 | |
| 		}
 | |
| 		o.Context = context.WithValue(o.Context, authKey{}, &authCreds{Username: username, Password: password})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // WithDialTimeout set the time out for dialing to etcd
 | |
| func WithDialTimeout(timeout time.Duration) source.Option {
 | |
| 	return func(o *source.Options) {
 | |
| 		if o.Context == nil {
 | |
| 			o.Context = context.Background()
 | |
| 		}
 | |
| 		o.Context = context.WithValue(o.Context, dialTimeoutKey{}, timeout)
 | |
| 	}
 | |
| }
 |