Squashed commit of the following:
commit 468cdf5c74b8df80fe6cc093feda84d124d47460 Author: Erin Dachtler <download333@gmail.com> Date: Mon May 30 17:21:50 2016 -0700 Documentation update commit bcbe622141fc333579177e056b49d418997c511d Author: Erin Dachtler <download333@gmail.com> Date: Sat May 28 15:32:34 2016 -0700 Whoops, forgot to fmt commit 1ad5f1052541372722adc372069da094b422c793 Author: Erin Dachtler <download333@gmail.com> Date: Sat May 28 14:56:04 2016 -0700 Added getIPAddress helper for docker template, and tests
This commit is contained in:
parent
a9f9894f29
commit
df7e1cf078
4 changed files with 97 additions and 4 deletions
|
@ -539,7 +539,8 @@ Labels can be used on containers to override default behaviour:
|
||||||
- `traefik.frontend.rule=Host:test.traefik.io`: override the default frontend rule (Default: `Host:{containerName}.{domain}`).
|
- `traefik.frontend.rule=Host:test.traefik.io`: override the default frontend rule (Default: `Host:{containerName}.{domain}`).
|
||||||
- `traefik.frontend.passHostHeader=true`: forward client `Host` header to the backend.
|
- `traefik.frontend.passHostHeader=true`: forward client `Host` header to the backend.
|
||||||
- `traefik.frontend.entryPoints=http,https`: assign this frontend to entry points `http` and `https`. Overrides `defaultEntryPoints`.
|
- `traefik.frontend.entryPoints=http,https`: assign this frontend to entry points `http` and `https`. Overrides `defaultEntryPoints`.
|
||||||
* `traefik.domain=traefik.localhost`: override the default domain
|
- `traefik.domain=traefik.localhost`: override the default domain
|
||||||
|
- `traefik.docker.network`: Set the docker network to use for connections to this container
|
||||||
|
|
||||||
|
|
||||||
## Marathon backend
|
## Marathon backend
|
||||||
|
@ -644,7 +645,7 @@ Træfɪk can be configured to use Kubernetes Ingress as a backend configuration:
|
||||||
# and KUBERNETES_SERVICE_PORT_HTTPS as endpoint
|
# and KUBERNETES_SERVICE_PORT_HTTPS as endpoint
|
||||||
# Secure token will be found in /var/run/secrets/kubernetes.io/serviceaccount/token
|
# Secure token will be found in /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
# and SSL CA cert in /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
# and SSL CA cert in /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
||||||
#
|
#
|
||||||
# Optional
|
# Optional
|
||||||
#
|
#
|
||||||
# endpoint = "http://localhost:8080"
|
# endpoint = "http://localhost:8080"
|
||||||
|
@ -973,4 +974,3 @@ Once the `/traefik/alias` key is updated, the new `/traefik_configurations/2` co
|
||||||
| `/traefik_configurations/2/backends/backend1/servers/server2/weight` | `5` |
|
| `/traefik_configurations/2/backends/backend1/servers/server2/weight` | `5` |
|
||||||
|
|
||||||
Note that Træfɪk *will not watch for key changes in the `/traefik_configurations` prefix*. It will only watch for changes in the `/traefik` prefix. Further, if the `/traefik/alias` key is set, all other sibling keys with the `/traefik` prefix are ignored.
|
Note that Træfɪk *will not watch for key changes in the `/traefik_configurations` prefix*. It will only watch for changes in the `/traefik` prefix. Further, if the `/traefik/alias` key is set, all other sibling keys with the `/traefik` prefix are ignored.
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,7 @@ func (provider *Docker) Provide(configurationChan chan<- types.ConfigMessage, po
|
||||||
func (provider *Docker) loadDockerConfig(containersInspected []dockertypes.ContainerJSON) *types.Configuration {
|
func (provider *Docker) loadDockerConfig(containersInspected []dockertypes.ContainerJSON) *types.Configuration {
|
||||||
var DockerFuncMap = template.FuncMap{
|
var DockerFuncMap = template.FuncMap{
|
||||||
"getBackend": provider.getBackend,
|
"getBackend": provider.getBackend,
|
||||||
|
"getIPAddress": provider.getIPAddress,
|
||||||
"getPort": provider.getPort,
|
"getPort": provider.getPort,
|
||||||
"getWeight": provider.getWeight,
|
"getWeight": provider.getWeight,
|
||||||
"getDomain": provider.getDomain,
|
"getDomain": provider.getDomain,
|
||||||
|
@ -244,6 +245,22 @@ func (provider *Docker) getBackend(container dockertypes.ContainerJSON) string {
|
||||||
return normalize(container.Name)
|
return normalize(container.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (provider *Docker) getIPAddress(container dockertypes.ContainerJSON) string {
|
||||||
|
if label, err := getLabel(container, "traefik.docker.network"); err == nil && label != "" {
|
||||||
|
networks := container.NetworkSettings.Networks
|
||||||
|
if networks != nil {
|
||||||
|
network := networks[label]
|
||||||
|
if network != nil {
|
||||||
|
return network.IPAddress
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, network := range container.NetworkSettings.Networks {
|
||||||
|
return network.IPAddress
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func (provider *Docker) getPort(container dockertypes.ContainerJSON) string {
|
func (provider *Docker) getPort(container dockertypes.ContainerJSON) string {
|
||||||
if label, err := getLabel(container, "traefik.port"); err == nil {
|
if label, err := getLabel(container, "traefik.port"); err == nil {
|
||||||
return label
|
return label
|
||||||
|
|
|
@ -203,6 +203,82 @@ func TestDockerGetBackend(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDockerGetIPAddress(t *testing.T) { // TODO
|
||||||
|
provider := &Docker{}
|
||||||
|
|
||||||
|
containers := []struct {
|
||||||
|
container docker.ContainerJSON
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
container: docker.ContainerJSON{
|
||||||
|
ContainerJSONBase: &docker.ContainerJSONBase{
|
||||||
|
Name: "bar",
|
||||||
|
},
|
||||||
|
Config: &container.Config{},
|
||||||
|
NetworkSettings: &docker.NetworkSettings{
|
||||||
|
Networks: map[string]*network.EndpointSettings{
|
||||||
|
"testnet": {
|
||||||
|
IPAddress: "10.11.12.13",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: "10.11.12.13",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
container: docker.ContainerJSON{
|
||||||
|
ContainerJSONBase: &docker.ContainerJSONBase{
|
||||||
|
Name: "bar",
|
||||||
|
},
|
||||||
|
Config: &container.Config{
|
||||||
|
Labels: map[string]string{
|
||||||
|
"traefik.docker.network": "testnet",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
NetworkSettings: &docker.NetworkSettings{
|
||||||
|
Networks: map[string]*network.EndpointSettings{
|
||||||
|
"nottestnet": {
|
||||||
|
IPAddress: "10.11.12.13",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: "10.11.12.13",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
container: docker.ContainerJSON{
|
||||||
|
ContainerJSONBase: &docker.ContainerJSONBase{
|
||||||
|
Name: "bar",
|
||||||
|
},
|
||||||
|
Config: &container.Config{
|
||||||
|
Labels: map[string]string{
|
||||||
|
"traefik.docker.network": "testnet2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
NetworkSettings: &docker.NetworkSettings{
|
||||||
|
Networks: map[string]*network.EndpointSettings{
|
||||||
|
"testnet1": {
|
||||||
|
IPAddress: "10.11.12.13",
|
||||||
|
},
|
||||||
|
"testnet2": {
|
||||||
|
IPAddress: "10.11.12.14",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: "10.11.12.14",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, e := range containers {
|
||||||
|
actual := provider.getIPAddress(e.container)
|
||||||
|
if actual != e.expected {
|
||||||
|
t.Fatalf("expected %q, got %q", e.expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDockerGetPort(t *testing.T) {
|
func TestDockerGetPort(t *testing.T) {
|
||||||
provider := &Docker{}
|
provider := &Docker{}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[backends]{{range .Containers}}
|
[backends]{{range .Containers}}
|
||||||
[backends.backend-{{getBackend .}}.servers.server-{{.Name | replace "/" "" | replace "." "-"}}]
|
[backends.backend-{{getBackend .}}.servers.server-{{.Name | replace "/" "" | replace "." "-"}}]
|
||||||
url = "{{getProtocol .}}://{{range $i := .NetworkSettings.Networks}}{{if $i}}{{.IPAddress}}{{end}}{{end}}:{{getPort .}}"
|
url = "{{getProtocol .}}://{{getIPAddress .}}:{{getPort .}}"
|
||||||
weight = {{getWeight .}}
|
weight = {{getWeight .}}
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue