// Code generated by go-bindata. // sources: // templates/consul_catalog-v1.tmpl // templates/consul_catalog.tmpl // templates/docker-v1.tmpl // templates/docker.tmpl // templates/ecs-v1.tmpl // templates/ecs.tmpl // templates/eureka.tmpl // templates/kubernetes.tmpl // templates/kv.tmpl // templates/marathon-v1.tmpl // templates/marathon.tmpl // templates/mesos-v1.tmpl // templates/mesos.tmpl // templates/notFound.tmpl // templates/rancher-v1.tmpl // templates/rancher.tmpl // DO NOT EDIT! package gentemplates import ( "fmt" "io/ioutil" "os" "path/filepath" "strings" "time" ) type asset struct { bytes []byte info os.FileInfo } type bindataFileInfo struct { name string size int64 mode os.FileMode modTime time.Time } func (fi bindataFileInfo) Name() string { return fi.name } func (fi bindataFileInfo) Size() int64 { return fi.size } func (fi bindataFileInfo) Mode() os.FileMode { return fi.mode } func (fi bindataFileInfo) ModTime() time.Time { return fi.modTime } func (fi bindataFileInfo) IsDir() bool { return false } func (fi bindataFileInfo) Sys() interface{} { return nil } var _templatesConsul_catalogV1Tmpl = []byte(`[backends] {{range $index, $node := .Nodes }} [backends."backend-{{ getBackend $node }}".servers."{{ getBackendName $node $index }}"] url = "{{ getAttribute "protocol" $node.Service.Tags "http" }}://{{ getBackendAddress $node }}:{{ $node.Service.Port }}" {{ $weight := getAttribute "backend.weight" $node.Service.Tags "0" }} {{with $weight }} weight = {{ $weight }} {{end}} {{end}} {{range .Services }} {{ $service := .ServiceName }} {{ $circuitBreaker := getAttribute "backend.circuitbreaker" .Attributes "" }} {{with $circuitBreaker }} [backends."backend-{{ $service }}".circuitbreaker] expression = "{{ $circuitBreaker }}" {{end}} [backends."backend-{{ $service }}".loadbalancer] method = "{{ getAttribute "backend.loadbalancer" .Attributes "wrr" }}" sticky = {{ getSticky .Attributes }} {{if hasStickinessLabel .Attributes }} [backends."backend-{{ $service }}".loadbalancer.stickiness] cookieName = "{{ getStickinessCookieName .Attributes }}" {{end}} {{if hasMaxconnAttributes .Attributes }} [backends."backend-{{ $service }}".maxconn] amount = {{ getAttribute "backend.maxconn.amount" .Attributes "" }} extractorfunc = "{{ getAttribute "backend.maxconn.extractorfunc" .Attributes "" }}" {{end}} {{end}} [frontends] {{range .Services }} [frontends."frontend-{{ .ServiceName }}"] backend = "backend-{{ .ServiceName }}" passHostHeader = {{ getAttribute "frontend.passHostHeader" .Attributes "true" }} priority = {{ getAttribute "frontend.priority" .Attributes "0" }} {{ $entryPoints := getAttribute "frontend.entrypoints" .Attributes "" }} {{with $entryPoints }} entrypoints = [{{range getEntryPoints $entryPoints }} "{{ . }}", {{end}}] {{end}} basicAuth = [{{range getBasicAuth .Attributes }} "{{ . }}", {{end}}] [frontends."frontend-{{ .ServiceName }}".routes."route-host-{{ .ServiceName }}"] rule = "{{ getFrontendRule . }}" {{end}} `) func templatesConsul_catalogV1TmplBytes() ([]byte, error) { return _templatesConsul_catalogV1Tmpl, nil } func templatesConsul_catalogV1Tmpl() (*asset, error) { bytes, err := templatesConsul_catalogV1TmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/consul_catalog-v1.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesConsul_catalogTmpl = []byte(`[backends] {{range $service := .Services}} {{ $backendName := getServiceBackendName $service }} {{ $circuitBreaker := getCircuitBreaker $service.TraefikLabels }} {{if $circuitBreaker }} [backends."backend-{{ $backendName }}".circuitBreaker] expression = "{{ $circuitBreaker.Expression }}" {{end}} {{ $loadBalancer := getLoadBalancer $service.TraefikLabels }} {{if $loadBalancer }} [backends."backend-{{ $backendName }}".loadBalancer] method = "{{ $loadBalancer.Method }}" sticky = {{ $loadBalancer.Sticky }} {{if $loadBalancer.Stickiness }} [backends."backend-{{ $backendName }}".loadBalancer.stickiness] cookieName = "{{ $loadBalancer.Stickiness.CookieName }}" {{end}} {{end}} {{ $maxConn := getMaxConn $service.TraefikLabels }} {{if $maxConn }} [backends."backend-{{ $backendName }}".maxConn] extractorFunc = "{{ $maxConn.ExtractorFunc }}" amount = {{ $maxConn.Amount }} {{end}} {{ $healthCheck := getHealthCheck $service.TraefikLabels }} {{if $healthCheck }} [backends."backend-{{ $backendName }}".healthCheck] path = "{{ $healthCheck.Path }}" port = {{ $healthCheck.Port }} interval = "{{ $healthCheck.Interval }}" {{end}} {{ $buffering := getBuffering $service.TraefikLabels }} {{if $buffering }} [backends."backend-{{ $backendName }}".buffering] maxRequestBodyBytes = {{ $buffering.MaxRequestBodyBytes }} memRequestBodyBytes = {{ $buffering.MemRequestBodyBytes }} maxResponseBodyBytes = {{ $buffering.MaxResponseBodyBytes }} memResponseBodyBytes = {{ $buffering.MemResponseBodyBytes }} retryExpression = "{{ $buffering.RetryExpression }}" {{end}} {{end}} {{range $index, $node := .Nodes}} {{ $server := getServer $node }} [backends."backend-{{ getNodeBackendName $node }}".servers."{{ getServerName $node $index }}"] url = "{{ $server.URL }}" weight = {{ $server.Weight }} {{end}} [frontends] {{range $service := .Services}} [frontends."frontend-{{ $service.ServiceName }}"] backend = "backend-{{ getServiceBackendName $service }}" priority = {{ getPriority $service.TraefikLabels }} passHostHeader = {{ getPassHostHeader $service.TraefikLabels }} passTLSCert = {{ getPassTLSCert $service.TraefikLabels }} entryPoints = [{{range getFrontEndEntryPoints $service.TraefikLabels }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $service.TraefikLabels }} "{{.}}", {{end}}] {{ $whitelist := getWhiteList $service.TraefikLabels }} {{if $whitelist }} [frontends."frontend-{{ $service.ServiceName }}".whiteList] sourceRange = [{{range $whitelist.SourceRange }} "{{.}}", {{end}}] useXForwardedFor = {{ $whitelist.UseXForwardedFor }} {{end}} {{ $redirect := getRedirect $service.TraefikLabels }} {{if $redirect }} [frontends."frontend-{{ $service.ServiceName }}".redirect] entryPoint = "{{ $redirect.EntryPoint }}" regex = "{{ $redirect.Regex }}" replacement = "{{ $redirect.Replacement }}" permanent = {{ $redirect.Permanent }} {{end}} {{ $errorPages := getErrorPages $service.TraefikLabels }} {{if $errorPages }} [frontends."frontend-{{ $service.ServiceName }}".errors] {{range $pageName, $page := $errorPages }} [frontends."frontend-{{ $service.ServiceName }}".errors."{{ $pageName }}"] status = [{{range $page.Status }} "{{.}}", {{end}}] backend = "{{ $page.Backend }}" query = "{{ $page.Query }}" {{end}} {{end}} {{ $rateLimit := getRateLimit $service.TraefikLabels }} {{if $rateLimit }} [frontends."frontend-{{ $service.ServiceName }}".rateLimit] extractorFunc = "{{ $rateLimit.ExtractorFunc }}" [frontends."frontend-{{ $service.ServiceName }}".rateLimit.rateSet] {{ range $limitName, $limit := $rateLimit.RateSet }} [frontends."frontend-{{ $service.ServiceName }}".rateLimit.rateSet."{{ $limitName }}"] period = "{{ $limit.Period }}" average = {{ $limit.Average }} burst = {{ $limit.Burst }} {{end}} {{end}} {{ $headers := getHeaders $service.TraefikLabels }} {{if $headers }} [frontends."frontend-{{ $service.ServiceName }}".headers] SSLRedirect = {{ $headers.SSLRedirect }} SSLTemporaryRedirect = {{ $headers.SSLTemporaryRedirect }} SSLHost = "{{ $headers.SSLHost }}" STSSeconds = {{ $headers.STSSeconds }} STSIncludeSubdomains = {{ $headers.STSIncludeSubdomains }} STSPreload = {{ $headers.STSPreload }} ForceSTSHeader = {{ $headers.ForceSTSHeader }} FrameDeny = {{ $headers.FrameDeny }} CustomFrameOptionsValue = "{{ $headers.CustomFrameOptionsValue }}" ContentTypeNosniff = {{ $headers.ContentTypeNosniff }} BrowserXSSFilter = {{ $headers.BrowserXSSFilter }} CustomBrowserXSSValue = "{{ $headers.CustomBrowserXSSValue }}" ContentSecurityPolicy = "{{ $headers.ContentSecurityPolicy }}" PublicKey = "{{ $headers.PublicKey }}" ReferrerPolicy = "{{ $headers.ReferrerPolicy }}" IsDevelopment = {{ $headers.IsDevelopment }} {{if $headers.AllowedHosts }} AllowedHosts = [{{range $headers.AllowedHosts }} "{{.}}", {{end}}] {{end}} {{if $headers.HostsProxyHeaders }} HostsProxyHeaders = [{{range $headers.HostsProxyHeaders }} "{{.}}", {{end}}] {{end}} {{if $headers.CustomRequestHeaders }} [frontends."frontend-{{ $service.ServiceName }}".headers.customRequestHeaders] {{range $k, $v := $headers.CustomRequestHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.CustomResponseHeaders }} [frontends."frontend-{{ $service.ServiceName }}".headers.customResponseHeaders] {{range $k, $v := $headers.CustomResponseHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.SSLProxyHeaders }} [frontends."frontend-{{ $service.ServiceName }}".headers.SSLProxyHeaders] {{range $k, $v := $headers.SSLProxyHeaders}} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} [frontends."frontend-{{ $service.ServiceName }}".routes."route-host-{{ $service.ServiceName }}"] rule = "{{ getFrontendRule $service }}" {{end}} `) func templatesConsul_catalogTmplBytes() ([]byte, error) { return _templatesConsul_catalogTmpl, nil } func templatesConsul_catalogTmpl() (*asset, error) { bytes, err := templatesConsul_catalogTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/consul_catalog.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesDockerV1Tmpl = []byte(`{{$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}} {{ $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 }}" passHostHeader = {{ getServicePassHostHeader $container $serviceName }} passTLSCert = {{ getServicePassTLSCert $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}}] {{if hasServiceRedirect $container $serviceName }} [frontends."frontend-{{ getServiceBackend $container $serviceName }}".redirect] entryPoint = "{{ getServiceRedirectEntryPoint $container $serviceName }}" regex = "{{ getServiceRedirectRegex $container $serviceName }}" replacement = "{{ getServiceRedirectReplacement $container $serviceName }}" {{end}} [frontends."frontend-{{ getServiceBackend $container $serviceName }}".routes."service-{{ $serviceName | replace "/" "" | replace "." "-" }}"] rule = "{{ getServiceFrontendRule $container $serviceName }}" {{end}} {{else}} [frontends."frontend-{{ $frontend }}"] backend = "backend-{{ getBackend $container }}" passHostHeader = {{ getPassHostHeader $container}} passTLSCert = {{ getPassTLSCert $container }} priority = {{ getPriority $container }} {{if getWhitelistSourceRange $container}} whitelistSourceRange = [{{range getWhitelistSourceRange $container}} "{{.}}", {{end}}] {{end}} entryPoints = [{{range getEntryPoints $container }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $container }} "{{.}}", {{end}}] {{if hasRedirect $container}} [frontends."frontend-{{$frontend}}".redirect] entryPoint = "{{getRedirectEntryPoint $container}}" regex = "{{getRedirectRegex $container}}" replacement = "{{getRedirectReplacement $container}}" {{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}} `) func templatesDockerV1TmplBytes() ([]byte, error) { return _templatesDockerV1Tmpl, nil } func templatesDockerV1Tmpl() (*asset, error) { bytes, err := templatesDockerV1TmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/docker-v1.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesDockerTmpl = []byte(`{{$backendServers := .Servers}} [backends] {{range $backendName, $servers := .Servers}} {{ $backend := index $servers 0 }} {{ $circuitBreaker := getCircuitBreaker $backend.SegmentLabels }} {{if $circuitBreaker }} [backends."backend-{{ $backendName }}".circuitBreaker] expression = "{{ $circuitBreaker.Expression }}" {{end}} {{ $loadBalancer := getLoadBalancer $backend.SegmentLabels }} {{if $loadBalancer }} [backends."backend-{{ $backendName }}".loadBalancer] method = "{{ $loadBalancer.Method }}" sticky = {{ $loadBalancer.Sticky }} {{if $loadBalancer.Stickiness }} [backends."backend-{{ $backendName }}".loadBalancer.stickiness] cookieName = "{{ $loadBalancer.Stickiness.CookieName }}" {{end}} {{end}} {{ $maxConn := getMaxConn $backend.SegmentLabels }} {{if $maxConn }} [backends."backend-{{ $backendName }}".maxConn] extractorFunc = "{{ $maxConn.ExtractorFunc }}" amount = {{ $maxConn.Amount }} {{end}} {{ $healthCheck := getHealthCheck $backend.SegmentLabels }} {{if $healthCheck }} [backends."backend-{{ $backendName }}".healthCheck] path = "{{ $healthCheck.Path }}" port = {{ $healthCheck.Port }} interval = "{{ $healthCheck.Interval }}" {{end}} {{ $buffering := getBuffering $backend.SegmentLabels }} {{if $buffering }} [backends."backend-{{ $backendName }}".buffering] maxRequestBodyBytes = {{ $buffering.MaxRequestBodyBytes }} memRequestBodyBytes = {{ $buffering.MemRequestBodyBytes }} maxResponseBodyBytes = {{ $buffering.MaxResponseBodyBytes }} memResponseBodyBytes = {{ $buffering.MemResponseBodyBytes }} retryExpression = "{{ $buffering.RetryExpression }}" {{end}} {{range $serverName, $server := getServers $servers }} [backends."backend-{{ $backendName }}".servers."{{ $serverName }}"] url = "{{ $server.URL }}" weight = {{ $server.Weight }} {{end}} {{end}} [frontends] {{range $frontendName, $containers := .Frontends }} {{ $container := index $containers 0 }} [frontends."frontend-{{ $frontendName }}"] backend = "backend-{{ getBackendName $container }}" priority = {{ getPriority $container.SegmentLabels }} passHostHeader = {{ getPassHostHeader $container.SegmentLabels }} passTLSCert = {{ getPassTLSCert $container.SegmentLabels }} entryPoints = [{{range getEntryPoints $container.SegmentLabels }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $container.SegmentLabels }} "{{.}}", {{end}}] {{ $whitelist := getWhiteList $container.SegmentLabels }} {{if $whitelist }} [frontends."frontend-{{ $frontendName }}".whiteList] sourceRange = [{{range $whitelist.SourceRange }} "{{.}}", {{end}}] useXForwardedFor = {{ $whitelist.UseXForwardedFor }} {{end}} {{ $redirect := getRedirect $container.SegmentLabels }} {{if $redirect }} [frontends."frontend-{{ $frontendName }}".redirect] entryPoint = "{{ $redirect.EntryPoint }}" regex = "{{ $redirect.Regex }}" replacement = "{{ $redirect.Replacement }}" permanent = {{ $redirect.Permanent }} {{end}} {{ $errorPages := getErrorPages $container.SegmentLabels }} {{if $errorPages }} [frontends."frontend-{{ $frontendName }}".errors] {{range $pageName, $page := $errorPages }} [frontends."frontend-{{ $frontendName }}".errors."{{ $pageName }}"] status = [{{range $page.Status }} "{{.}}", {{end}}] backend = "{{ $page.Backend }}" query = "{{ $page.Query }}" {{end}} {{end}} {{ $rateLimit := getRateLimit $container.SegmentLabels }} {{if $rateLimit }} [frontends."frontend-{{ $frontendName }}".rateLimit] extractorFunc = "{{ $rateLimit.ExtractorFunc }}" [frontends."frontend-{{ $frontendName }}".rateLimit.rateSet] {{ range $limitName, $limit := $rateLimit.RateSet }} [frontends."frontend-{{ $frontendName }}".rateLimit.rateSet."{{ $limitName }}"] period = "{{ $limit.Period }}" average = {{ $limit.Average }} burst = {{ $limit.Burst }} {{end}} {{end}} {{ $headers := getHeaders $container.SegmentLabels }} {{if $headers }} [frontends."frontend-{{ $frontendName }}".headers] SSLRedirect = {{ $headers.SSLRedirect }} SSLTemporaryRedirect = {{ $headers.SSLTemporaryRedirect }} SSLHost = "{{ $headers.SSLHost }}" STSSeconds = {{ $headers.STSSeconds }} STSIncludeSubdomains = {{ $headers.STSIncludeSubdomains }} STSPreload = {{ $headers.STSPreload }} ForceSTSHeader = {{ $headers.ForceSTSHeader }} FrameDeny = {{ $headers.FrameDeny }} CustomFrameOptionsValue = "{{ $headers.CustomFrameOptionsValue }}" ContentTypeNosniff = {{ $headers.ContentTypeNosniff }} BrowserXSSFilter = {{ $headers.BrowserXSSFilter }} ContentSecurityPolicy = "{{ $headers.ContentSecurityPolicy }}" CustomBrowserXSSValue = "{{ $headers.CustomBrowserXSSValue }}" PublicKey = "{{ $headers.PublicKey }}" ReferrerPolicy = "{{ $headers.ReferrerPolicy }}" IsDevelopment = {{ $headers.IsDevelopment }} {{if $headers.AllowedHosts }} AllowedHosts = [{{range $headers.AllowedHosts }} "{{.}}", {{end}}] {{end}} {{if $headers.HostsProxyHeaders }} HostsProxyHeaders = [{{range $headers.HostsProxyHeaders }} "{{.}}", {{end}}] {{end}} {{if $headers.CustomRequestHeaders }} [frontends."frontend-{{ $frontendName }}".headers.customRequestHeaders] {{range $k, $v := $headers.CustomRequestHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.CustomResponseHeaders }} [frontends."frontend-{{ $frontendName }}".headers.customResponseHeaders] {{range $k, $v := $headers.CustomResponseHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.SSLProxyHeaders }} [frontends."frontend-{{ $frontendName }}".headers.SSLProxyHeaders] {{range $k, $v := $headers.SSLProxyHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} [frontends."frontend-{{ $frontendName }}".routes."route-frontend-{{ $frontendName }}"] rule = "{{ getFrontendRule $container $container.SegmentLabels }}" {{end}} `) func templatesDockerTmplBytes() ([]byte, error) { return _templatesDockerTmpl, nil } func templatesDockerTmpl() (*asset, error) { bytes, err := templatesDockerTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/docker.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesEcsV1Tmpl = []byte(`[backends] {{range $serviceName, $instances := .Services }} [backends."backend-{{ $serviceName }}".loadBalancer] method = "{{ getLoadBalancerMethod $instances }}" sticky = {{ getLoadBalancerSticky $instances }} {{if hasStickinessLabel $instances }} [backends."backend-{{ $serviceName }}".loadBalancer.stickiness] cookieName = "{{ getStickinessCookieName $instances }}" {{end}} {{ if hasHealthCheckLabels $instances }} [backends."backend-{{ $serviceName }}".healthCheck] path = "{{ getHealthCheckPath $instances }}" interval = "{{ getHealthCheckInterval $instances }}" {{end}} {{range $index, $i := $instances }} [backends."backend-{{ $i.Name }}".servers."server-{{ $i.Name }}{{ $i.ID }}"] url = "{{ getProtocol $i }}://{{ getHost $i }}:{{ getPort $i }}" weight = {{ getWeight $i }} {{end}} {{end}} [frontends] {{range $serviceName, $instances := .Services}} {{range filterFrontends $instances }} [frontends."frontend-{{ $serviceName }}"] backend = "backend-{{ $serviceName }}" passHostHeader = {{ getPassHostHeader . }} priority = {{ getPriority . }} entryPoints = [{{range getEntryPoints . }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth . }} "{{.}}", {{end}}] [frontends."frontend-{{ $serviceName }}".routes."route-frontend-{{ $serviceName }}"] rule = "{{getFrontendRule .}}" {{end}} {{end}}`) func templatesEcsV1TmplBytes() ([]byte, error) { return _templatesEcsV1Tmpl, nil } func templatesEcsV1Tmpl() (*asset, error) { bytes, err := templatesEcsV1TmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/ecs-v1.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesEcsTmpl = []byte(`[backends] {{range $serviceName, $instances := .Services }} {{ $firstInstance := index $instances 0 }} {{ $circuitBreaker := getCircuitBreaker $firstInstance.TraefikLabels }} {{if $circuitBreaker }} [backends."backend-{{ $serviceName }}".circuitBreaker] expression = "{{ $circuitBreaker.Expression }}" {{end}} {{ $loadBalancer := getLoadBalancer $firstInstance.TraefikLabels }} {{if $loadBalancer }} [backends."backend-{{ $serviceName }}".loadBalancer] method = "{{ $loadBalancer.Method }}" sticky = {{ $loadBalancer.Sticky }} {{if $loadBalancer.Stickiness }} [backends."backend-{{ $serviceName }}".loadBalancer.stickiness] cookieName = "{{ $loadBalancer.Stickiness.CookieName }}" {{end}} {{end}} {{ $maxConn := getMaxConn $firstInstance.TraefikLabels }} {{if $maxConn }} [backends."backend-{{ $serviceName }}".maxConn] extractorFunc = "{{ $maxConn.ExtractorFunc }}" amount = {{ $maxConn.Amount }} {{end}} {{ $healthCheck := getHealthCheck $firstInstance.TraefikLabels }} {{if $healthCheck }} [backends."backend-{{ $serviceName }}".healthCheck] path = "{{ $healthCheck.Path }}" port = {{ $healthCheck.Port }} interval = "{{ $healthCheck.Interval }}" {{end}} {{ $buffering := getBuffering $firstInstance.TraefikLabels }} {{if $buffering }} [backends."backend-{{ $serviceName }}".buffering] maxRequestBodyBytes = {{ $buffering.MaxRequestBodyBytes }} memRequestBodyBytes = {{ $buffering.MemRequestBodyBytes }} maxResponseBodyBytes = {{ $buffering.MaxResponseBodyBytes }} memResponseBodyBytes = {{ $buffering.MemResponseBodyBytes }} retryExpression = "{{ $buffering.RetryExpression }}" {{end}} {{range $serverName, $server := getServers $instances }} [backends."backend-{{ $serviceName }}".servers."{{ $serverName }}"] url = "{{ $server.URL }}" weight = {{ $server.Weight }} {{end}} {{end}} [frontends] {{range $serviceName, $instances := .Services }} {{range $instance := filterFrontends $instances }} [frontends."frontend-{{ $serviceName }}"] backend = "backend-{{ $serviceName }}" priority = {{ getPriority $instance.TraefikLabels }} passHostHeader = {{ getPassHostHeader $instance.TraefikLabels }} passTLSCert = {{ getPassTLSCert $instance.TraefikLabels }} entryPoints = [{{range getEntryPoints $instance.TraefikLabels }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $instance.TraefikLabels }} "{{.}}", {{end}}] {{ $whitelist := getWhiteList $instance.TraefikLabels }} {{if $whitelist }} [frontends."frontend-{{ $serviceName }}".whiteList] sourceRange = [{{range $whitelist.SourceRange }} "{{.}}", {{end}}] useXForwardedFor = {{ $whitelist.UseXForwardedFor }} {{end}} {{ $redirect := getRedirect $instance.TraefikLabels }} {{if $redirect }} [frontends."frontend-{{ $serviceName }}".redirect] entryPoint = "{{ $redirect.EntryPoint }}" regex = "{{ $redirect.Regex }}" replacement = "{{ $redirect.Replacement }}" permanent = {{ $redirect.Permanent }} {{end}} {{ $errorPages := getErrorPages $instance.TraefikLabels }} {{if $errorPages }} [frontends."frontend-{{ $serviceName }}".errors] {{range $pageName, $page := $errorPages }} [frontends."frontend-{{ $serviceName }}".errors."{{ $pageName }}"] status = [{{range $page.Status }} "{{.}}", {{end}}] backend = "{{ $page.Backend }}" query = "{{ $page.Query }}" {{end}} {{end}} {{ $rateLimit := getRateLimit $instance.TraefikLabels }} {{if $rateLimit }} [frontends."frontend-{{ $serviceName }}".rateLimit] extractorFunc = "{{ $rateLimit.ExtractorFunc }}" [frontends."frontend-{{ $serviceName }}".rateLimit.rateSet] {{ range $limitName, $limit := $rateLimit.RateSet }} [frontends."frontend-{{ $serviceName }}".rateLimit.rateSet."{{ $limitName }}"] period = "{{ $limit.Period }}" average = {{ $limit.Average }} burst = {{ $limit.Burst }} {{end}} {{end}} {{ $headers := getHeaders $instance.TraefikLabels }} {{if $headers }} [frontends."frontend-{{ $serviceName }}".headers] SSLRedirect = {{ $headers.SSLRedirect }} SSLTemporaryRedirect = {{ $headers.SSLTemporaryRedirect }} SSLHost = "{{ $headers.SSLHost }}" STSSeconds = {{ $headers.STSSeconds }} STSIncludeSubdomains = {{ $headers.STSIncludeSubdomains }} STSPreload = {{ $headers.STSPreload }} ForceSTSHeader = {{ $headers.ForceSTSHeader }} FrameDeny = {{ $headers.FrameDeny }} CustomFrameOptionsValue = "{{ $headers.CustomFrameOptionsValue }}" ContentTypeNosniff = {{ $headers.ContentTypeNosniff }} BrowserXSSFilter = {{ $headers.BrowserXSSFilter }} CustomBrowserXSSValue = "{{ $headers.CustomBrowserXSSValue }}" ContentSecurityPolicy = "{{ $headers.ContentSecurityPolicy }}" PublicKey = "{{ $headers.PublicKey }}" ReferrerPolicy = "{{ $headers.ReferrerPolicy }}" IsDevelopment = {{ $headers.IsDevelopment }} {{if $headers.AllowedHosts }} AllowedHosts = [{{range $headers.AllowedHosts }} "{{.}}", {{end}}] {{end}} {{if $headers.HostsProxyHeaders }} HostsProxyHeaders = [{{range $headers.HostsProxyHeaders }} "{{.}}", {{end}}] {{end}} {{if $headers.CustomRequestHeaders }} [frontends."frontend-{{ $serviceName }}".headers.customRequestHeaders] {{range $k, $v := $headers.CustomRequestHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.CustomResponseHeaders }} [frontends."frontend-{{ $serviceName }}".headers.customResponseHeaders] {{range $k, $v := $headers.CustomResponseHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.SSLProxyHeaders }} [frontends."frontend-{{ $serviceName }}".headers.SSLProxyHeaders] {{range $k, $v := $headers.SSLProxyHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} [frontends."frontend-{{ $serviceName }}".routes."route-frontend-{{ $serviceName }}"] rule = "{{ getFrontendRule $instance }}" {{end}} {{end}}`) func templatesEcsTmplBytes() ([]byte, error) { return _templatesEcsTmpl, nil } func templatesEcsTmpl() (*asset, error) { bytes, err := templatesEcsTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/ecs.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesEurekaTmpl = []byte(`[backends] {{range $app := .Applications }} [backends.backend-{{ $app.Name }}] {{range $instance := .Instances }} [backends."backend-{{ $app.Name }}".servers."server-{{ getInstanceID $instance }}"] url = "{{ getProtocol $instance }}://{{ .IpAddr }}:{{ getPort $instance }}" weight = {{ getWeight $instance }} {{end}} {{end}} [frontends] {{range $app := .Applications }} [frontends."frontend-{{ $app.Name }}"] backend = "backend-{{ $app.Name }}" entryPoints = ["http"] [frontends."frontend-{{ $app.Name }}".routes."route-host{{ $app.Name }}"] rule = "Host:{{ $app.Name | tolower }}" {{end}} `) func templatesEurekaTmplBytes() ([]byte, error) { return _templatesEurekaTmpl, nil } func templatesEurekaTmpl() (*asset, error) { bytes, err := templatesEurekaTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/eureka.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesKubernetesTmpl = []byte(`[backends] {{range $backendName, $backend := .Backends }} [backends."{{ $backendName }}"] {{if $backend.CircuitBreaker }} [backends."{{ $backendName }}".circuitBreaker] expression = "{{ $backend.CircuitBreaker.Expression }}" {{end}} [backends."{{ $backendName }}".loadBalancer] method = "{{ $backend.LoadBalancer.Method }}" sticky = {{ $backend.LoadBalancer.Sticky }} {{if $backend.LoadBalancer.Stickiness }} [backends."{{ $backendName }}".loadBalancer.stickiness] cookieName = "{{ $backend.LoadBalancer.Stickiness.CookieName }}" {{end}} {{if $backend.MaxConn }} [backends."{{ $backendName }}".maxConn] amount = {{ $backend.MaxConn.Amount }} extractorFunc = "{{ $backend.MaxConn.ExtractorFunc }}" {{end}} {{if $backend.Buffering }} [backends."{{ $backendName }}".buffering] maxRequestBodyBytes = {{ $backend.Buffering.MaxRequestBodyBytes }} memRequestBodyBytes = {{ $backend.Buffering.MemRequestBodyBytes }} maxResponseBodyBytes = {{ $backend.Buffering.MaxResponseBodyBytes }} memResponseBodyBytes = {{ $backend.Buffering.MemResponseBodyBytes }} retryExpression = "{{ $backend.Buffering.RetryExpression }}" {{end}} {{range $serverName, $server := $backend.Servers }} [backends."{{ $backendName }}".servers."{{ $serverName }}"] url = "{{ $server.URL }}" weight = {{ $server.Weight }} {{end}} {{end}} [frontends] {{range $frontendName, $frontend := .Frontends }} [frontends."{{ $frontendName }}"] backend = "{{ $frontend.Backend }}" priority = {{ $frontend.Priority }} passHostHeader = {{ $frontend.PassHostHeader }} passTLSCert = {{ $frontend.PassTLSCert }} entryPoints = [{{range $frontend.EntryPoints }} "{{.}}", {{end}}] basicAuth = [{{range $frontend.BasicAuth }} "{{.}}", {{end}}] {{if $frontend.WhiteList }} [frontends."{{ $frontendName }}".whiteList] sourceRange = [{{range $frontend.WhiteList.SourceRange }} "{{.}}", {{end}}] useXForwardedFor = {{ $frontend.WhiteList.UseXForwardedFor }} {{end}} {{if $frontend.Redirect }} [frontends."{{ $frontendName }}".redirect] entryPoint = "{{ $frontend.Redirect.EntryPoint }}" regex = "{{ $frontend.Redirect.Regex }}" replacement = "{{ $frontend.Redirect.Replacement }}" {{end}} {{if $frontend.Errors }} [frontends."{{ $frontendName }}".errors] {{range $pageName, $page := $frontend.Errors }} [frontends."{{ $frontendName }}".errors."{{ $pageName }}"] status = [{{range $page.Status }} "{{.}}", {{end}}] backend = "{{ $page.Backend }}" query = "{{ $page.Query }}" {{end}} {{end}} {{if $frontend.RateLimit }} [frontends."{{ $frontendName }}".rateLimit] extractorFunc = "{{ $frontend.RateLimit.ExtractorFunc }}" [frontends."{{ $frontendName }}".rateLimit.rateSet] {{range $limitName, $limit := $frontend.RateLimit.RateSet }} [frontends."{{ $frontendName }}".rateLimit.rateSet."{{ $limitName }}"] period = "{{ $limit.Period }}" average = {{ $limit.Average }} burst = {{ $limit.Burst }} {{end}} {{end}} {{if $frontend.Headers }} [frontends."{{ $frontendName }}".headers] SSLRedirect = {{ $frontend.Headers.SSLRedirect }} SSLTemporaryRedirect = {{ $frontend.Headers.SSLTemporaryRedirect }} SSLHost = "{{ $frontend.Headers.SSLHost }}" STSSeconds = {{ $frontend.Headers.STSSeconds }} STSIncludeSubdomains = {{ $frontend.Headers.STSIncludeSubdomains }} STSPreload = {{ $frontend.Headers.STSPreload }} ForceSTSHeader = {{ $frontend.Headers.ForceSTSHeader }} FrameDeny = {{ $frontend.Headers.FrameDeny }} CustomFrameOptionsValue = "{{ $frontend.Headers.CustomFrameOptionsValue }}" ContentTypeNosniff = {{ $frontend.Headers.ContentTypeNosniff }} BrowserXSSFilter = {{ $frontend.Headers.BrowserXSSFilter }} CustomBrowserXSSValue = "{{ $frontend.Headers.CustomBrowserXSSValue }}" ContentSecurityPolicy = "{{ $frontend.Headers.ContentSecurityPolicy }}" PublicKey = "{{ $frontend.Headers.PublicKey }}" ReferrerPolicy = "{{ $frontend.Headers.ReferrerPolicy }}" IsDevelopment = {{ $frontend.Headers.IsDevelopment }} {{if $frontend.Headers.AllowedHosts }} AllowedHosts = [{{range $frontend.Headers.AllowedHosts }} "{{.}}", {{end}}] {{end}} {{if $frontend.Headers.HostsProxyHeaders }} HostsProxyHeaders = [{{range $frontend.Headers.HostsProxyHeaders }} "{{.}}", {{end}}] {{end}} {{if $frontend.Headers.CustomRequestHeaders }} [frontends."{{ $frontendName }}".headers.customRequestHeaders] {{range $k, $v := $frontend.Headers.CustomRequestHeaders }} {{ $k }} = "{{ $v }}" {{end}} {{end}} {{if $frontend.Headers.CustomResponseHeaders }} [frontends."{{ $frontendName }}".headers.customResponseHeaders] {{range $k, $v := $frontend.Headers.CustomResponseHeaders }} {{ $k }} = "{{ $v }}" {{end}} {{end}} {{if $frontend.Headers.SSLProxyHeaders }} [frontends."{{ $frontendName }}".headers.SSLProxyHeaders] {{range $k, $v := $frontend.Headers.SSLProxyHeaders }} {{ $k }} = "{{ $v }}" {{end}} {{end}} {{end}} {{range $routeName, $route := $frontend.Routes }} [frontends."{{ $frontendName }}".routes."{{ $routeName }}"] rule = "{{ $route.Rule }}" {{end}} {{end}} {{range $tls := .TLS }} [[tls]] entryPoints = [{{range $tls.EntryPoints }} "{{.}}", {{end}}] [tls.certificate] certFile = """{{ $tls.Certificate.CertFile }}""" keyFile = """{{ $tls.Certificate.KeyFile }}""" {{end}} `) func templatesKubernetesTmplBytes() ([]byte, error) { return _templatesKubernetesTmpl, nil } func templatesKubernetesTmpl() (*asset, error) { bytes, err := templatesKubernetesTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/kubernetes.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesKvTmpl = []byte(`[backends] {{range $backend := List .Prefix "/backends/" }} {{ $backendName := Last $backend }} {{ $circuitBreaker := getCircuitBreaker $backend }} {{if $circuitBreaker }} [backends."{{ $backendName }}".circuitBreaker] expression = "{{ $circuitBreaker.Expression }}" {{end}} {{ $loadBalancer := getLoadBalancer $backend }} {{if $loadBalancer }} [backends."{{ $backendName }}".loadBalancer] method = "{{ $loadBalancer.Method }}" sticky = {{ $loadBalancer.Sticky }} {{if $loadBalancer.Stickiness }} [backends."{{ $backendName }}".loadBalancer.stickiness] cookieName = "{{ $loadBalancer.Stickiness.CookieName }}" {{end}} {{end}} {{ $maxConn := getMaxConn $backend }} {{if $maxConn }} [backends."{{ $backendName }}".maxConn] extractorFunc = "{{ $maxConn.ExtractorFunc }}" amount = {{ $maxConn.Amount }} {{end}} {{ $healthCheck := getHealthCheck $backend }} {{if $healthCheck }} [backends.{{ $backendName }}.healthCheck] path = "{{ $healthCheck.Path }}" port = {{ $healthCheck.Port }} interval = "{{ $healthCheck.Interval }}" {{end}} {{ $buffering := getBuffering $backend }} {{if $buffering }} [backends.{{ $backendName }}.buffering] maxRequestBodyBytes = {{ $buffering.MaxRequestBodyBytes }} memRequestBodyBytes = {{ $buffering.MemRequestBodyBytes }} maxResponseBodyBytes = {{ $buffering.MaxResponseBodyBytes }} memResponseBodyBytes = {{ $buffering.MemResponseBodyBytes }} retryExpression = "{{ $buffering.RetryExpression }}" {{end}} {{range $serverName, $server := getServers $backend}} [backends."{{ $backendName }}".servers."{{ $serverName }}"] url = "{{ $server.URL }}" weight = {{ $server.Weight }} {{end}} {{end}} [frontends] {{range $frontend := List .Prefix "/frontends/" }} {{ $frontendName := Last $frontend }} [frontends."{{ $frontendName }}"] backend = "{{ getBackendName $frontend }}" priority = {{ getPriority $frontend }} passHostHeader = {{ getPassHostHeader $frontend }} passTLSCert = {{ getPassTLSCert $frontend }} entryPoints = [{{range getEntryPoints $frontend }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $frontend }} "{{.}}", {{end}}] {{ $whitelist := getWhiteList $frontend }} {{if $whitelist }} [frontends."{{ $frontendName }}".whiteList] sourceRange = [{{range $whitelist.SourceRange }} "{{.}}", {{end}}] useXForwardedFor = {{ $whitelist.UseXForwardedFor }} {{end}} {{ $redirect := getRedirect $frontend }} {{if $redirect }} [frontends."{{ $frontendName }}".redirect] entryPoint = "{{ $redirect.EntryPoint }}" regex = "{{ $redirect.Regex }}" replacement = "{{ $redirect.Replacement }}" permanent = {{ $redirect.Permanent }} {{end}} {{ $errorPages := getErrorPages $frontend }} {{if $errorPages }} [frontends."{{ $frontendName }}".errors] {{range $pageName, $page := $errorPages }} [frontends."{{$frontendName}}".errors."{{ $pageName }}"] status = [{{range $page.Status }} "{{.}}", {{end}}] backend = "{{$page.Backend}}" query = "{{$page.Query}}" {{end}} {{end}} {{ $rateLimit := getRateLimit $frontend }} {{if $rateLimit }} [frontends."{{ $frontendName }}".rateLimit] extractorFunc = "{{ $rateLimit.ExtractorFunc }}" [frontends."{{ $frontendName }}".rateLimit.rateSet] {{range $limitName, $rateLimit := $rateLimit.RateSet }} [frontends."{{ $frontendName }}".rateLimit.rateSet."{{ $limitName }}"] period = "{{ $rateLimit.Period }}" average = {{ $rateLimit.Average }} burst = {{ $rateLimit.Burst }} {{end}} {{end}} {{ $headers := getHeaders $frontend }} {{if $headers }} [frontends."{{ $frontendName }}".headers] SSLRedirect = {{ $headers.SSLRedirect }} SSLTemporaryRedirect = {{ $headers.SSLTemporaryRedirect }} SSLHost = "{{ $headers.SSLHost }}" STSSeconds = {{ $headers.STSSeconds }} STSIncludeSubdomains = {{ $headers.STSIncludeSubdomains }} STSPreload = {{ $headers.STSPreload }} ForceSTSHeader = {{ $headers.ForceSTSHeader }} FrameDeny = {{ $headers.FrameDeny }} CustomFrameOptionsValue = "{{ $headers.CustomFrameOptionsValue }}" ContentTypeNosniff = {{ $headers.ContentTypeNosniff }} BrowserXSSFilter = {{ $headers.BrowserXSSFilter }} CustomBrowserXSSValue = "{{ $headers.CustomBrowserXSSValue }}" ContentSecurityPolicy = "{{ $headers.ContentSecurityPolicy }}" PublicKey = "{{ $headers.PublicKey }}" ReferrerPolicy = "{{ $headers.ReferrerPolicy }}" IsDevelopment = {{ $headers.IsDevelopment }} {{if $headers.AllowedHosts }} AllowedHosts = [{{range $headers.AllowedHosts }} "{{.}}", {{end}}] {{end}} {{if $headers.HostsProxyHeaders }} HostsProxyHeaders = [{{range $headers.HostsProxyHeaders }} "{{.}}", {{end}}] {{end}} {{if $headers.CustomRequestHeaders }} [frontends."{{ $frontendName }}".headers.customRequestHeaders] {{range $k, $v := $headers.CustomRequestHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.CustomResponseHeaders }} [frontends."{{ $frontendName }}".headers.customResponseHeaders] {{range $k, $v := $headers.CustomResponseHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.SSLProxyHeaders }} [frontends."{{ $frontendName }}".headers.SSLProxyHeaders] {{range $k, $v := $headers.SSLProxyHeaders}} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} {{range $routeName, $route := getRoutes $frontend }} [frontends."{{ $frontendName }}".routes."{{ $routeName }}"] rule = "{{ $route.Rule }}" {{end}} {{end}} {{range $tls := getTLSSection .Prefix }} [[tls]] entryPoints = [{{range $tls.EntryPoints }} "{{.}}", {{end}}] [tls.certificate] certFile = """{{ $tls.Certificate.CertFile }}""" keyFile = """{{ $tls.Certificate.KeyFile }}""" {{end}} `) func templatesKvTmplBytes() ([]byte, error) { return _templatesKvTmpl, nil } func templatesKvTmpl() (*asset, error) { bytes, err := templatesKvTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/kv.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesMarathonV1Tmpl = []byte(`{{$apps := .Applications}} {{range $app := $apps }} {{range $task := $app.Tasks }} {{range $serviceIndex, $serviceName := getServiceNames $app }} [backends."{{ getBackend $app $serviceName }}".servers."server-{{ $task.ID | replace "." "-"}}{{getServiceNameSuffix $serviceName }}"] url = "{{ getProtocol $app $serviceName }}://{{ getBackendServer $task $app }}:{{ getPort $task $app $serviceName }}" weight = {{ getWeight $app $serviceName }} {{end}} {{end}} {{end}} {{range $app := $apps }} {{range $serviceIndex, $serviceName := getServiceNames $app }} [backends."{{ getBackend $app $serviceName }}"] {{if hasMaxConnLabels $app }} [backends."{{ getBackend $app $serviceName }}".maxConn] amount = {{ getMaxConnAmount $app }} extractorFunc = "{{ getMaxConnExtractorFunc $app }}" {{end}} {{if hasLoadBalancerLabels $app }} [backends."{{ getBackend $app $serviceName }}".loadBalancer] method = "{{ getLoadBalancerMethod $app }}" sticky = {{ getSticky $app }} {{if hasStickinessLabel $app }} [backends."{{ getBackend $app $serviceName }}".loadBalancer.stickiness] cookieName = "{{ getStickinessCookieName $app }}" {{end}} {{end}} {{if hasCircuitBreakerLabels $app }} [backends."{{ getBackend $app $serviceName }}".circuitBreaker] expression = "{{ getCircuitBreakerExpression $app }}" {{end}} {{if hasHealthCheckLabels $app }} [backends."{{ getBackend $app $serviceName }}".healthCheck] path = "{{ getHealthCheckPath $app }}" interval = "{{ getHealthCheckInterval $app }}" {{end}} {{end}} {{end}} [frontends] {{range $app := $apps }} {{range $serviceIndex, $serviceName := getServiceNames . }} [frontends."{{ getFrontendName $app $serviceName | normalize }}"] backend = "{{ getBackend $app $serviceName }}" passHostHeader = {{ getPassHostHeader $app $serviceName }} priority = {{ getPriority $app $serviceName }} entryPoints = [{{range getEntryPoints $app $serviceName }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $app $serviceName }} "{{.}}", {{end}}] [frontends."{{ getFrontendName $app $serviceName | normalize }}".routes."route-host{{ $app.ID | replace "/" "-" }}{{ getServiceNameSuffix $serviceName }}"] rule = "{{ getFrontendRule $app $serviceName }}" {{end}} {{end}} `) func templatesMarathonV1TmplBytes() ([]byte, error) { return _templatesMarathonV1Tmpl, nil } func templatesMarathonV1Tmpl() (*asset, error) { bytes, err := templatesMarathonV1TmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/marathon-v1.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesMarathonTmpl = []byte(`{{ $apps := .Applications }} [backends] {{range $app := $apps }} {{ $backendName := getBackendName $app }} [backends."{{ $backendName }}"] {{ $circuitBreaker := getCircuitBreaker $app.SegmentLabels }} {{if $circuitBreaker }} [backends."{{ $backendName }}".circuitBreaker] expression = "{{ $circuitBreaker.Expression }}" {{end}} {{ $loadBalancer := getLoadBalancer $app.SegmentLabels }} {{if $loadBalancer }} [backends."{{ $backendName }}".loadBalancer] method = "{{ $loadBalancer.Method }}" sticky = {{ $loadBalancer.Sticky }} {{if $loadBalancer.Stickiness }} [backends."{{ $backendName }}".loadBalancer.stickiness] cookieName = "{{ $loadBalancer.Stickiness.CookieName }}" {{end}} {{end}} {{ $maxConn := getMaxConn $app.SegmentLabels }} {{if $maxConn }} [backends."{{ $backendName }}".maxConn] extractorFunc = "{{ $maxConn.ExtractorFunc }}" amount = {{ $maxConn.Amount }} {{end}} {{ $healthCheck := getHealthCheck $app.SegmentLabels }} {{if $healthCheck }} [backends."{{ $backendName }}".healthCheck] path = "{{ $healthCheck.Path }}" port = {{ $healthCheck.Port }} interval = "{{ $healthCheck.Interval }}" {{end}} {{ $buffering := getBuffering $app.SegmentLabels }} {{if $buffering }} [backends."{{ $backendName }}".buffering] maxRequestBodyBytes = {{ $buffering.MaxRequestBodyBytes }} memRequestBodyBytes = {{ $buffering.MemRequestBodyBytes }} maxResponseBodyBytes = {{ $buffering.MaxResponseBodyBytes }} memResponseBodyBytes = {{ $buffering.MemResponseBodyBytes }} retryExpression = "{{ $buffering.RetryExpression }}" {{end}} {{range $serverName, $server := getServers $app }} [backends."{{ $backendName }}".servers."{{ $serverName }}"] url = "{{ $server.URL }}" weight = {{ $server.Weight }} {{end}} {{end}} [frontends] {{range $app := $apps }} {{ $frontendName := getFrontendName $app }} [frontends."{{ $frontendName }}"] backend = "{{ getBackendName $app }}" priority = {{ getPriority $app.SegmentLabels }} passHostHeader = {{ getPassHostHeader $app.SegmentLabels }} passTLSCert = {{ getPassTLSCert $app.SegmentLabels }} entryPoints = [{{range getEntryPoints $app.SegmentLabels }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $app.SegmentLabels }} "{{.}}", {{end}}] {{ $whitelist := getWhiteList $app.SegmentLabels }} {{if $whitelist }} [frontends."{{ $frontendName }}".whiteList] sourceRange = [{{range $whitelist.SourceRange }} "{{.}}", {{end}}] useXForwardedFor = {{ $whitelist.UseXForwardedFor }} {{end}} {{ $redirect := getRedirect $app.SegmentLabels }} {{if $redirect }} [frontends."{{ $frontendName }}".redirect] entryPoint = "{{ $redirect.EntryPoint }}" regex = "{{ $redirect.Regex }}" replacement = "{{ $redirect.Replacement }}" permanent = {{ $redirect.Permanent }} {{end}} {{ $errorPages := getErrorPages $app.SegmentLabels }} {{if $errorPages }} [frontends."{{ $frontendName }}".errors] {{range $pageName, $page := $errorPages }} [frontends."{{ $frontendName }}".errors."{{ $pageName }}"] status = [{{range $page.Status }} "{{.}}", {{end}}] backend = "{{ $page.Backend }}" query = "{{ $page.Query }}" {{end}} {{end}} {{ $rateLimit := getRateLimit $app.SegmentLabels }} {{if $rateLimit }} [frontends."{{ $frontendName }}".rateLimit] extractorFunc = "{{ $rateLimit.ExtractorFunc }}" [frontends."{{ $frontendName }}".rateLimit.rateSet] {{ range $limitName, $limit := $rateLimit.RateSet }} [frontends."{{ $frontendName }}".rateLimit.rateSet."{{ $limitName }}"] period = "{{ $limit.Period }}" average = {{ $limit.Average }} burst = {{ $limit.Burst }} {{end}} {{end}} {{ $headers := getHeaders $app.SegmentLabels }} {{if $headers }} [frontends."{{ $frontendName }}".headers] SSLRedirect = {{ $headers.SSLRedirect }} SSLTemporaryRedirect = {{ $headers.SSLTemporaryRedirect }} SSLHost = "{{ $headers.SSLHost }}" STSSeconds = {{ $headers.STSSeconds }} STSIncludeSubdomains = {{ $headers.STSIncludeSubdomains }} STSPreload = {{ $headers.STSPreload }} ForceSTSHeader = {{ $headers.ForceSTSHeader }} FrameDeny = {{ $headers.FrameDeny }} CustomFrameOptionsValue = "{{ $headers.CustomFrameOptionsValue }}" ContentTypeNosniff = {{ $headers.ContentTypeNosniff }} BrowserXSSFilter = {{ $headers.BrowserXSSFilter }} CustomBrowserXSSValue = "{{ $headers.CustomBrowserXSSValue }}" ContentSecurityPolicy = "{{ $headers.ContentSecurityPolicy }}" PublicKey = "{{ $headers.PublicKey }}" ReferrerPolicy = "{{ $headers.ReferrerPolicy }}" IsDevelopment = {{ $headers.IsDevelopment }} {{if $headers.AllowedHosts }} AllowedHosts = [{{range $headers.AllowedHosts }} "{{.}}", {{end}}] {{end}} {{if $headers.HostsProxyHeaders }} HostsProxyHeaders = [{{range $headers.HostsProxyHeaders }} "{{.}}", {{end}}] {{end}} {{if $headers.CustomRequestHeaders }} [frontends."{{ $frontendName }}".headers.customRequestHeaders] {{range $k, $v := $headers.CustomRequestHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.CustomResponseHeaders }} [frontends."{{ $frontendName }}".headers.customResponseHeaders] {{range $k, $v := $headers.CustomResponseHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.SSLProxyHeaders }} [frontends."{{ $frontendName }}".headers.SSLProxyHeaders] {{range $k, $v := $headers.SSLProxyHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} [frontends."{{ $frontendName }}".routes."route-host{{ $app.ID | replace "/" "-" }}{{ getSegmentNameSuffix $app.SegmentName }}"] rule = "{{ getFrontendRule $app }}" {{end}} `) func templatesMarathonTmplBytes() ([]byte, error) { return _templatesMarathonTmpl, nil } func templatesMarathonTmpl() (*asset, error) { bytes, err := templatesMarathonTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/marathon.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesMesosV1Tmpl = []byte(`{{$apps := .Applications}} [backends] {{range .Tasks}} [backends."backend-{{ getBackend . $apps }}".servers."server-{{ getID . }}"] url = "{{ getProtocol . $apps }}://{{ getHost . }}:{{ getPort . $apps }}" weight = {{ getWeight . $apps }} {{end}} [frontends] {{range .Applications}} [frontends."frontend-{{getFrontEndName . }}"] backend = "backend-{{ getFrontendBackend . }}" passHostHeader = {{ getPassHostHeader . }} priority = {{ getPriority . }} entryPoints = [{{range getEntryPoints . }} "{{.}}", {{end}}] [frontends."frontend-{{ getFrontEndName . }}".routes."route-host-{{ getFrontEndName . }}"] rule = "{{ getFrontendRule . }}" {{end}} `) func templatesMesosV1TmplBytes() ([]byte, error) { return _templatesMesosV1Tmpl, nil } func templatesMesosV1Tmpl() (*asset, error) { bytes, err := templatesMesosV1TmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/mesos-v1.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesMesosTmpl = []byte(`[backends] {{range $applicationName, $tasks := .ApplicationsTasks }} {{ $app := index $tasks 0 }} {{ $backendName := getBackendName $app }} [backends."backend-{{ $backendName }}"] {{ $circuitBreaker := getCircuitBreaker $app.TraefikLabels }} {{if $circuitBreaker }} [backends."backend-{{ $backendName }}".circuitBreaker] expression = "{{ $circuitBreaker.Expression }}" {{end}} {{ $loadBalancer := getLoadBalancer $app.TraefikLabels }} {{if $loadBalancer }} [backends."backend-{{ $backendName }}".loadBalancer] method = "{{ $loadBalancer.Method }}" sticky = {{ $loadBalancer.Sticky }} {{if $loadBalancer.Stickiness }} [backends."backend-{{ $backendName }}".loadBalancer.stickiness] cookieName = "{{ $loadBalancer.Stickiness.CookieName }}" {{end}} {{end}} {{ $maxConn := getMaxConn $app.TraefikLabels }} {{if $maxConn }} [backends."backend-{{ $backendName }}".maxConn] extractorFunc = "{{ $maxConn.ExtractorFunc }}" amount = {{ $maxConn.Amount }} {{end}} {{ $healthCheck := getHealthCheck $app.TraefikLabels }} {{if $healthCheck }} [backends."backend-{{ $backendName }}".healthCheck] path = "{{ $healthCheck.Path }}" port = {{ $healthCheck.Port }} interval = "{{ $healthCheck.Interval }}" {{end}} {{ $buffering := getBuffering $app.TraefikLabels }} {{if $buffering }} [backends."backend-{{ $backendName }}".buffering] maxRequestBodyBytes = {{ $buffering.MaxRequestBodyBytes }} memRequestBodyBytes = {{ $buffering.MemRequestBodyBytes }} maxResponseBodyBytes = {{ $buffering.MaxResponseBodyBytes }} memResponseBodyBytes = {{ $buffering.MemResponseBodyBytes }} retryExpression = "{{ $buffering.RetryExpression }}" {{end}} {{range $serverName, $server := getServers $tasks }} [backends."backend-{{ $backendName }}".servers."{{ $serverName }}"] url = "{{ $server.URL }}" weight = {{ $server.Weight }} {{end}} {{end}} [frontends] {{range $applicationName, $tasks := .ApplicationsTasks }} {{ $app := index $tasks 0 }} {{ $frontendName := getFrontEndName $app }} [frontends."frontend-{{ $frontendName }}"] backend = "backend-{{ getBackendName $app }}" priority = {{ getPriority $app.TraefikLabels }} passHostHeader = {{ getPassHostHeader $app.TraefikLabels }} passTLSCert = {{ getPassTLSCert $app.TraefikLabels }} entryPoints = [{{range getEntryPoints $app.TraefikLabels }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $app.TraefikLabels }} "{{.}}", {{end}}] {{ $whitelist := getWhiteList $app.TraefikLabels }} {{if $whitelist }} [frontends."frontend-{{ $frontendName }}".whiteList] sourceRange = [{{range $whitelist.SourceRange }} "{{.}}", {{end}}] useXForwardedFor = {{ $whitelist.UseXForwardedFor }} {{end}} {{ $redirect := getRedirect $app.TraefikLabels }} {{if $redirect }} [frontends."frontend-{{ $frontendName }}".redirect] entryPoint = "{{ $redirect.EntryPoint }}" regex = "{{ $redirect.Regex }}" replacement = "{{ $redirect.Replacement }}" permanent = {{ $redirect.Permanent }} {{end}} {{ $errorPages := getErrorPages $app.TraefikLabels }} {{if $errorPages }} [frontends."frontend-{{ $frontendName }}".errors] {{range $pageName, $page := $errorPages }} [frontends."frontend-{{ $frontendName }}".errors."{{ $pageName }}"] status = [{{range $page.Status }} "{{.}}", {{end}}] backend = "{{ $page.Backend }}" query = "{{ $page.Query }}" {{end}} {{end}} {{ $rateLimit := getRateLimit $app.TraefikLabels }} {{if $rateLimit }} [frontends."frontend-{{ $frontendName }}".rateLimit] extractorFunc = "{{ $rateLimit.ExtractorFunc }}" [frontends."frontend-{{ $frontendName }}".rateLimit.rateSet] {{ range $limitName, $limit := $rateLimit.RateSet }} [frontends."frontend-{{ $frontendName }}".rateLimit.rateSet."{{ $limitName }}"] period = "{{ $limit.Period }}" average = {{ $limit.Average }} burst = {{ $limit.Burst }} {{end}} {{end}} {{ $headers := getHeaders $app.TraefikLabels }} {{if $headers }} [frontends."frontend-{{ $frontendName }}".headers] SSLRedirect = {{ $headers.SSLRedirect }} SSLTemporaryRedirect = {{ $headers.SSLTemporaryRedirect }} SSLHost = "{{ $headers.SSLHost }}" STSSeconds = {{ $headers.STSSeconds }} STSIncludeSubdomains = {{ $headers.STSIncludeSubdomains }} STSPreload = {{ $headers.STSPreload }} ForceSTSHeader = {{ $headers.ForceSTSHeader }} FrameDeny = {{ $headers.FrameDeny }} CustomFrameOptionsValue = "{{ $headers.CustomFrameOptionsValue }}" ContentTypeNosniff = {{ $headers.ContentTypeNosniff }} BrowserXSSFilter = {{ $headers.BrowserXSSFilter }} CustomBrowserXSSValue = "{{ $headers.CustomBrowserXSSValue }}" ContentSecurityPolicy = "{{ $headers.ContentSecurityPolicy }}" PublicKey = "{{ $headers.PublicKey }}" ReferrerPolicy = "{{ $headers.ReferrerPolicy }}" IsDevelopment = {{ $headers.IsDevelopment }} {{if $headers.AllowedHosts }} AllowedHosts = [{{range $headers.AllowedHosts }} "{{.}}", {{end}}] {{end}} {{if $headers.HostsProxyHeaders }} HostsProxyHeaders = [{{range $headers.HostsProxyHeaders }} "{{.}}", {{end}}] {{end}} {{if $headers.CustomRequestHeaders }} [frontends."frontend-{{ $frontendName }}".headers.customRequestHeaders] {{range $k, $v := $headers.CustomRequestHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.CustomResponseHeaders }} [frontends."frontend-{{ $frontendName }}".headers.customResponseHeaders] {{range $k, $v := $headers.CustomResponseHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.SSLProxyHeaders }} [frontends."frontend-{{ $frontendName }}".headers.SSLProxyHeaders] {{range $k, $v := $headers.SSLProxyHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} [frontends."frontend-{{ $frontendName }}".routes."route-host-{{ $frontendName }}"] rule = "{{ getFrontendRule $app }}" {{end}}`) func templatesMesosTmplBytes() ([]byte, error) { return _templatesMesosTmpl, nil } func templatesMesosTmpl() (*asset, error) { bytes, err := templatesMesosTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/mesos.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesNotfoundTmpl = []byte(` Traefik Ohhhh man, this is bad... `) func templatesNotfoundTmplBytes() ([]byte, error) { return _templatesNotfoundTmpl, nil } func templatesNotfoundTmpl() (*asset, error) { bytes, err := templatesNotfoundTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/notFound.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesRancherV1Tmpl = []byte(`{{$backendServers := .Backends}} [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}} {{range $index, $ip := $backend.Containers }} [backends."backend-{{ $backendName }}".servers."server-{{ $index }}"] url = "{{ getProtocol $backend }}://{{ $ip }}:{{ getPort $backend }}" weight = {{ getWeight $backend }} {{end}} {{end}} [frontends] {{range $frontendName, $service := .Frontends }} [frontends."frontend-{{ $frontendName }}"] backend = "backend-{{ getBackend $service }}" passHostHeader = {{ getPassHostHeader $service }} priority = {{ getPriority $service }} entryPoints = [{{range getEntryPoints $service }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $service }} "{{.}}", {{end}}] {{if hasRedirect $service }} [frontends."frontend-{{ $frontendName }}".redirect] entryPoint = "{{ getRedirectEntryPoint $service }}" regex = "{{ getRedirectRegex $service }}" replacement = "{{ getRedirectReplacement $service }}" {{end}} [frontends."frontend-{{ $frontendName }}".routes."route-frontend-{{ $frontendName }}"] rule = "{{ getFrontendRule $service }}" {{end}} `) func templatesRancherV1TmplBytes() ([]byte, error) { return _templatesRancherV1Tmpl, nil } func templatesRancherV1Tmpl() (*asset, error) { bytes, err := templatesRancherV1TmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/rancher-v1.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } var _templatesRancherTmpl = []byte(`{{ $backendServers := .Backends }} [backends] {{range $backendName, $backend := .Backends }} [backends."backend-{{ $backendName }}"] {{ $circuitBreaker := getCircuitBreaker $backend.SegmentLabels }} {{if $circuitBreaker }} [backends."backend-{{ $backendName }}".circuitBreaker] expression = "{{ $circuitBreaker.Expression }}" {{end}} {{ $loadBalancer := getLoadBalancer $backend.SegmentLabels }} {{if $loadBalancer }} [backends."backend-{{ $backendName }}".loadBalancer] method = "{{ $loadBalancer.Method }}" sticky = {{ $loadBalancer.Sticky }} {{if $loadBalancer.Stickiness }} [backends."backend-{{ $backendName }}".loadBalancer.stickiness] cookieName = "{{ $loadBalancer.Stickiness.CookieName }}" {{end}} {{end}} {{ $maxConn := getMaxConn $backend.SegmentLabels }} {{if $maxConn }} [backends."backend-{{ $backendName }}".maxConn] extractorFunc = "{{ $maxConn.ExtractorFunc }}" amount = {{ $maxConn.Amount }} {{end}} {{ $healthCheck := getHealthCheck $backend.SegmentLabels }} {{if $healthCheck }} [backends."backend-{{ $backendName }}".healthCheck] path = "{{ $healthCheck.Path }}" port = {{ $healthCheck.Port }} interval = "{{ $healthCheck.Interval }}" {{end}} {{ $buffering := getBuffering $backend.SegmentLabels }} {{if $buffering }} [backends."backend-{{ $backendName }}".buffering] maxRequestBodyBytes = {{ $buffering.MaxRequestBodyBytes }} memRequestBodyBytes = {{ $buffering.MemRequestBodyBytes }} maxResponseBodyBytes = {{ $buffering.MaxResponseBodyBytes }} memResponseBodyBytes = {{ $buffering.MemResponseBodyBytes }} retryExpression = "{{ $buffering.RetryExpression }}" {{end}} {{range $serverName, $server := getServers $backend}} [backends."backend-{{ $backendName }}".servers."{{ $serverName }}"] url = "{{ $server.URL }}" weight = {{ $server.Weight }} {{end}} {{end}} [frontends] {{range $frontendName, $service := .Frontends }} [frontends."frontend-{{ $frontendName }}"] backend = "backend-{{ getBackendName $service }}" priority = {{ getPriority $service.SegmentLabels }} passHostHeader = {{ getPassHostHeader $service.SegmentLabels }} passTLSCert = {{ getPassTLSCert $service.SegmentLabels }} entryPoints = [{{range getEntryPoints $service.SegmentLabels }} "{{.}}", {{end}}] basicAuth = [{{range getBasicAuth $service.SegmentLabels }} "{{.}}", {{end}}] {{ $whitelist := getWhiteList $service.SegmentLabels }} {{if $whitelist }} [frontends."frontend-{{ $frontendName }}".whiteList] sourceRange = [{{range $whitelist.SourceRange }} "{{.}}", {{end}}] useXForwardedFor = {{ $whitelist.UseXForwardedFor }} {{end}} {{ $redirect := getRedirect $service.SegmentLabels }} {{if $redirect }} [frontends."frontend-{{ $frontendName }}".redirect] entryPoint = "{{ $redirect.EntryPoint }}" regex = "{{ $redirect.Regex }}" replacement = "{{ $redirect.Replacement }}" permanent = {{ $redirect.Permanent }} {{end}} {{ $errorPages := getErrorPages $service.SegmentLabels }} {{if $errorPages }} [frontends."frontend-{{ $frontendName }}".errors] {{range $pageName, $page := $errorPages }} [frontends."frontend-{{ $frontendName }}".errors."{{ $pageName }}"] status = [{{range $page.Status }} "{{.}}", {{end}}] backend = "{{ $page.Backend }}" query = "{{ $page.Query }}" {{end}} {{end}} {{ $rateLimit := getRateLimit $service.SegmentLabels }} {{if $rateLimit }} [frontends."frontend-{{ $frontendName }}".rateLimit] extractorFunc = "{{ $rateLimit.ExtractorFunc }}" [frontends."frontend-{{ $frontendName }}".rateLimit.rateSet] {{ range $limitName, $limit := $rateLimit.RateSet }} [frontends."frontend-{{ $frontendName }}".rateLimit.rateSet."{{ $limitName }}"] period = "{{ $limit.Period }}" average = {{ $limit.Average }} burst = {{ $limit.Burst }} {{end}} {{end}} {{ $headers := getHeaders $service.SegmentLabels }} {{if $headers }} [frontends."frontend-{{ $frontendName }}".headers] SSLRedirect = {{ $headers.SSLRedirect }} SSLTemporaryRedirect = {{ $headers.SSLTemporaryRedirect }} SSLHost = "{{ $headers.SSLHost }}" STSSeconds = {{ $headers.STSSeconds }} STSIncludeSubdomains = {{ $headers.STSIncludeSubdomains }} STSPreload = {{ $headers.STSPreload }} ForceSTSHeader = {{ $headers.ForceSTSHeader }} FrameDeny = {{ $headers.FrameDeny }} CustomFrameOptionsValue = "{{ $headers.CustomFrameOptionsValue }}" ContentTypeNosniff = {{ $headers.ContentTypeNosniff }} BrowserXSSFilter = {{ $headers.BrowserXSSFilter }} CustomBrowserXSSValue = "{{ $headers.CustomBrowserXSSValue }}" ContentSecurityPolicy = "{{ $headers.ContentSecurityPolicy }}" PublicKey = "{{ $headers.PublicKey }}" ReferrerPolicy = "{{ $headers.ReferrerPolicy }}" IsDevelopment = {{ $headers.IsDevelopment }} {{if $headers.AllowedHosts }} AllowedHosts = [{{range $headers.AllowedHosts }} "{{.}}", {{end}}] {{end}} {{if $headers.HostsProxyHeaders }} HostsProxyHeaders = [{{range $headers.HostsProxyHeaders }} "{{.}}", {{end}}] {{end}} {{if $headers.CustomRequestHeaders }} [frontends."frontend-{{ $frontendName }}".headers.customRequestHeaders] {{range $k, $v := $headers.CustomRequestHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.CustomResponseHeaders }} [frontends."frontend-{{ $frontendName }}".headers.customResponseHeaders] {{range $k, $v := $headers.CustomResponseHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{if $headers.SSLProxyHeaders }} [frontends."frontend-{{ $frontendName }}".headers.SSLProxyHeaders] {{range $k, $v := $headers.SSLProxyHeaders }} {{$k}} = "{{$v}}" {{end}} {{end}} {{end}} [frontends."frontend-{{ $frontendName }}".routes."route-frontend-{{ $frontendName }}"] rule = "{{ getFrontendRule $service.Name $service.SegmentLabels }}" {{end}} `) func templatesRancherTmplBytes() ([]byte, error) { return _templatesRancherTmpl, nil } func templatesRancherTmpl() (*asset, error) { bytes, err := templatesRancherTmplBytes() if err != nil { return nil, err } info := bindataFileInfo{name: "templates/rancher.tmpl", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } // Asset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. func Asset(name string) ([]byte, error) { cannonicalName := strings.Replace(name, "\\", "/", -1) if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) } return a.bytes, nil } return nil, fmt.Errorf("Asset %s not found", name) } // MustAsset is like Asset but panics when Asset would return an error. // It simplifies safe initialization of global variables. func MustAsset(name string) []byte { a, err := Asset(name) if err != nil { panic("asset: Asset(" + name + "): " + err.Error()) } return a } // AssetInfo loads and returns the asset info for the given name. // It returns an error if the asset could not be found or // could not be loaded. func AssetInfo(name string) (os.FileInfo, error) { cannonicalName := strings.Replace(name, "\\", "/", -1) if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) } return a.info, nil } return nil, fmt.Errorf("AssetInfo %s not found", name) } // AssetNames returns the names of the assets. func AssetNames() []string { names := make([]string, 0, len(_bindata)) for name := range _bindata { names = append(names, name) } return names } // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ "templates/consul_catalog-v1.tmpl": templatesConsul_catalogV1Tmpl, "templates/consul_catalog.tmpl": templatesConsul_catalogTmpl, "templates/docker-v1.tmpl": templatesDockerV1Tmpl, "templates/docker.tmpl": templatesDockerTmpl, "templates/ecs-v1.tmpl": templatesEcsV1Tmpl, "templates/ecs.tmpl": templatesEcsTmpl, "templates/eureka.tmpl": templatesEurekaTmpl, "templates/kubernetes.tmpl": templatesKubernetesTmpl, "templates/kv.tmpl": templatesKvTmpl, "templates/marathon-v1.tmpl": templatesMarathonV1Tmpl, "templates/marathon.tmpl": templatesMarathonTmpl, "templates/mesos-v1.tmpl": templatesMesosV1Tmpl, "templates/mesos.tmpl": templatesMesosTmpl, "templates/notFound.tmpl": templatesNotfoundTmpl, "templates/rancher-v1.tmpl": templatesRancherV1Tmpl, "templates/rancher.tmpl": templatesRancherTmpl, } // AssetDir returns the file names below a certain // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the // following hierarchy: // data/ // foo.txt // img/ // a.png // b.png // then AssetDir("data") would return []string{"foo.txt", "img"} // AssetDir("data/img") would return []string{"a.png", "b.png"} // AssetDir("foo.txt") and AssetDir("notexist") would return an error // AssetDir("") will return []string{"data"}. func AssetDir(name string) ([]string, error) { node := _bintree if len(name) != 0 { cannonicalName := strings.Replace(name, "\\", "/", -1) pathList := strings.Split(cannonicalName, "/") for _, p := range pathList { node = node.Children[p] if node == nil { return nil, fmt.Errorf("Asset %s not found", name) } } } if node.Func != nil { return nil, fmt.Errorf("Asset %s not found", name) } rv := make([]string, 0, len(node.Children)) for childName := range node.Children { rv = append(rv, childName) } return rv, nil } type bintree struct { Func func() (*asset, error) Children map[string]*bintree } var _bintree = &bintree{nil, map[string]*bintree{ "templates": {nil, map[string]*bintree{ "consul_catalog-v1.tmpl": {templatesConsul_catalogV1Tmpl, map[string]*bintree{}}, "consul_catalog.tmpl": {templatesConsul_catalogTmpl, map[string]*bintree{}}, "docker-v1.tmpl": {templatesDockerV1Tmpl, map[string]*bintree{}}, "docker.tmpl": {templatesDockerTmpl, map[string]*bintree{}}, "ecs-v1.tmpl": {templatesEcsV1Tmpl, map[string]*bintree{}}, "ecs.tmpl": {templatesEcsTmpl, map[string]*bintree{}}, "eureka.tmpl": {templatesEurekaTmpl, map[string]*bintree{}}, "kubernetes.tmpl": {templatesKubernetesTmpl, map[string]*bintree{}}, "kv.tmpl": {templatesKvTmpl, map[string]*bintree{}}, "marathon-v1.tmpl": {templatesMarathonV1Tmpl, map[string]*bintree{}}, "marathon.tmpl": {templatesMarathonTmpl, map[string]*bintree{}}, "mesos-v1.tmpl": {templatesMesosV1Tmpl, map[string]*bintree{}}, "mesos.tmpl": {templatesMesosTmpl, map[string]*bintree{}}, "notFound.tmpl": {templatesNotfoundTmpl, map[string]*bintree{}}, "rancher-v1.tmpl": {templatesRancherV1Tmpl, map[string]*bintree{}}, "rancher.tmpl": {templatesRancherTmpl, map[string]*bintree{}}, }}, }} // RestoreAsset restores an asset under the given directory func RestoreAsset(dir, name string) error { data, err := Asset(name) if err != nil { return err } info, err := AssetInfo(name) if err != nil { return err } err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) if err != nil { return err } err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) if err != nil { return err } err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) if err != nil { return err } return nil } // RestoreAssets restores an asset under the given directory recursively func RestoreAssets(dir, name string) error { children, err := AssetDir(name) // File if err != nil { return RestoreAsset(dir, name) } // Dir for _, child := range children { err = RestoreAssets(dir, filepath.Join(name, child)) if err != nil { return err } } return nil } func _filePath(dir, name string) string { cannonicalName := strings.Replace(name, "\\", "/", -1) return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) }