Documentation ¶
Overview ¶
Package config provides decoupling between various configuration sources (etcd, files,...) and the pieces that actually care about them (loadbalancer, proxy). Config takes 1 or more configuration sources and allows for incremental (add/remove) and full replace (set) changes from each of the sources, then creates a union of the configuration and provides a unified view for both service handlers as well as endpoint handlers. There is no attempt to resolve conflicts of any sort. Basic idea is that each configuration source gets a channel from the Config service and pushes updates to it via that channel. Config then keeps track of incremental & replace changes and distributes them to listeners as appropriate.
Index ¶
- type ConfigSourceEtcd
- func (s ConfigSourceEtcd) GetEndpoints(service string) (api.Endpoints, error)
- func (s ConfigSourceEtcd) GetServices() ([]api.Service, []api.Endpoints, error)
- func (s ConfigSourceEtcd) ProcessChange(response *etcd.Response)
- func (s ConfigSourceEtcd) ProcessEndpointResponse(response *etcd.Response)
- func (s ConfigSourceEtcd) Run()
- func (s ConfigSourceEtcd) WatchForChanges()
- type ConfigSourceFile
- type EndpointsConfig
- type EndpointsConfigHandler
- type EndpointsUpdate
- type Operation
- type ServiceConfig
- type ServiceConfigHandler
- type ServiceUpdate
- type SourceAPI
- type Watcher
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ConfigSourceEtcd ¶
type ConfigSourceEtcd struct {
// contains filtered or unexported fields
}
ConfigSourceEtcd communicates with a etcd via the client, and sends the change notification of services and endpoints to the specified channels.
func NewConfigSourceEtcd ¶
func NewConfigSourceEtcd(client *etcd.Client, serviceChannel chan ServiceUpdate, endpointsChannel chan EndpointsUpdate) ConfigSourceEtcd
NewConfigSourceEtcd creates a new ConfigSourceEtcd and immediately runs the created ConfigSourceEtcd in a goroutine.
func (ConfigSourceEtcd) GetEndpoints ¶
func (s ConfigSourceEtcd) GetEndpoints(service string) (api.Endpoints, error)
GetEndpoints finds the list of endpoints of the service from etcd.
func (ConfigSourceEtcd) GetServices ¶
GetServices finds the list of services and their endpoints from etcd. This operation is akin to a set a known good at regular intervals.
func (ConfigSourceEtcd) ProcessChange ¶
func (s ConfigSourceEtcd) ProcessChange(response *etcd.Response)
func (ConfigSourceEtcd) ProcessEndpointResponse ¶
func (s ConfigSourceEtcd) ProcessEndpointResponse(response *etcd.Response)
func (ConfigSourceEtcd) Run ¶
func (s ConfigSourceEtcd) Run()
Run begins watching for new services and their endpoints on etcd.
func (ConfigSourceEtcd) WatchForChanges ¶
func (s ConfigSourceEtcd) WatchForChanges()
type ConfigSourceFile ¶
type ConfigSourceFile struct {
// contains filtered or unexported fields
}
ConfigSourceFile periodically reads service configurations in JSON from a file, and sends the services and endpoints defined in the file to the specified channels.
func NewConfigSourceFile ¶
func NewConfigSourceFile(filename string, serviceChannel chan ServiceUpdate, endpointsChannel chan EndpointsUpdate) ConfigSourceFile
NewConfigSourceFile creates a new ConfigSourceFile and let it immediately runs the created ConfigSourceFile in a goroutine.
type EndpointsConfig ¶
type EndpointsConfig struct {
// contains filtered or unexported fields
}
EndpointsConfig tracks a set of endpoints configurations. It accepts "set", "add" and "remove" operations of endpoints via channels, and invokes registered handlers on change.
func NewEndpointsConfig ¶
func NewEndpointsConfig() *EndpointsConfig
NewEndpointsConfig creates a new EndpointsConfig. It immediately runs the created EndpointsConfig.
func (*EndpointsConfig) Channel ¶
func (c *EndpointsConfig) Channel(source string) chan EndpointsUpdate
func (*EndpointsConfig) Config ¶
func (c *EndpointsConfig) Config() map[string]map[string]api.Endpoints
func (*EndpointsConfig) RegisterHandler ¶
func (c *EndpointsConfig) RegisterHandler(handler EndpointsConfigHandler)
type EndpointsConfigHandler ¶
type EndpointsConfigHandler interface { // OnUpdate gets called when endpoints configuration is changed for a given // service on any of the configuration sources. An example is when a new // service comes up, or when containers come up or down for an existing service. OnUpdate(endpoints []api.Endpoints) }
EndpointsConfigHandler is an abstract interface of objects which receive update notifications for the set of endpoints.
type EndpointsUpdate ¶
EndpointsUpdate describes an operation of endpoints, sent on the channel. You can add or remove single endpoints by sending an array of size one and Op == ADD|REMOVE. For setting the state of the system to a given state for this source configuration, set Endpoints as desired and Op to SET, which will reset the system state to that specified in this operation for this source channel. To remove all endpoints, set Endpoints to empty array and Op to SET
type ServiceConfig ¶
type ServiceConfig struct {
// contains filtered or unexported fields
}
ServiceConfig tracks a set of service configurations. It accepts "set", "add" and "remove" operations of services via channels, and invokes registered handlers on change.
func NewServiceConfig ¶
func NewServiceConfig() *ServiceConfig
NewServiceConfig creates a new ServiceConfig. It immediately runs the created ServiceConfig.
func (*ServiceConfig) Channel ¶
func (c *ServiceConfig) Channel(source string) chan ServiceUpdate
func (*ServiceConfig) RegisterHandler ¶
func (c *ServiceConfig) RegisterHandler(handler ServiceConfigHandler)
type ServiceConfigHandler ¶
type ServiceConfigHandler interface { // OnUpdate gets called when a configuration has been changed by one of the sources. // This is the union of all the configuration sources. OnUpdate(services []api.Service) }
ServiceConfigHandler is an abstract interface of objects which receive update notifications for the set of services.
type ServiceUpdate ¶
ServiceUpdate describes an operation of services, sent on the channel. You can add or remove single services by sending an array of size one and Op == ADD|REMOVE. For setting the state of the system to a given state for this source configuration, set Services as desired and Op to SET, which will reset the system state to that specified in this operation for this source channel. To remove all services, set Services to empty array and Op to SET
type SourceAPI ¶
type SourceAPI struct {
// contains filtered or unexported fields
}
SourceAPI implements a configuration source for services and endpoints that uses the client watch API to efficiently detect changes.
func NewSourceAPI ¶
func NewSourceAPI(client Watcher, period time.Duration, services chan<- ServiceUpdate, endpoints chan<- EndpointsUpdate) *SourceAPI
NewSourceAPI creates a config source that watches for changes to the services and endpoints.
type Watcher ¶
type Watcher interface { ListServices(label labels.Selector) (*api.ServiceList, error) ListEndpoints(label labels.Selector) (*api.EndpointsList, error) WatchServices(label, field labels.Selector, resourceVersion uint64) (watch.Interface, error) WatchEndpoints(label, field labels.Selector, resourceVersion uint64) (watch.Interface, error) }
Watcher is the interface needed to receive changes to services and endpoints.