{{$backendServers := .Servers}} [backends] {{range $backendName, $backend := .Backends}} {{if hasCircuitBreakerLabel $backend}} [backends.backend-{{$backendName}}.circuitBreaker] expression = "{{getCircuitBreakerExpression $backend}}" {{end}} {{if hasLoadBalancerLabel $backend}} [backends.backend-{{$backendName}}.loadBalancer] method = "{{getLoadBalancerMethod $backend}}" sticky = {{getSticky $backend}} {{if hasStickinessLabel $backend}} [backends.backend-{{$backendName}}.loadBalancer.stickiness] cookieName = "{{getStickinessCookieName $backend}}" {{end}} {{end}} {{if hasMaxConnLabels $backend}} [backends.backend-{{$backendName}}.maxConn] amount = {{getMaxConnAmount $backend}} extractorFunc = "{{getMaxConnExtractorFunc $backend}}" {{end}} {{if hasHealthCheckLabels $backend}} [backends.backend-{{$backendName}}.healthCheck] path = "{{getHealthCheckPath $backend}}" port = {{getHealthCheckPort $backend}} interval = "{{getHealthCheckInterval $backend}}" {{end}} {{$servers := index $backendServers $backendName}} {{range $serverName, $server := $servers}} {{if hasServices $server}} {{$services := getServiceNames $server}} {{range $serviceIndex, $serviceName := $services}} [backends.backend-{{getServiceBackend $server $serviceName}}.servers.service-{{$serverName}}] url = "{{getServiceProtocol $server $serviceName}}://{{getIPAddress $server}}:{{getServicePort $server $serviceName}}" weight = {{getServiceWeight $server $serviceName}} {{end}} {{else}} [backends.backend-{{$backendName}}.servers.server-{{$server.Name | replace "/" "" | replace "." "-"}}] url = "{{getProtocol $server}}://{{getIPAddress $server}}:{{getPort $server}}" weight = {{getWeight $server}} {{end}} {{end}} {{end}} [frontends] {{range $frontend, $containers := .Frontends}} {{$container := index $containers 0}} {{if hasServices $container}} {{$services := getServiceNames $container}} {{range $serviceIndex, $serviceName := $services}} [frontends."frontend-{{getServiceBackend $container $serviceName}}"] backend = "backend-{{getServiceBackend $container $serviceName}}" priority = {{getServicePriority $container $serviceName}} passHostHeader = {{getServicePassHostHeader $container $serviceName}} passTLSCert = {{getServicePassTLSCert $container $serviceName}} entryPoints = [{{range getServiceEntryPoints $container $serviceName}} "{{.}}", {{end}}] {{if getServiceWhitelistSourceRange $container $serviceName}} whitelistSourceRange = [{{range getServiceWhitelistSourceRange $container $serviceName}} "{{.}}", {{end}}] {{end}} basicAuth = [{{range getServiceBasicAuth $container $serviceName}} "{{.}}", {{end}}] {{if hasServiceRedirect $container $serviceName}} [frontends."frontend-{{getServiceBackend $container $serviceName}}".redirect] entryPoint = "{{getServiceRedirectEntryPoint $container $serviceName}}" regex = "{{getServiceRedirectRegex $container $serviceName}}" replacement = "{{getServiceRedirectReplacement $container $serviceName}}" {{end}} {{ if hasServiceErrorPages $container $serviceName }} [frontends."frontend-{{getServiceBackend $container $serviceName}}".errors] {{ range $pageName, $page := getServiceErrorPages $container $serviceName }} [frontends."frontend-{{getServiceBackend $container $serviceName}}".errors.{{$pageName}}] status = [{{range $page.Status}} "{{.}}", {{end}}] backend = "{{$page.Backend}}" query = "{{$page.Query}}" {{end}} {{end}} {{ if hasServiceRateLimits $container $serviceName }} [frontends."frontend-{{getServiceBackend $container $serviceName}}".rateLimit] extractorFunc = "{{ getRateLimitsExtractorFunc $container $serviceName }}" [frontends."frontend-{{getServiceBackend $container $serviceName}}".rateLimit.rateSet] {{ range $limitName, $rateLimit := getServiceRateLimits $container $serviceName }} [frontends."frontend-{{getServiceBackend $container $serviceName}}".rateLimit.rateSet.{{ $limitName }}] period = "{{ $rateLimit.Period }}" average = {{ $rateLimit.Average }} burst = {{ $rateLimit.Burst }} {{end}} {{end}} [frontends."frontend-{{getServiceBackend $container $serviceName}}".routes."service-{{$serviceName | replace "/" "" | replace "." "-"}}"] rule = "{{getServiceFrontendRule $container $serviceName}}" {{if hasServiceRequestHeaders $container $serviceName}} [frontends."frontend-{{getServiceBackend $container $serviceName}}".headers.customRequestHeaders] {{range $k, $v := getServiceRequestHeaders $container $serviceName}} {{$k}} = "{{$v}}" {{end}} {{end}} {{if hasServiceResponseHeaders $container $serviceName}} [frontends."frontend-{{getServiceBackend $container $serviceName}}".headers.customResponseHeaders] {{range $k, $v := getServiceResponseHeaders $container $serviceName}} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} ## end range services {{else}} [frontends."frontend-{{$frontend}}"] backend = "backend-{{getBackend $container}}" priority = {{getPriority $container}} passHostHeader = {{getPassHostHeader $container}} passTLSCert = {{getPassTLSCert $container}} entryPoints = [{{range getEntryPoints $container}} "{{.}}", {{end}}] {{if getWhitelistSourceRange $container}} whitelistSourceRange = [{{range getWhitelistSourceRange $container}} "{{.}}", {{end}}] {{end}} basicAuth = [{{range getBasicAuth $container}} "{{.}}", {{end}}] {{if hasRedirect $container}} [frontends."frontend-{{$frontend}}".redirect] entryPoint = "{{getRedirectEntryPoint $container}}" regex = "{{getRedirectRegex $container}}" replacement = "{{getRedirectReplacement $container}}" {{end}} {{ if hasErrorPages $container }} [frontends."frontend-{{$frontend}}".errors] {{ range $pageName, $page := getErrorPages $container }} [frontends."frontend-{{$frontend}}".errors.{{ $pageName }}] status = [{{range $page.Status}} "{{.}}", {{end}}] backend = "{{$page.Backend}}" query = "{{$page.Query}}" {{end}} {{end}} {{ if hasRateLimits $container }} [frontends."frontend-{{$frontend}}".rateLimit] extractorFunc = "{{ getRateLimitsExtractorFunc $container }}" [frontends."frontend-{{$frontend}}".rateLimit.rateSet] {{ range $limitName, $rateLimit := getRateLimits $container }} [frontends."frontend-{{$frontend}}".rateLimit.rateSet.{{ $limitName }}] period = "{{ $rateLimit.Period }}" average = {{ $rateLimit.Average }} burst = {{ $rateLimit.Burst }} {{end}} {{end}} {{ if hasHeaders $container}} [frontends."frontend-{{$frontend}}".headers] {{if hasSSLRedirectHeaders $container}} SSLRedirect = {{getSSLRedirectHeaders $container}} {{end}} {{if hasSSLTemporaryRedirectHeaders $container}} SSLTemporaryRedirect = {{getSSLTemporaryRedirectHeaders $container}} {{end}} {{if hasSSLHostHeaders $container}} SSLHost = "{{getSSLHostHeaders $container}}" {{end}} {{if hasSTSSecondsHeaders $container}} STSSeconds = {{getSTSSecondsHeaders $container}} {{end}} {{if hasSTSIncludeSubdomainsHeaders $container}} STSIncludeSubdomains = {{getSTSIncludeSubdomainsHeaders $container}} {{end}} {{if hasSTSPreloadHeaders $container}} STSPreload = {{getSTSPreloadHeaders $container}} {{end}} {{if hasForceSTSHeaderHeaders $container}} ForceSTSHeader = {{getForceSTSHeaderHeaders $container}} {{end}} {{if hasFrameDenyHeaders $container}} FrameDeny = {{getFrameDenyHeaders $container}} {{end}} {{if hasCustomFrameOptionsValueHeaders $container}} CustomFrameOptionsValue = "{{getCustomFrameOptionsValueHeaders $container}}" {{end}} {{if hasContentTypeNosniffHeaders $container}} ContentTypeNosniff = {{getContentTypeNosniffHeaders $container}} {{end}} {{if hasBrowserXSSFilterHeaders $container}} BrowserXSSFilter = {{getBrowserXSSFilterHeaders $container}} {{end}} {{if hasContentSecurityPolicyHeaders $container}} ContentSecurityPolicy = "{{getContentSecurityPolicyHeaders $container}}" {{end}} {{if hasPublicKeyHeaders $container}} PublicKey = "{{getPublicKeyHeaders $container}}" {{end}} {{if hasReferrerPolicyHeaders $container}} ReferrerPolicy = "{{getReferrerPolicyHeaders $container}}" {{end}} {{if hasIsDevelopmentHeaders $container}} IsDevelopment = {{getIsDevelopmentHeaders $container}} {{end}} {{if hasAllowedHostsHeaders $container}} AllowedHosts = [{{range getAllowedHostsHeaders $container}} "{{.}}", {{end}}] {{end}} {{if hasHostsProxyHeaders $container}} HostsProxyHeaders = [{{range getHostsProxyHeaders $container}} "{{.}}", {{end}}] {{end}} {{if hasRequestHeaders $container}} [frontends."frontend-{{$frontend}}".headers.customRequestHeaders] {{range $k, $v := getRequestHeaders $container}} {{$k}} = "{{$v}}" {{end}} {{end}} {{if hasResponseHeaders $container}} [frontends."frontend-{{$frontend}}".headers.customResponseHeaders] {{range $k, $v := getResponseHeaders $container}} {{$k}} = "{{$v}}" {{end}} {{end}} {{if hasSSLProxyHeaders $container}} [frontends."frontend-{{$frontend}}".headers.SSLProxyHeaders] {{range $k, $v := getSSLProxyHeaders $container}} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} [frontends."frontend-{{$frontend}}".routes."route-frontend-{{$frontend}}"] rule = "{{getFrontendRule $container}}" {{end}} {{end}}