{
    "properties": {
        "entrypoint": {
            "additionalProperties": false,
            "description": "Traefik entrypoints",
            "properties": {
                "api-address": {
                    "description": "Leave empty for listening on all interfaces.",
                    "type": "string"
                },
                "api-enable": {
                    "default": true,
                    "description": "Enable API entrypoint.",
                    "type": "boolean"
                },
                "api-port": {
                    "default": 8080,
                    "description": "API (admin) port, if not defined $PORT1 will be used",
                    "type": "integer"
                },
                "enable-dashboard": {
                    "default": true,
                    "description": "Enable Admin Dashboard.",
                    "type": "boolean"
                },
                "http-address": {
                    "default": "",
                    "description": "Leave empty for listening on all interfaces.",
                    "type": "string"
                },
                "http-compression": {
                    "default": true,
                    "description": "Enable compression.",
                    "type": "boolean"
                },
                "http-port": {
                    "default": 80,
                    "description": "HTTP port.",
                    "minimum": 1,
                    "type": "number"
                },
                "https-address": {
                    "default": "",
                    "description": "Leave empty for listening on all interfaces.",
                    "type": "string"
                },
                "https-compression": {
                    "default": true,
                    "description": "Enable compression.",
                    "type": "boolean"
                },
                "https-enable": {
                    "default": true,
                    "description": "Enable HTTPS entrypoint.",
                    "type": "boolean"
                },
                "https-port": {
                    "default": 443,
                    "description": "HTTPS port.",
                    "minimum": 1,
                    "type": "number"
                }
            },
            "type": "object"
        },
        "kubernetess": {
            "additionalProperties": false,
            "description": "Allows access to Kubernetess applications",
            "properties": {
                "ca": {
                    "description": "Path to the certificate authority file",
                    "type": "string"
                },
                "disable-pass-host-headers": {
                    "default": false,
                    "description": "Disable PassHost Headers",
                    "type": "boolean"
                },
                "enable": {
                    "default": false,
                    "description": "Enable Kubernetess provider.",
                    "type": "boolean"
                },
                "enable-pass-tls-cert": {
                    "default": false,
                    "description": "Disable PassHost Headers",
                    "type": "boolean"
                },
                "endpoint": {
                    "description": "Kubernetes server endpoint",
                    "type": "string"
                },
                "filename": {
                    "description": "Override default configuration template",
                    "type": "string"
                },
                "ingress-class": {
                    "description": "Value of `kubernetes.io/ingress.class` annotation that identifies Ingress objects to be processed",
                    "type": "string"
                },
                "namespaces": {
                    "description": "Comma-separated namespaces to watch",
                    "type": "string"
                },
                "token": {
                    "description": "Bearer token used for the Kubernetes client configuration",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "logging": {
            "additionalProperties": false,
            "description": "Logging configuration",
            "properties": {
                "access-logs": {
                    "default": false,
                    "description": "Enable Access Logs",
                    "type": "boolean"
                },
                "access-logs-format": {
                    "description": "Default is text",
                    "type": "string"
                },
                "access-logs-path": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "marathon": {
            "additionalProperties": false,
            "description": "Marathon configuration",
            "properties": {
                "dialer-timeout": {
                    "default": "60s",
                    "description": "Amount of time to allow the Marathon provider to wait to open a TCP connection to a Marathon master.",
                    "type": "string"
                },
                "domain": {
                    "default": "marathon.localhost",
                    "description": "Default domain. Can be overridden by setting the 'traefik.domain' label on an application.",
                    "type": "string"
                },
                "enable": {
                    "default": true,
                    "description": "Enable Marathon provider.",
                    "type": "boolean"
                },
                "endpoint": {
                    "default": "http://marathon.mesos:8080",
                    "description": "Marathon endpoint, multiple instances separate by comma.",
                    "type": "string"
                },
                "expose": {
                    "default": false,
                    "description": "Expose Marathon apps by default in Traefik.",
                    "type": "boolean"
                },
                "force-task-hostname": {
                    "default": false,
                    "description": "By default, a task's IP address (as returned by the Marathon API) is used as backend server if an IP-per-task configuration can be found; otherwise, the name of the host running the task is used. The latter behavior can be enforced by enabling this switch.",
                    "type": "boolean"
                },
                "groups-as-subdomains": {
                    "default": false,
                    "description": "Convert Marathon groups to subdomains.",
                    "type": "boolean"
                },
                "keep-alive": {
                    "default": "10s",
                    "description": "Set the TCP Keep Alive interval for the Marathon HTTP Client.",
                    "type": "string"
                },
                "marathonlb-compatibility": {
                    "default": false,
                    "description": "Enable compatibility with marathon-lb labels.",
                    "type": "boolean"
                },
                "respect-readiness-checks": {
                    "default": true,
                    "description": "During deployment Traefik will respect readiness checks if defined in Marathon.",
                    "type": "boolean"
                },
                "watch": {
                    "default": true,
                    "description": "Watch changes in Marathon.",
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "mesos": {
            "additionalProperties": false,
            "description": "Allows directly exposing Mesos applications",
            "properties": {
                "domain": {
                    "default": "mesos.localhost",
                    "description": "Default domain. Can be overridden by setting the 'traefik.domain' label on an application.",
                    "type": "string"
                },
                "enable": {
                    "default": false,
                    "description": "Enable Mesos provider.",
                    "type": "boolean"
                },
                "endpoint": {
                    "default": "http://leader.mesos:5050",
                    "description": "Mesos endpoint, multiple instances separate by comma.",
                    "type": "string"
                },
                "expose": {
                    "default": false,
                    "description": "Expose Mesos apps by default in Traefik.",
                    "type": "boolean"
                },
                "groups-as-subdomains": {
                    "default": false,
                    "description": "Convert Marathon groups to subdomains.",
                    "type": "boolean"
                },
                "ip-sources": {
                    "default": "host",
                    "description": "IP sources (e.g. host, docker, mesos, netinfo).",
                    "type": "string"
                },
                "refresh": {
                    "default": 30,
                    "description": "Polling interval",
                    "minimum": 1,
                    "type": "integer"
                },
                "timeout": {
                    "default": 30,
                    "description": "Mesos HTTP API timeout",
                    "minimum": 1,
                    "type": "integer"
                },
                "watch": {
                    "default": true,
                    "description": "Watch changes in Marathon.",
                    "type": "boolean"
                },
                "zk-timeout": {
                    "default": 30,
                    "description": "ZooKeeper timeout",
                    "minimum": 1,
                    "type": "integer"
                }
            },
            "type": "object"
        },
        "metrics": {
            "additionalProperties": false,
            "description": "Metrics configuration",
            "properties": {
                "datadog-address": {
                    "default": "",
                    "description": "DataDog endpoint",
                    "type": "string"
                },
                "datadog-pushinterval": {
                    "default": "10s",
                    "type": "string"
                },
                "influxdb-address": {
                    "default": "",
                    "description": "InfluxDB endpoint",
                    "type": "string"
                },
                "influxdb-pushinterval": {
                    "default": "10s",
                    "type": "string"
                },
                "prometheus-buckets": {
                    "default": "0.1,0.3,1.2,5.0",
                    "type": "string"
                },
                "prometheus-entrypoint": {
                    "default": "",
                    "description": "Traefik entrypoint for Prometheus (e.g. api)",
                    "type": "string"
                },
                "recent-errors": {
                    "default": 10,
                    "description": "Number of logged recent errors",
                    "minimum": 0,
                    "type": "integer"
                },
                "statsd-address": {
                    "default": "",
                    "description": "StatsD endpoint",
                    "type": "string"
                },
                "statsd-pushinterval": {
                    "default": "10s",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "service": {
            "properties": {
                "cpus": {
                    "default": 1,
                    "description": "CPU shares to allocate to each Traefik instance.",
                    "minimum": 0.5,
                    "type": "number"
                },
                "disk": {
                    "default": 100,
                    "description": "Disk space (in MB) to allocate for each instance.",
                    "minimum": 20,
                    "type": "integer"
                },
                "instances": {
                    "default": 2,
                    "description": "Number of instances to run.",
                    "minimum": 1,
                    "type": "integer"
                },
                "maximumOverCapacity": {
                    "default": 0.2,
                    "description": "Maximum over capacity.",
                    "minimum": 0,
                    "type": "number"
                },
                "mem": {
                    "default": 128.0,
                    "description": "Memory (MB) to allocate to each Traefik task.",
                    "minimum": 64.0,
                    "type": "number"
                },
                "minimumHealthCapacity": {
                    "default": 0.5,
                    "description": "Minimum health capacity.",
                    "minimum": 0,
                    "type": "number"
                },
                "name": {
                    "default": "traefik",
                    "description": "Name of the Traefik instance",
                    "type": "string"
                },
                "role": {
                    "default": "slave_public",
                    "description": "Deploy Traefik only on nodes with this role.",
                    "type": "string"
                },
                "user": {
                    "default": "root",
                    "description": "The user that runs the Traefik service and owns the Mesos sandbox.",
                    "type": "string"
                }
            },
            "required": [
                "cpus",
                "mem",
                "instances",
                "name"
            ],
            "type": "object"
        },
        "traefik": {
            "additionalProperties": false,
            "description": "Traefik configuration",
            "properties": {
                "config-file": {
                    "description": "Path to additional Traefik config file in TOML format.",
                    "type": "string"
                },
                "grace-timeout": {
                    "default": "30s",
                    "description": "Duration to give active requests a chance to finish before Traefik stops",
                    "type": "string"
                },
                "healthcheck-interval": {
                    "default": "30s",
                    "description": "Default health check interval",
                    "type": "string"
                },
                "idle-timeout": {
                    "default": "180s",
                    "description": "The maximum duration an idle (keep-alive) connection will remain idle before closing itself.",
                    "type": "string"
                },
                "log-level": {
                    "default": "INFO",
                    "description": "Traefik log level.",
                    "type": "string"
                },
                "read-timeout": {
                    "default": "0s",
                    "description": "The maximum duration for reading the entire request, including the body",
                    "type": "string"
                },
                "retry": {
                    "description": "Number of attempts to reach backend service",
                    "type": "string"
                },
                "secret-name": {
                    "default": "",
                    "description": "Name of the Secret Store credentials to use for DC/OS service authentication. This should be left empty unless service authentication is needed.",
                    "type": "string"
                },
                "watch-config-file": {
                    "default": true,
                    "description": "Watch config file for changes.",
                    "type": "boolean"
                },
                "write-timeout": {
                    "default": "0s",
                    "description": "The maximum duration before timing out writes of the response",
                    "type": "string"
                }
            },
            "type": "object"
        }
    },
    "type": "object"
}