diff --git a/autogen/gentemplates/gen.go b/autogen/gentemplates/gen.go index 6dc094e33..2f41ada8e 100644 --- a/autogen/gentemplates/gen.go +++ b/autogen/gentemplates/gen.go @@ -124,192 +124,268 @@ func templatesConsul_catalogTmpl() (*asset, error) { } var _templatesDockerTmpl = []byte(`{{$backendServers := .Servers}} -[backends]{{range $backendName, $backend := .Backends}} - {{if hasCircuitBreakerLabel $backend}} - [backends.backend-{{$backendName}}.circuitbreaker] - expression = "{{getCircuitBreakerExpression $backend}}" - {{end}} +[backends] +{{range $backendName, $backend := .Backends}} - {{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 hasCircuitBreakerLabel $backend}} + [backends.backend-{{$backendName}}.circuitBreaker] + expression = "{{getCircuitBreakerExpression $backend}}" + {{end}} - {{if hasMaxConnLabels $backend}} - [backends.backend-{{$backendName}}.maxconn] - amount = {{getMaxConnAmount $backend}} - extractorfunc = "{{getMaxConnExtractorFunc $backend}}" + {{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}} - {{$servers := index $backendServers $backendName}} - {{range $serverName, $server := $servers}} + {{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}} + 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}} + url = "{{getProtocol $server}}://{{getIPAddress $server}}:{{getPort $server}}" + weight = {{getWeight $server}} {{end}} + {{end}} {{end}} -[frontends]{{range $frontend, $containers := .Frontends}} +[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}}" - passHostHeader = {{getServicePassHostHeader $container $serviceName}} - {{if getWhitelistSourceRange $container}} - whitelistSourceRange = [{{range getWhitelistSourceRange $container}} - "{{.}}", - {{end}}] - {{end}} - priority = {{getServicePriority $container $serviceName}} - entryPoints = [{{range getServiceEntryPoints $container $serviceName}} - "{{.}}", - {{end}}] - basicAuth = [{{range getServiceBasicAuth $container $serviceName}} - "{{.}}", - {{end}}] + backend = "backend-{{getServiceBackend $container $serviceName}}" + priority = {{getServicePriority $container $serviceName}} + passHostHeader = {{getServicePassHostHeader $container $serviceName}} + passTLSCert = {{getServicePassTLSCert $container $serviceName}} - {{if hasServiceRedirect $container $serviceName}} - [frontends."frontend-{{getServiceBackend $container $serviceName}}".redirect] - entryPoint = "{{getServiceRedirectEntryPoint $container $serviceName}}" - regex = "{{getServiceRedirectRegex $container $serviceName}}" - replacement = "{{getServiceRedirectReplacement $container $serviceName}}" - {{end}} + 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}}" + + {{if hasServiceRequestHeaders $container $serviceName}} + [frontends."frontend-{{getServiceBackend $container $serviceName}}".headers.customRequestHeaders] + {{range $k, $v := getServiceRequestHeaders $container $serviceName}} + {{$k}} = "{{$v}}" + {{end}} {{end}} - {{end}} - {{if hasServiceResponseHeaders $container $serviceName}} - [frontends."frontend-{{getServiceBackend $container $serviceName}}".headers.customresponseheaders] - {{range $k, $v := getServiceResponseHeaders $container $serviceName}} - {{$k}} = "{{$v}}" + + {{if hasServiceResponseHeaders $container $serviceName}} + [frontends."frontend-{{getServiceBackend $container $serviceName}}".headers.customResponseHeaders] + {{range $k, $v := getServiceResponseHeaders $container $serviceName}} + {{$k}} = "{{$v}}" + {{end}} {{end}} - {{end}} - {{end}} + + {{end}} ## end range services + {{else}} + [frontends."frontend-{{$frontend}}"] - backend = "backend-{{getBackend $container}}" - passHostHeader = {{getPassHostHeader $container}} - {{if getWhitelistSourceRange $container}} + 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}} - priority = {{getPriority $container}} - entryPoints = [{{range getEntryPoints $container}} - "{{.}}", - {{end}}] - basicAuth = [{{range getBasicAuth $container}} - "{{.}}", - {{end}}] + {{end}}] + {{end}} - {{if hasRedirect $container}} - [frontends."frontend-{{$frontend}}".redirect] - entryPoint = "{{getRedirectEntryPoint $container}}" - regex = "{{getRedirectRegex $container}}" - replacement = "{{getRedirectReplacement $container}}" - {{end}} + basicAuth = [{{range getBasicAuth $container}} + "{{.}}", + {{end}}] - [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 hasRequestHeaders $container}} - [frontends."frontend-{{$frontend}}".headers.customrequestheaders] - {{range $k, $v := getRequestHeaders $container}} - {{$k}} = "{{$v}}" + {{if hasRedirect $container}} + [frontends."frontend-{{$frontend}}".redirect] + entryPoint = "{{getRedirectEntryPoint $container}}" + regex = "{{getRedirectRegex $container}}" + replacement = "{{getRedirectReplacement $container}}" {{end}} - {{end}} - {{if hasResponseHeaders $container}} - [frontends."frontend-{{$frontend}}".headers.customresponseheaders] - {{range $k, $v := getResponseHeaders $container}} - {{$k}} = "{{$v}}" + + {{ 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}} - {{end}} - {{if hasAllowedHostsHeaders $container}} - [frontends."frontend-{{$frontend}}".headers.AllowedHosts] - {{range getAllowedHostsHeaders $container}} - "{{.}}" + + {{ 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}} - {{end}} - {{if hasHostsProxyHeaders $container}} - [frontends."frontend-{{$frontend}}".headers.HostsProxyHeaders] - {{range getHostsProxyHeaders $container}} - "{{.}}" - {{end}} - {{end}} - {{if hasSSLProxyHeaders $container}} - [frontends."frontend-{{$frontend}}".headers.SSLProxyHeaders] - {{range $k, $v := getSSLProxyHeaders $container}} - {{$k}} = "{{$v}}" - {{end}} - {{end}} + + [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 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 hasAllowedHostsHeaders $container}} + [frontends."frontend-{{$frontend}}".headers.AllowedHosts] + {{range getAllowedHostsHeaders $container}} + "{{.}}" + {{end}} + {{end}} + {{if hasHostsProxyHeaders $container}} + [frontends."frontend-{{$frontend}}".headers.HostsProxyHeaders] + {{range getHostsProxyHeaders $container}} + "{{.}}" + {{end}} + {{end}} + {{if hasSSLProxyHeaders $container}} + [frontends."frontend-{{$frontend}}".headers.SSLProxyHeaders] + {{range $k, $v := getSSLProxyHeaders $container}} + {{$k}} = "{{$v}}" + {{end}} + {{end}} + [frontends."frontend-{{$frontend}}".routes."route-frontend-{{$frontend}}"] - rule = "{{getFrontendRule $container}}" + rule = "{{getFrontendRule $container}}" + {{end}} + {{end}} `)