github.com/xmidt-org/webpa-common@v1.11.9/service/servicecfg/environment.go (about) 1 package servicecfg 2 3 import ( 4 "errors" 5 6 "github.com/go-kit/kit/log" 7 "github.com/go-kit/kit/log/level" 8 "github.com/go-kit/kit/sd" 9 "github.com/xmidt-org/webpa-common/logging" 10 "github.com/xmidt-org/webpa-common/service" 11 "github.com/xmidt-org/webpa-common/service/consul" 12 "github.com/xmidt-org/webpa-common/service/zk" 13 "github.com/xmidt-org/webpa-common/xviper" 14 ) 15 16 var ( 17 zookeeperEnvironmentFactory = zk.NewEnvironment 18 consulEnvironmentFactory = consul.NewEnvironment 19 20 errNoServiceDiscovery = errors.New("No service discovery configured") 21 ) 22 23 func NewEnvironment(l log.Logger, u xviper.Unmarshaler, options ...service.Option) (service.Environment, error) { 24 if l == nil { 25 l = logging.DefaultLogger() 26 } 27 28 o := new(Options) 29 if err := u.Unmarshal(&o); err != nil { 30 return nil, err 31 } 32 33 eo := []service.Option{ 34 service.WithAccessorFactory( 35 service.NewConsistentAccessorFactory(o.vnodeCount()), 36 ), 37 service.WithDefaultScheme(o.defaultScheme()), 38 } 39 40 eo = append(eo, options...) 41 42 if len(o.Fixed) > 0 { 43 l.Log(level.Key(), level.InfoValue(), logging.MessageKey(), "using a fixed set of instances for service discovery", "instances", o.Fixed) 44 return service.NewEnvironment( 45 append(eo, 46 service.WithInstancers( 47 service.Instancers{ 48 "fixed": service.NewContextualInstancer( 49 sd.FixedInstancer(o.Fixed), 50 map[string]interface{}{"fixed": o.Fixed}, 51 ), 52 }, 53 ), 54 )..., 55 ), nil 56 } 57 58 if o.Zookeeper != nil { 59 l.Log(level.Key(), level.InfoValue(), logging.MessageKey(), "using zookeeper for service discovery") 60 return zookeeperEnvironmentFactory(l, *o.Zookeeper, eo...) 61 } 62 63 if o.Consul != nil { 64 l.Log(level.Key(), level.InfoValue(), logging.MessageKey(), "using consul for service discovery") 65 return consulEnvironmentFactory(l, o.DefaultScheme, *o.Consul, eo...) 66 } 67 68 return nil, errNoServiceDiscovery 69 }