add ignoreChain option for service
This commit is contained in:
@ -40,6 +40,7 @@ const (
|
|||||||
mdKeyPreDown = "preDown"
|
mdKeyPreDown = "preDown"
|
||||||
mdKeyPostUp = "postUp"
|
mdKeyPostUp = "postUp"
|
||||||
mdKeyPostDown = "postDown"
|
mdKeyPostDown = "postDown"
|
||||||
|
mdKeyIgnoreChain = "ignoreChain"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ParseAuther(cfg *config.AutherConfig) auth.Authenticator {
|
func ParseAuther(cfg *config.AutherConfig) auth.Authenticator {
|
||||||
|
@ -82,6 +82,7 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
var ppv int
|
var ppv int
|
||||||
ifce := cfg.Interface
|
ifce := cfg.Interface
|
||||||
var preUp, preDown, postUp, postDown []string
|
var preUp, preDown, postUp, postDown []string
|
||||||
|
var ignoreChain bool
|
||||||
if cfg.Metadata != nil {
|
if cfg.Metadata != nil {
|
||||||
md := metadata.NewMetadata(cfg.Metadata)
|
md := metadata.NewMetadata(cfg.Metadata)
|
||||||
ppv = mdutil.GetInt(md, mdKeyProxyProtocol)
|
ppv = mdutil.GetInt(md, mdKeyProxyProtocol)
|
||||||
@ -97,23 +98,30 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
preDown = mdutil.GetStrings(md, mdKeyPreDown)
|
preDown = mdutil.GetStrings(md, mdKeyPreDown)
|
||||||
postUp = mdutil.GetStrings(md, mdKeyPostUp)
|
postUp = mdutil.GetStrings(md, mdKeyPostUp)
|
||||||
postDown = mdutil.GetStrings(md, mdKeyPostDown)
|
postDown = mdutil.GetStrings(md, mdKeyPostDown)
|
||||||
|
ignoreChain = mdutil.GetBool(md, mdKeyIgnoreChain)
|
||||||
}
|
}
|
||||||
|
|
||||||
var ln listener.Listener
|
listenOpts := []listener.Option{
|
||||||
if rf := registry.ListenerRegistry().Get(cfg.Listener.Type); rf != nil {
|
|
||||||
ln = rf(
|
|
||||||
listener.AddrOption(cfg.Addr),
|
listener.AddrOption(cfg.Addr),
|
||||||
listener.AutherOption(auther),
|
listener.AutherOption(auther),
|
||||||
listener.AuthOption(parseAuth(cfg.Listener.Auth)),
|
listener.AuthOption(parseAuth(cfg.Listener.Auth)),
|
||||||
listener.TLSConfigOption(tlsConfig),
|
listener.TLSConfigOption(tlsConfig),
|
||||||
listener.AdmissionOption(admission.AdmissionGroup(admissions...)),
|
listener.AdmissionOption(admission.AdmissionGroup(admissions...)),
|
||||||
listener.ChainOption(chainGroup(cfg.Listener.Chain, cfg.Listener.ChainGroup)),
|
|
||||||
listener.TrafficLimiterOption(registry.TrafficLimiterRegistry().Get(cfg.Limiter)),
|
listener.TrafficLimiterOption(registry.TrafficLimiterRegistry().Get(cfg.Limiter)),
|
||||||
listener.ConnLimiterOption(registry.ConnLimiterRegistry().Get(cfg.CLimiter)),
|
listener.ConnLimiterOption(registry.ConnLimiterRegistry().Get(cfg.CLimiter)),
|
||||||
listener.LoggerOption(listenerLogger),
|
listener.LoggerOption(listenerLogger),
|
||||||
listener.ServiceOption(cfg.Name),
|
listener.ServiceOption(cfg.Name),
|
||||||
listener.ProxyProtocolOption(ppv),
|
listener.ProxyProtocolOption(ppv),
|
||||||
|
}
|
||||||
|
if !ignoreChain {
|
||||||
|
listenOpts = append(listenOpts,
|
||||||
|
listener.ChainOption(chainGroup(cfg.Listener.Chain, cfg.Listener.ChainGroup)),
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
var ln listener.Listener
|
||||||
|
if rf := registry.ListenerRegistry().Get(cfg.Listener.Type); rf != nil {
|
||||||
|
ln = rf(listenOpts...)
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("unregistered listener: %s", cfg.Listener.Type)
|
return nil, fmt.Errorf("unregistered listener: %s", cfg.Listener.Type)
|
||||||
}
|
}
|
||||||
@ -163,17 +171,23 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
Record: r.Record,
|
Record: r.Record,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
router := chain.NewRouter(
|
|
||||||
|
routerOpts := []chain.RouterOption{
|
||||||
chain.RetriesRouterOption(cfg.Handler.Retries),
|
chain.RetriesRouterOption(cfg.Handler.Retries),
|
||||||
// chain.TimeoutRouterOption(10*time.Second),
|
// chain.TimeoutRouterOption(10*time.Second),
|
||||||
chain.InterfaceRouterOption(ifce),
|
chain.InterfaceRouterOption(ifce),
|
||||||
chain.SockOptsRouterOption(sockOpts),
|
chain.SockOptsRouterOption(sockOpts),
|
||||||
chain.ChainRouterOption(chainGroup(cfg.Handler.Chain, cfg.Handler.ChainGroup)),
|
|
||||||
chain.ResolverRouterOption(registry.ResolverRegistry().Get(cfg.Resolver)),
|
chain.ResolverRouterOption(registry.ResolverRegistry().Get(cfg.Resolver)),
|
||||||
chain.HostMapperRouterOption(registry.HostsRegistry().Get(cfg.Hosts)),
|
chain.HostMapperRouterOption(registry.HostsRegistry().Get(cfg.Hosts)),
|
||||||
chain.RecordersRouterOption(recorders...),
|
chain.RecordersRouterOption(recorders...),
|
||||||
chain.LoggerRouterOption(handlerLogger),
|
chain.LoggerRouterOption(handlerLogger),
|
||||||
|
}
|
||||||
|
if !ignoreChain {
|
||||||
|
routerOpts = append(routerOpts,
|
||||||
|
chain.ChainRouterOption(chainGroup(cfg.Handler.Chain, cfg.Handler.ChainGroup)),
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
router := chain.NewRouter(routerOpts...)
|
||||||
|
|
||||||
var h handler.Handler
|
var h handler.Handler
|
||||||
if rf := registry.HandlerRegistry().Get(cfg.Handler.Type); rf != nil {
|
if rf := registry.HandlerRegistry().Get(cfg.Handler.Type); rf != nil {
|
||||||
|
Reference in New Issue
Block a user