Compare commits

...

10 Commits

Author SHA1 Message Date
Emile Vauge
ddceefa4e1 Merge pull request #90 from vdemeester/move-version-away
Move version info in its own file.
2015-11-02 10:29:34 +01:00
Vincent Demeester
80cd6c3699 Move version info in its own file.
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-11-02 09:14:49 +01:00
Vincent Demeester
9cfd0a6b26 Merge pull request #87 from emilevauge/add-passhostheader
Add passhostheader in frontends configuration
2015-11-02 09:07:14 +01:00
emile
1e99ecf583 Add passHostHeader in frontend configuration, added traefik.frontend.passHostHeader label 2015-11-02 08:40:54 +01:00
Vincent Demeester
aae7941689 Merge pull request #83 from emilevauge/marathon-filter-healthchecks
Add healthcheck filter in marathon tasks
2015-11-01 22:27:28 +01:00
emile
d888b4fcb5 Added healthcheck filter in marathon tasks 2015-11-01 22:06:05 +01:00
Emile Vauge
b029e7eded Merge pull request #84 from vdemeester/ignore-me
Add .dockerignore to lightweight build context
2015-10-30 13:15:34 +01:00
Vincent Demeester
6f3afe8213 Add .dockerignore to lightweight build context
Ignoring vendor/ and dist/

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-10-30 12:10:13 +01:00
Emile Vauge
b4c019afb6 Merge pull request #85 from vdemeester/make-me-happy
Add a all target than runs default tasks
2015-10-30 12:03:06 +01:00
Vincent Demeester
143ea86ab9 Add a all target than runs default tasks
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-10-30 09:11:43 +01:00
13 changed files with 59 additions and 8 deletions

3
.dockerignore Normal file
View File

@@ -0,0 +1,3 @@
dist/
vendor/
!dist/traefik

View File

@@ -20,6 +20,9 @@ print-%: ; @echo $*=$($*)
default: binary
all: build
$(DOCKER_RUN_TRAEFIK) ./script/make.sh
binary: build
$(DOCKER_RUN_TRAEFIK) ./script/make.sh generate binary

View File

@@ -66,8 +66,9 @@ type Route struct {
// Frontend configuration
type Frontend struct {
Backend string `json:"backend,omitempty"`
Routes map[string]Route `json:"routes,omitempty"`
PassHostHeader bool `json:"passHostHeader,omitempty"`
Backend string `json:"backend,omitempty"`
Routes map[string]Route `json:"routes,omitempty"`
}
// Configuration of a provider

View File

@@ -106,6 +106,12 @@ func (provider *DockerProvider) loadDockerConfig(dockerClient *docker.Client) *C
}
return "http"
},
"getPassHostHeader": func(container docker.Container) string {
if passHostHeader, err := provider.getLabel(container, "traefik.frontend.passHostHeader"); err == nil {
return passHostHeader
}
return "false"
},
"getFrontendValue": provider.GetFrontendValue,
"getFrontendRule": provider.GetFrontendRule,
"replace": func(s1 string, s2 string, s3 string) string {

View File

@@ -38,6 +38,7 @@ Frontends can be defined using the following rules:
A frontend is a set of rules that forwards the incoming http traffic to a backend.
You can optionally enable `passHostHeader` to forward client `Host` header to the backend.
### HTTP Backends
@@ -163,6 +164,7 @@ logLevel = "DEBUG"
value = "test.localhost"
[frontends.frontend2]
backend = "backend1"
passHostHeader = true
[frontends.frontend2.routes.test_2]
rule = "Path"
value = "/test"
@@ -210,6 +212,7 @@ filename = "rules.toml"
value = "test.localhost"
[frontends.frontend2]
backend = "backend1"
passHostHeader = true
[frontends.frontend2.routes.test_2]
rule = "Path"
value = "/test"
@@ -412,6 +415,7 @@ Labels can be used on containers to override default behaviour:
- `traefik.enable=false`: disable this container in Træfɪk
- `traefik.frontend.rule=Host`: override the default frontend rule (Default: Host). See [frontends](#frontends).
- `traefik.frontend.value=test.example.com`: override the default frontend value (Default: `{containerName}.{domain}`) See [frontends](#frontends).
- `traefik.frontend.passHostHeader=true`: forward client `Host` header to the backend.
* `traefik.domain=traefik.localhost`: override the default domain
@@ -474,6 +478,7 @@ Labels can be used on containers to override default behaviour:
- `traefik.enable=false`: disable this application in Træfɪk
- `traefik.frontend.rule=Host`: override the default frontend rule (Default: Host). See [frontends](#frontends).
- `traefik.frontend.value=test.example.com`: override the default frontend value (Default: `{appName}.{domain}`) See [frontends](#frontends).
- `traefik.frontend.passHostHeader=true`: forward client `Host` header to the backend.
* `traefik.domain=traefik.localhost`: override the default domain
## <a id="consul"></a> Consul backend
@@ -551,6 +556,7 @@ The Keys-Values structure should look (using `prefix = "/traefik"`):
| Key | Value |
|----------------------------------------------------|------------|
| `/traefik/frontends/frontend2/backend` | `backend1` |
| `/traefik/frontends/frontend2/passHostHeader` | `true` |
| `/traefik/frontends/frontend2/routes/test_2/rule` | `Path` |
| `/traefik/frontends/frontend2/routes/test_2/value` | `/test` |
@@ -630,6 +636,7 @@ The Keys-Values structure should look (using `prefix = "/traefik"`):
| Key | Value |
|----------------------------------------------------|------------|
| `/traefik/frontends/frontend2/backend` | `backend1` |
| `/traefik/frontends/frontend2/passHostHeader` | `true` |
| `/traefik/frontends/frontend2/routes/test_2/rule` | `Path` |
| `/traefik/frontends/frontend2/routes/test_2/value` | `/test` |
@@ -708,6 +715,7 @@ The Keys-Values structure should look (using `prefix = "/traefik"`):
| Key | Value |
|----------------------------------------------------|------------|
| `/traefik/frontends/frontend2/backend` | `backend1` |
| `/traefik/frontends/frontend2/passHostHeader` | `true` |
| `/traefik/frontends/frontend2/routes/test_2/rule` | `Path` |
| `/traefik/frontends/frontend2/routes/test_2/value` | `/test` |

View File

@@ -94,6 +94,12 @@ func (provider *MarathonProvider) loadMarathonConfig() *Configuration {
}
return "http"
},
"getPassHostHeader": func(application marathon.Application) string {
if passHostHeader, err := provider.getLabel(application, "traefik.frontend.passHostHeader"); err == nil {
return passHostHeader
}
return "false"
},
"getFrontendValue": provider.GetFrontendValue,
"getFrontendRule": provider.GetFrontendRule,
}
@@ -114,7 +120,7 @@ func (provider *MarathonProvider) loadMarathonConfig() *Configuration {
//filter tasks
filteredTasks := fun.Filter(func(task marathon.Task) bool {
if len(task.Ports) == 0 {
log.Debug("Filtering marathon task without port", task.AppID)
log.Debug("Filtering marathon task without port %s", task.AppID)
return false
}
application, errApp := getApplication(task, applications.Apps)
@@ -124,13 +130,28 @@ func (provider *MarathonProvider) loadMarathonConfig() *Configuration {
}
_, err := strconv.Atoi(application.Labels["traefik.port"])
if len(application.Ports) > 1 && err != nil {
log.Debug("Filtering marathon task with more than 1 port and no traefik.port label", task.AppID)
log.Debugf("Filtering marathon task %s with more than 1 port and no traefik.port label", task.AppID)
return false
}
if application.Labels["traefik.enable"] == "false" {
log.Debug("Filtering disabled marathon task", task.AppID)
log.Debugf("Filtering disabled marathon task %s", task.AppID)
return false
}
//filter healthchecks
if application.HasHealthChecks() {
if task.HasHealthCheckResults() {
for _, healthcheck := range task.HealthCheckResult {
// found one bad healthcheck, return false
if !healthcheck.Alive {
log.Debugf("Filtering marathon task %s with bad healthcheck", task.AppID)
return false
}
}
} else {
log.Debugf("Filtering marathon task %s with bad healthcheck", task.AppID)
return false
}
}
return true
}, tasks.Tasks).([]marathon.Task)

View File

@@ -5,6 +5,7 @@ set -e
DEFAULT_BUNDLES=(
validate-gofmt
validate-govet
generate
binary
test-unit

View File

@@ -18,5 +18,6 @@
</div>
<div data-bg-show="frontendCtrl.frontend.backend" class="panel-footer">
<span class="label label-warning" role="button" data-toggle="collapse" href="#{{frontendCtrl.frontend.backend}}" aria-expanded="false">{{frontendCtrl.frontend.backend}}</span>
<span data-ng-show="frontendCtrl.frontend.passHostHeader" class="label label-warning">Pass Host Header</span>
</div>
</div>

View File

@@ -7,6 +7,7 @@
[frontends]{{range $frontend, $containers := .Frontends}}
[frontends."frontend-{{$frontend}}"]{{$container := index $containers 0}}
backend = "backend-{{getBackend $container}}"
passHostHeader = {{getPassHostHeader $container}}
[frontends."frontend-{{$frontend}}".routes."route-frontend-{{$frontend}}"]
rule = "{{getFrontendRule $container}}"
value = "{{getFrontendValue $container}}"

View File

@@ -8,6 +8,7 @@
[frontends]{{range .Applications}}
[frontends.frontend{{.ID | replace "/" "-"}}]
backend = "backend{{.ID | replace "/" "-"}}"
passHostHeader = {{getPassHostHeader .}}
[frontends.frontend-{{.ID | replace "/" ""}}.routes.route-host-{{.ID | replace "/" ""}}]
rule = "{{getFrontendRule .}}"
value = "{{getFrontendValue .}}"

View File

@@ -28,8 +28,6 @@ import (
)
var (
Version = ""
BuildDate = ""
globalConfigFile = kingpin.Arg("conf", "Main configration file.").Default("traefik.toml").String()
version = kingpin.Flag("version", "Get Version.").Short('v').Bool()
currentConfigurations = make(configs)
@@ -287,7 +285,7 @@ func LoadConfig(configurations configs, globalConfiguration *GlobalConfiguration
for _, configuration := range configurations {
for frontendName, frontend := range configuration.Frontends {
log.Debugf("Creating frontend %s", frontendName)
fwd, _ := forward.New(forward.Logger(oxyLogger))
fwd, _ := forward.New(forward.Logger(oxyLogger), forward.PassHostHeader(frontend.PassHostHeader))
newRoute := router.NewRoute().Name(frontendName)
for routeName, route := range frontend.Routes {
log.Debugf("Creating route %s %s:%s", routeName, route.Rule, route.Value)

View File

@@ -356,6 +356,7 @@
# value = "test.localhost"
# [frontends.frontend2]
# backend = "backend1"
# passHostHeader = true
# [frontends.frontend2.routes.test_2]
# rule = "Path"
# value = "/test"

6
version.go Normal file
View File

@@ -0,0 +1,6 @@
package main
var (
Version = ""
BuildDate = ""
)