2018-03-01 10:10:04 +03:00
package cmd
2017-08-25 17:10:03 +03:00
import (
"time"
2018-07-31 20:28:03 +03:00
"github.com/containous/flaeg/parse"
2018-11-14 12:18:03 +03:00
"github.com/containous/traefik/old/api"
"github.com/containous/traefik/old/configuration"
"github.com/containous/traefik/old/middlewares/accesslog"
"github.com/containous/traefik/old/middlewares/tracing"
"github.com/containous/traefik/old/middlewares/tracing/datadog"
"github.com/containous/traefik/old/middlewares/tracing/jaeger"
"github.com/containous/traefik/old/middlewares/tracing/zipkin"
"github.com/containous/traefik/old/ping"
"github.com/containous/traefik/old/provider/boltdb"
"github.com/containous/traefik/old/provider/consul"
"github.com/containous/traefik/old/provider/consulcatalog"
"github.com/containous/traefik/old/provider/docker"
"github.com/containous/traefik/old/provider/dynamodb"
"github.com/containous/traefik/old/provider/ecs"
"github.com/containous/traefik/old/provider/etcd"
"github.com/containous/traefik/old/provider/eureka"
"github.com/containous/traefik/old/provider/file"
"github.com/containous/traefik/old/provider/kubernetes"
"github.com/containous/traefik/old/provider/marathon"
"github.com/containous/traefik/old/provider/mesos"
"github.com/containous/traefik/old/provider/rancher"
"github.com/containous/traefik/old/provider/rest"
"github.com/containous/traefik/old/provider/zk"
"github.com/containous/traefik/old/types"
2017-08-25 17:10:03 +03:00
)
// TraefikConfiguration holds GlobalConfiguration and other stuff
type TraefikConfiguration struct {
2017-10-02 11:32:02 +03:00
configuration . GlobalConfiguration ` mapstructure:",squash" export:"true" `
ConfigFile string ` short:"c" description:"Configuration file to use (TOML)." export:"true" `
2017-08-25 17:10:03 +03:00
}
// NewTraefikDefaultPointersConfiguration creates a TraefikConfiguration with pointers default values
func NewTraefikDefaultPointersConfiguration ( ) * TraefikConfiguration {
2018-03-23 15:30:03 +03:00
// default Docker
2017-08-25 17:10:03 +03:00
var defaultDocker docker . Provider
defaultDocker . Watch = true
defaultDocker . ExposedByDefault = true
defaultDocker . Endpoint = "unix:///var/run/docker.sock"
defaultDocker . SwarmMode = false
// default File
var defaultFile file . Provider
defaultFile . Watch = true
2018-03-23 15:30:03 +03:00
defaultFile . Filename = "" // needs equivalent to viper.ConfigFileUsed()
2017-08-25 17:10:03 +03:00
2017-11-09 18:12:04 +03:00
// default Rest
var defaultRest rest . Provider
defaultRest . EntryPoint = configuration . DefaultInternalEntryPointName
2017-08-25 17:10:03 +03:00
// default Marathon
var defaultMarathon marathon . Provider
defaultMarathon . Watch = true
defaultMarathon . Endpoint = "http://127.0.0.1:8080"
defaultMarathon . ExposedByDefault = true
defaultMarathon . Constraints = types . Constraints { }
2018-07-31 20:28:03 +03:00
defaultMarathon . DialerTimeout = parse . Duration ( 5 * time . Second )
defaultMarathon . ResponseHeaderTimeout = parse . Duration ( 60 * time . Second )
defaultMarathon . TLSHandshakeTimeout = parse . Duration ( 5 * time . Second )
defaultMarathon . KeepAlive = parse . Duration ( 10 * time . Second )
2017-08-25 17:10:03 +03:00
// default Consul
var defaultConsul consul . Provider
defaultConsul . Watch = true
defaultConsul . Endpoint = "127.0.0.1:8500"
defaultConsul . Prefix = "traefik"
defaultConsul . Constraints = types . Constraints { }
// default CatalogProvider
2018-01-04 17:56:03 +03:00
var defaultConsulCatalog consulcatalog . Provider
2017-08-25 17:10:03 +03:00
defaultConsulCatalog . Endpoint = "127.0.0.1:8500"
2017-08-25 18:32:03 +03:00
defaultConsulCatalog . ExposedByDefault = true
2017-08-25 17:10:03 +03:00
defaultConsulCatalog . Constraints = types . Constraints { }
defaultConsulCatalog . Prefix = "traefik"
defaultConsulCatalog . FrontEndRule = "Host:{{.ServiceName}}.{{.Domain}}"
2018-06-28 17:40:04 +03:00
defaultConsulCatalog . Stale = false
2017-08-25 17:10:03 +03:00
// default Etcd
var defaultEtcd etcd . Provider
defaultEtcd . Watch = true
defaultEtcd . Endpoint = "127.0.0.1:2379"
defaultEtcd . Prefix = "/traefik"
defaultEtcd . Constraints = types . Constraints { }
2018-03-23 15:30:03 +03:00
// default Zookeeper
2017-08-25 17:10:03 +03:00
var defaultZookeeper zk . Provider
defaultZookeeper . Watch = true
defaultZookeeper . Endpoint = "127.0.0.1:2181"
2017-12-18 11:22:03 +03:00
defaultZookeeper . Prefix = "traefik"
2017-08-25 17:10:03 +03:00
defaultZookeeper . Constraints = types . Constraints { }
2018-03-23 15:30:03 +03:00
// default Boltdb
2017-08-25 17:10:03 +03:00
var defaultBoltDb boltdb . Provider
defaultBoltDb . Watch = true
defaultBoltDb . Endpoint = "127.0.0.1:4001"
defaultBoltDb . Prefix = "/traefik"
defaultBoltDb . Constraints = types . Constraints { }
2018-03-23 15:30:03 +03:00
// default Kubernetes
2017-08-25 17:10:03 +03:00
var defaultKubernetes kubernetes . Provider
defaultKubernetes . Watch = true
defaultKubernetes . Constraints = types . Constraints { }
// default Mesos
var defaultMesos mesos . Provider
defaultMesos . Watch = true
defaultMesos . Endpoint = "http://127.0.0.1:5050"
defaultMesos . ExposedByDefault = true
defaultMesos . Constraints = types . Constraints { }
defaultMesos . RefreshSeconds = 30
defaultMesos . ZkDetectionTimeout = 30
defaultMesos . StateTimeoutSecond = 30
2018-03-23 15:30:03 +03:00
// default ECS
2017-08-25 17:10:03 +03:00
var defaultECS ecs . Provider
defaultECS . Watch = true
defaultECS . ExposedByDefault = true
defaultECS . AutoDiscoverClusters = false
defaultECS . Clusters = ecs . Clusters { "default" }
defaultECS . RefreshSeconds = 15
defaultECS . Constraints = types . Constraints { }
2018-03-23 15:30:03 +03:00
// default Rancher
2017-08-25 17:10:03 +03:00
var defaultRancher rancher . Provider
defaultRancher . Watch = true
defaultRancher . ExposedByDefault = true
defaultRancher . RefreshSeconds = 15
// default DynamoDB
var defaultDynamoDB dynamodb . Provider
defaultDynamoDB . Constraints = types . Constraints { }
defaultDynamoDB . RefreshSeconds = 15
defaultDynamoDB . TableName = "traefik"
defaultDynamoDB . Watch = true
2017-09-11 20:10:04 +03:00
// default Eureka
var defaultEureka eureka . Provider
2018-07-31 20:28:03 +03:00
defaultEureka . RefreshSeconds = parse . Duration ( 30 * time . Second )
2017-09-11 20:10:04 +03:00
2017-11-09 18:12:04 +03:00
// default Ping
var defaultPing = ping . Handler {
EntryPoint : "traefik" ,
}
2017-09-21 11:42:02 +03:00
// default TraefikLog
defaultTraefikLog := types . TraefikLog {
Format : "common" ,
FilePath : "" ,
}
2017-08-25 17:10:03 +03:00
// default AccessLog
defaultAccessLog := types . AccessLog {
Format : accesslog . CommonFormat ,
FilePath : "" ,
2018-03-14 16:12:04 +03:00
Filters : & types . AccessLogFilters { } ,
Fields : & types . AccessLogFields {
DefaultMode : types . AccessLogKeep ,
Headers : & types . FieldHeaders {
DefaultMode : types . AccessLogKeep ,
} ,
} ,
2017-08-25 17:10:03 +03:00
}
2017-09-20 19:14:03 +03:00
// default HealthCheckConfig
healthCheck := configuration . HealthCheckConfig {
2018-07-31 20:28:03 +03:00
Interval : parse . Duration ( configuration . DefaultHealthCheckInterval ) ,
2018-09-27 21:16:03 +03:00
Timeout : parse . Duration ( configuration . DefaultHealthCheckTimeout ) ,
2017-09-20 19:14:03 +03:00
}
// default RespondingTimeouts
respondingTimeouts := configuration . RespondingTimeouts {
2018-07-31 20:28:03 +03:00
IdleTimeout : parse . Duration ( configuration . DefaultIdleTimeout ) ,
2017-09-20 19:14:03 +03:00
}
// default ForwardingTimeouts
forwardingTimeouts := configuration . ForwardingTimeouts {
2018-07-31 20:28:03 +03:00
DialTimeout : parse . Duration ( configuration . DefaultDialTimeout ) ,
2017-09-20 19:14:03 +03:00
}
2018-01-10 19:48:04 +03:00
// default Tracing
defaultTracing := tracing . Tracing {
2018-08-01 01:16:03 +03:00
Backend : "jaeger" ,
ServiceName : "traefik" ,
SpanNameLimit : 0 ,
2018-01-10 19:48:04 +03:00
Jaeger : & jaeger . Config {
2018-01-18 19:24:03 +03:00
SamplingServerURL : "http://localhost:5778/sampling" ,
SamplingType : "const" ,
SamplingParam : 1.0 ,
2018-04-24 20:22:03 +03:00
LocalAgentHostPort : "127.0.0.1:6831" ,
2018-08-01 14:52:03 +03:00
Propagation : "jaeger" ,
Gen128Bit : false ,
2018-01-10 19:48:04 +03:00
} ,
Zipkin : & zipkin . Config {
HTTPEndpoint : "http://localhost:9411/api/v1/spans" ,
SameSpan : false ,
ID128Bit : true ,
Debug : false ,
2018-10-09 11:18:02 +03:00
SampleRate : 1.0 ,
2018-01-10 19:48:04 +03:00
} ,
2018-08-01 01:16:03 +03:00
DataDog : & datadog . Config {
LocalAgentHostPort : "localhost:8126" ,
GlobalTag : "" ,
Debug : false ,
} ,
2018-01-10 19:48:04 +03:00
}
2017-09-26 11:22:03 +03:00
// default LifeCycle
2017-11-27 16:26:04 +03:00
defaultLifeCycle := configuration . LifeCycle {
2018-07-31 20:28:03 +03:00
GraceTimeOut : parse . Duration ( configuration . DefaultGraceTimeout ) ,
2017-09-26 11:22:03 +03:00
}
2017-11-09 18:12:04 +03:00
// default ApiConfiguration
defaultAPI := api . Handler {
EntryPoint : "traefik" ,
Dashboard : true ,
}
defaultAPI . Statistics = & types . Statistics {
RecentErrors : 10 ,
}
// default Metrics
defaultMetrics := types . Metrics {
Prometheus : & types . Prometheus {
Buckets : types . Buckets { 0.1 , 0.3 , 1.2 , 5 } ,
2018-01-19 16:30:04 +03:00
EntryPoint : configuration . DefaultInternalEntryPointName ,
2017-11-09 18:12:04 +03:00
} ,
Datadog : & types . Datadog {
Address : "localhost:8125" ,
PushInterval : "10s" ,
} ,
StatsD : & types . Statsd {
Address : "localhost:8125" ,
PushInterval : "10s" ,
} ,
InfluxDB : & types . InfluxDB {
Address : "localhost:8089" ,
2018-05-29 23:58:03 +03:00
Protocol : "udp" ,
2017-11-09 18:12:04 +03:00
PushInterval : "10s" ,
} ,
}
2018-07-03 17:44:05 +03:00
defaultResolver := configuration . HostResolverConfig {
CnameFlattening : false ,
ResolvConfig : "/etc/resolv.conf" ,
ResolvDepth : 5 ,
}
2017-08-25 17:10:03 +03:00
defaultConfiguration := configuration . GlobalConfiguration {
2017-09-20 19:14:03 +03:00
Docker : & defaultDocker ,
File : & defaultFile ,
2017-11-09 18:12:04 +03:00
Rest : & defaultRest ,
2017-09-20 19:14:03 +03:00
Marathon : & defaultMarathon ,
Consul : & defaultConsul ,
ConsulCatalog : & defaultConsulCatalog ,
Etcd : & defaultEtcd ,
Zookeeper : & defaultZookeeper ,
Boltdb : & defaultBoltDb ,
Kubernetes : & defaultKubernetes ,
Mesos : & defaultMesos ,
ECS : & defaultECS ,
Rancher : & defaultRancher ,
Eureka : & defaultEureka ,
DynamoDB : & defaultDynamoDB ,
Retry : & configuration . Retry { } ,
HealthCheck : & healthCheck ,
RespondingTimeouts : & respondingTimeouts ,
ForwardingTimeouts : & forwardingTimeouts ,
2017-09-21 12:12:39 +03:00
TraefikLog : & defaultTraefikLog ,
AccessLog : & defaultAccessLog ,
2017-11-27 16:26:04 +03:00
LifeCycle : & defaultLifeCycle ,
2017-11-09 18:12:04 +03:00
Ping : & defaultPing ,
API : & defaultAPI ,
Metrics : & defaultMetrics ,
2018-01-10 19:48:04 +03:00
Tracing : & defaultTracing ,
2018-07-03 17:44:05 +03:00
HostResolver : & defaultResolver ,
2017-08-25 17:10:03 +03:00
}
return & TraefikConfiguration {
GlobalConfiguration : defaultConfiguration ,
}
}
// NewTraefikConfiguration creates a TraefikConfiguration with default values
func NewTraefikConfiguration ( ) * TraefikConfiguration {
return & TraefikConfiguration {
GlobalConfiguration : configuration . GlobalConfiguration {
EntryPoints : map [ string ] * configuration . EntryPoint { } ,
Constraints : types . Constraints { } ,
2017-11-30 18:10:02 +03:00
DefaultEntryPoints : [ ] string { "http" } ,
2018-07-31 20:28:03 +03:00
ProvidersThrottleDuration : parse . Duration ( 2 * time . Second ) ,
2017-08-25 17:10:03 +03:00
MaxIdleConnsPerHost : 200 ,
HealthCheck : & configuration . HealthCheckConfig {
2018-07-31 20:28:03 +03:00
Interval : parse . Duration ( configuration . DefaultHealthCheckInterval ) ,
2018-09-27 21:16:03 +03:00
Timeout : parse . Duration ( configuration . DefaultHealthCheckTimeout ) ,
2017-08-25 17:10:03 +03:00
} ,
2018-02-27 12:24:03 +03:00
LifeCycle : & configuration . LifeCycle {
2018-07-31 20:28:03 +03:00
GraceTimeOut : parse . Duration ( configuration . DefaultGraceTimeout ) ,
2018-02-27 12:24:03 +03:00
} ,
2017-08-25 17:10:03 +03:00
CheckNewVersion : true ,
} ,
ConfigFile : "" ,
}
}