{{$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}}