diff --git a/consul.go b/consul.go index 849fefc97..344f8f1ec 100644 --- a/consul.go +++ b/consul.go @@ -68,7 +68,7 @@ func NewConsulProvider() *ConsulProvider { return consulProvider } -func (provider *ConsulProvider) Provide(configurationChan chan<- *Configuration) { +func (provider *ConsulProvider) Provide(configurationChan chan<- configMessage) { config := &api.Config{ Address: provider.Endpoint, Scheme: "http", @@ -99,7 +99,7 @@ func (provider *ConsulProvider) Provide(configurationChan chan<- *Configuration) waitIndex = meta.LastIndex configuration := provider.loadConsulConfig() if configuration != nil { - configurationChan <- configuration + configurationChan <- configMessage{"consul", configuration} } } } @@ -107,7 +107,7 @@ func (provider *ConsulProvider) Provide(configurationChan chan<- *Configuration) } } configuration := provider.loadConsulConfig() - configurationChan <- configuration + configurationChan <- configMessage{"consul", configuration} } func (provider *ConsulProvider) loadConsulConfig() *Configuration { diff --git a/docker.go b/docker.go index 625e2634b..4ae6c2209 100644 --- a/docker.go +++ b/docker.go @@ -65,7 +65,7 @@ var DockerFuncMap = template.FuncMap{ "getHost": getHost, } -func (provider *DockerProvider) Provide(configurationChan chan<- *Configuration) { +func (provider *DockerProvider) Provide(configurationChan chan<- configMessage) { if dockerClient, err := docker.NewClient(provider.Endpoint); err != nil { log.Fatalf("Failed to create a client for docker, error: %s", err) } else { @@ -90,7 +90,7 @@ func (provider *DockerProvider) Provide(configurationChan chan<- *Configuration) log.Debugf("Docker event receveived %+v", event) configuration := provider.loadDockerConfig(dockerClient) if configuration != nil { - configurationChan <- configuration + configurationChan <- configMessage{"docker", configuration} } } } @@ -106,7 +106,7 @@ func (provider *DockerProvider) Provide(configurationChan chan<- *Configuration) } configuration := provider.loadDockerConfig(dockerClient) - configurationChan <- configuration + configurationChan <- configMessage{"docker", configuration} } } diff --git a/docs/index.md b/docs/index.md index b8a0e4868..045f221cf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -254,83 +254,109 @@ $ curl -s "http://localhost:8080/health" | jq . } ``` -* ```/api```: ```GET``` or ```PUT``` a configuration +* ```/api```: ```GET``` configuration for all providers ```sh $ curl -s "http://localhost:8082/api" | jq . { - "Frontends": { - "frontend-traefik": { - "Routes": { - "route-host-traefik": { - "Value": "traefik.docker.localhost", - "Rule": "Host" - } + "file": { + "Frontends": { + "frontend-traefik": { + "Routes": { + "route-host-traefik": { + "Value": "traefik.docker.localhost", + "Rule": "Host" + } + }, + "Backend": "backend-test2" }, - "Backend": "backend-test2" + "frontend-test": { + "Routes": { + "route-host-test": { + "Value": "test.docker.localhost", + "Rule": "Host" + } + }, + "Backend": "backend-test1" + } }, - "frontend-test": { - "Routes": { - "route-host-test": { - "Value": "test.docker.localhost", - "Rule": "Host" + "Backends": { + "backend-test2": { + "Servers": { + "server-stoic_brattain": { + "Weight": 0, + "Url": "http://172.17.0.8:80" + }, + "server-jovial_khorana": { + "Weight": 0, + "Url": "http://172.17.0.12:80" + }, + "server-jovial_franklin": { + "Weight": 0, + "Url": "http://172.17.0.11:80" + }, + "server-elegant_panini": { + "Weight": 0, + "Url": "http://172.17.0.9:80" + }, + "server-adoring_elion": { + "Weight": 0, + "Url": "http://172.17.0.10:80" + } } }, - "Backend": "backend-test1" + "backend-test1": { + "Servers": { + "server-trusting_wozniak": { + "Weight": 0, + "Url": "http://172.17.0.5:80" + }, + "server-sharp_jang": { + "Weight": 0, + "Url": "http://172.17.0.7:80" + }, + "server-dreamy_feynman": { + "Weight": 0, + "Url": "http://172.17.0.6:80" + } + } + } } }, - "Backends": { - "backend-test2": { - "Servers": { - "server-stoic_brattain": { - "Weight": 0, - "Url": "http://172.17.0.8:80" + "marathon": { + "Frontends": { + "frontend-marathon": { + "Routes": { + "route-host-marathon": { + "Value": "marathon.docker.localhost", + "Rule": "Host" + } }, - "server-jovial_khorana": { - "Weight": 0, - "Url": "http://172.17.0.12:80" - }, - "server-jovial_franklin": { - "Weight": 0, - "Url": "http://172.17.0.11:80" - }, - "server-elegant_panini": { - "Weight": 0, - "Url": "http://172.17.0.9:80" - }, - "server-adoring_elion": { - "Weight": 0, - "Url": "http://172.17.0.10:80" - } - } + "Backend": "backend-marathon" + }, }, - "backend-test1": { - "Servers": { - "server-trusting_wozniak": { - "Weight": 0, - "Url": "http://172.17.0.5:80" + "Backends": { + "backend-marathon": { + "Servers": { + "server-marathon-1": { + "Weight": 0, + "Url": "http://172.17.0.8:802" + }, }, - "server-sharp_jang": { - "Weight": 0, - "Url": "http://172.17.0.7:80" - }, - "server-dreamy_feynman": { - "Weight": 0, - "Url": "http://172.17.0.6:80" - } - } - } - } + }, + }, + }, } ``` -* ```/api/backends```: ```GET``` backends -* ```/api/backends/{backend}```: ```GET``` a backend -* ```/api/backends/{backend}/servers```: ```GET``` servers in a backend -* ```/api/backends/{backend}/servers/{server}```: ```GET``` a server in a backend -* ```/api/frontends```: ```GET``` frontends -* ```/api/frontends/{frontend}```: ```GET``` a frontend +* ```/api/{provider}```: ```GET``` or ```PUT``` provider +* ```/api/{provider}/backends```: ```GET``` backends +* ```/api/{provider}/backends/{backend}```: ```GET``` a backend +* ```/api/{provider}/backends/{backend}/servers```: ```GET``` servers in a backend +* ```/api/{provider}/backends/{backend}/servers/{server}```: ```GET``` a server in a backend +* ```/api/{provider}/frontends```: ```GET``` frontends +* ```/api/{provider}/frontends/{frontend}```: ```GET``` a frontend ## Docker backend diff --git a/file.go b/file.go index ee2a5509a..4cdd4704a 100644 --- a/file.go +++ b/file.go @@ -23,7 +23,7 @@ func NewFileProvider() *FileProvider { return fileProvider } -func (provider *FileProvider) Provide(configurationChan chan<- *Configuration) { +func (provider *FileProvider) Provide(configurationChan chan<- configMessage) { watcher, err := fsnotify.NewWatcher() if err != nil { log.Error("Error creating file watcher", err) @@ -48,7 +48,7 @@ func (provider *FileProvider) Provide(configurationChan chan<- *Configuration) { log.Debug("File event:", event) configuration := provider.LoadFileConfig(file.Name()) if configuration != nil { - configurationChan <- configuration + configurationChan <- configMessage{"file", configuration} } } case error := <-watcher.Errors: @@ -67,7 +67,7 @@ func (provider *FileProvider) Provide(configurationChan chan<- *Configuration) { } configuration := provider.LoadFileConfig(file.Name()) - configurationChan <- configuration + configurationChan <- configMessage{"file", configuration} <-done } diff --git a/marathon.go b/marathon.go index 029edf864..9cb7fe12e 100644 --- a/marathon.go +++ b/marathon.go @@ -67,7 +67,7 @@ var MarathonFuncMap = template.FuncMap{ }, } -func (provider *MarathonProvider) Provide(configurationChan chan<- *Configuration) { +func (provider *MarathonProvider) Provide(configurationChan chan<- configMessage) { config := marathon.NewDefaultConfig() config.URL = provider.Endpoint config.EventsInterface = provider.NetworkInterface @@ -88,7 +88,7 @@ func (provider *MarathonProvider) Provide(configurationChan chan<- *Configuratio log.Debug("Marathon event receveived", event) configuration := provider.loadMarathonConfig() if configuration != nil { - configurationChan <- configuration + configurationChan <- configMessage{"marathon", configuration} } } }() @@ -96,7 +96,7 @@ func (provider *MarathonProvider) Provide(configurationChan chan<- *Configuratio } configuration := provider.loadMarathonConfig() - configurationChan <- configuration + configurationChan <- configMessage{"marathon", configuration} } func (provider *MarathonProvider) loadMarathonConfig() *Configuration { diff --git a/provider.go b/provider.go index 1d08df459..680341827 100644 --- a/provider.go +++ b/provider.go @@ -1,5 +1,5 @@ package main type Provider interface { - Provide(configurationChan chan<- *Configuration) + Provide(configurationChan chan<- configMessage) } diff --git a/templates/configuration.tmpl b/templates/configuration.tmpl index 602c16e38..5112fc12c 100644 --- a/templates/configuration.tmpl +++ b/templates/configuration.tmpl @@ -27,9 +27,10 @@