diff --git a/provider/ecs/config.go b/provider/ecs/config.go index 7e53bdd82..df67fbf3d 100644 --- a/provider/ecs/config.go +++ b/provider/ecs/config.go @@ -41,6 +41,10 @@ func (p *Provider) buildConfiguration(services map[string][]ecsInstance) (*types "getMaxConnAmount": getFuncFirstInt64Value(label.TraefikBackendMaxConnAmount, math.MaxInt64), "getMaxConnExtractorFunc": getFuncFirstStringValue(label.TraefikBackendMaxConnExtractorFunc, label.DefaultBackendMaxconnExtractorFunc), "getWhitelistSourceRange": getFuncSliceString(label.TraefikFrontendWhitelistSourceRange), + "hasRedirect": hasRedirect, + "getRedirectEntryPoint": getFuncStringValue(label.TraefikFrontendRedirectEntryPoint, label.DefaultFrontendRedirectEntryPoint), + "getRedirectRegex": getFuncStringValue(label.TraefikFrontendRedirectRegex, ""), + "getRedirectReplacement": getFuncStringValue(label.TraefikFrontendRedirectReplacement, ""), } return p.GetConfiguration("templates/ecs.tmpl", ecsFuncMap, struct { Services map[string][]ecsInstance @@ -101,6 +105,11 @@ func hasMaxConnLabels(instances []ecsInstance) bool { return mca && mcef } +func hasRedirect(instance ecsInstance) bool { + return hasLabel(instance, label.TraefikFrontendRedirectEntryPoint) || + hasLabel(instance, label.TraefikFrontendRedirectRegex) && hasLabel(instance, label.TraefikFrontendRedirectReplacement) +} + // Label functions func getFuncStringValue(labelName string, defaultValue string) func(i ecsInstance) string { @@ -160,6 +169,11 @@ func getFuncFirstBoolValue(labelName string, defaultValue bool) func(instances [ } } +func hasLabel(i ecsInstance, labelName string) bool { + value, ok := i.containerDefinition.DockerLabels[labelName] + return ok && value != nil && len(*value) > 0 +} + func getStringValue(i ecsInstance, labelName string, defaultValue string) string { if v, ok := i.containerDefinition.DockerLabels[labelName]; ok { if v == nil { diff --git a/templates/ecs.tmpl b/templates/ecs.tmpl index 44042ccc0..ea41f1f05 100644 --- a/templates/ecs.tmpl +++ b/templates/ecs.tmpl @@ -61,6 +61,13 @@ "{{.}}", {{end}}] + {{if hasRedirect $service}} + [frontends."frontend-{{ $serviceName }}".redirect] + entryPoint = "{{getRedirectEntryPoint .}}" + regex = "{{getRedirectRegex .}}" + replacement = "{{getRedirectReplacement .}}" + {{end}} + [frontends.frontend-{{ $serviceName }}.routes.route-frontend-{{ $serviceName }}] rule = "{{getFrontendRule .}}"