diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json
index 8eb9d2194..36e270c9b 100644
--- a/Godeps/Godeps.json
+++ b/Godeps/Godeps.json
@@ -1,386 +1,302 @@
{
- "ImportPath": "github.com/emilevauge/traefik",
- "GoVersion": "go1.4.2",
- "Packages": [
- "./..."
- ],
- "Deps": [
- {
- "ImportPath": "github.com/BurntSushi/toml",
- "Rev": "bd2bdf7f18f849530ef7a1c29a4290217cab32a1"
- },
- {
- "ImportPath": "github.com/BurntSushi/ty",
- "Rev": "6add9cd6ad42d389d6ead1dde60b4ad71e46fd74"
- },
- {
- "ImportPath": "github.com/Sirupsen/logrus",
- "Comment": "v0.8.7",
- "Rev": "418b41d23a1bf978c06faea5313ba194650ac088"
- },
- {
- "ImportPath": "github.com/alecthomas/template",
- "Rev": "b867cc6ab45cece8143cfcc6fc9c77cf3f2c23c0"
- },
- {
- "ImportPath": "github.com/alecthomas/units",
- "Rev": "6b4e7dc5e3143b85ea77909c72caf89416fc2915"
- },
- {
- "ImportPath": "github.com/boltdb/bolt",
- "Rev": "51f99c862475898df9773747d3accd05a7ca33c1"
- },
- {
- "ImportPath": "github.com/cenkalti/backoff",
- "Rev": "4dc77674aceaabba2c7e3da25d4c823edfb73f99"
- },
- {
- "ImportPath": "github.com/codahale/hdrhistogram",
- "Rev": "954f16e8b9ef0e5d5189456aa4c1202758e04f17"
- },
- {
- "ImportPath": "github.com/codegangsta/negroni",
- "Comment": "v0.1-70-gc7477ad",
- "Rev": "c7477ad8e330bef55bf1ebe300cf8aa67c492d1b"
- },
- {
- "ImportPath": "github.com/coreos/go-etcd/etcd",
- "Comment": "v2.0.0-11-gcc90c7b",
- "Rev": "cc90c7b091275e606ad0ca7102a23fb2072f3f5e"
- },
- {
- "ImportPath": "github.com/davecgh/go-spew/spew",
- "Rev": "2df174808ee097f90d259e432cc04442cf60be21"
- },
- {
- "ImportPath": "github.com/docker/libkv",
- "Rev": "3732f7ff1b56057c3158f10bceb1e79133025373"
- },
- {
- "ImportPath": "github.com/docker/distribution",
- "Comment": "v2.0.0-467-g9038e48",
- "Rev": "9038e48c3b982f8e82281ea486f078a73731ac4e"
- },
- {
- "ImportPath": "github.com/docker/docker/api",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/cliconfig",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/daemon/network",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/graph/tags",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/image",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/opts",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/archive",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/fileutils",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/homedir",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/httputils",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/ioutils",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/jsonmessage",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/mflag",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/nat",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/parsers",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/pools",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/promise",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/random",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/stdcopy",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/stringid",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/symlink",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/system",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/tarsum",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/term",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/timeutils",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/tlsconfig",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/ulimit",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/units",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/urlutil",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/useragent",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/pkg/version",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/registry",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/runconfig",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/utils",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/docker/volume",
- "Comment": "v1.4.1-5200-gf39987a",
- "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
- },
- {
- "ImportPath": "github.com/docker/libcompose/docker",
- "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
- },
- {
- "ImportPath": "github.com/docker/libcompose/logger",
- "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
- },
- {
- "ImportPath": "github.com/docker/libcompose/lookup",
- "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
- },
- {
- "ImportPath": "github.com/docker/libcompose/project",
- "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
- },
- {
- "ImportPath": "github.com/docker/libcompose/utils",
- "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
- },
- {
- "ImportPath": "github.com/docker/libtrust",
- "Rev": "9cbd2a1374f46905c68a4eb3694a130610adc62a"
- },
- {
- "ImportPath": "github.com/elazarl/go-bindata-assetfs",
- "Rev": "d5cac425555ca5cf00694df246e04f05e6a55150"
- },
- {
- "ImportPath": "github.com/flynn/go-shlex",
- "Rev": "3f9db97f856818214da2e1057f8ad84803971cff"
- },
- {
- "ImportPath": "github.com/fsouza/go-dockerclient",
- "Rev": "0239034d42f665efa17fd77c39f891c2f9f32922"
- },
- {
- "ImportPath": "github.com/gambol99/go-marathon",
- "Rev": "0ba31bcb0d7633ba1888d744c42990eb15281cf1"
- },
- {
- "ImportPath": "github.com/gorilla/context",
- "Rev": "215affda49addc4c8ef7e2534915df2c8c35c6cd"
- },
- {
- "ImportPath": "github.com/gorilla/handlers",
- "Rev": "40694b40f4a928c062f56849989d3e9cd0570e5f"
- },
- {
- "ImportPath": "github.com/gorilla/mux",
- "Rev": "f15e0c49460fd49eebe2bcc8486b05d1bef68d3a"
- },
- {
- "ImportPath": "github.com/hashicorp/consul/api",
- "Comment": "v0.5.2-313-gde08067",
- "Rev": "de080672fee9e6104572eeea89eccdca135bb918"
- },
- {
- "ImportPath": "github.com/mailgun/log",
- "Rev": "44874009257d4d47ba9806f1b7f72a32a015e4d8"
- },
- {
- "ImportPath": "github.com/mailgun/manners",
- "Comment": "0.3.1-30-g37136f7",
- "Rev": "37136f736785d7c6aa3b9a27b4b2dd1028ca6d79"
- },
- {
- "ImportPath": "github.com/mailgun/oxy/cbreaker",
- "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
- },
- {
- "ImportPath": "github.com/mailgun/oxy/forward",
- "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
- },
- {
- "ImportPath": "github.com/mailgun/oxy/memmetrics",
- "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
- },
- {
- "ImportPath": "github.com/mailgun/oxy/roundrobin",
- "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
- },
- {
- "ImportPath": "github.com/mailgun/oxy/utils",
- "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
- },
- {
- "ImportPath": "github.com/mailgun/predicate",
- "Rev": "cb0bff91a7ab7cf7571e661ff883fc997bc554a3"
- },
- {
- "ImportPath": "github.com/mailgun/timetools",
- "Rev": "fd192d755b00c968d312d23f521eb0cdc6f66bd0"
- },
- {
- "ImportPath": "github.com/samuel/go-zookeeper/zk",
- "Rev": "fa6674abf3f4580b946a01bf7a1ce4ba8766205b"
- },
- {
- "ImportPath": "github.com/opencontainers/runc/libcontainer/user",
- "Comment": "v0.0.4-21-g4ab1324",
- "Rev": "4ab132458fc3e9dbeea624153e0331952dc4c8d5"
- },
- {
- "ImportPath": "github.com/samalba/dockerclient",
- "Rev": "cfb489c624b635251a93e74e1e90eb0959c5367f"
- },
- {
- "ImportPath": "github.com/thoas/stats",
- "Rev": "54ed61c2b47e263ae2f01b86837b0c4bd1da28e8"
- },
- {
- "ImportPath": "github.com/unrolled/render",
- "Rev": "26b4e3aac686940fe29521545afad9966ddfc80c"
- },
- {
- "ImportPath": "github.com/vdemeester/shakers",
- "Rev": "8fe734f75f3a70b651cbfbf8a55a009da09e8dc5"
- },
- {
- "ImportPath": "golang.org/x/net/context",
- "Rev": "d9558e5c97f85372afee28cf2b6059d7d3818919"
- },
- {
- "ImportPath": "gopkg.in/alecthomas/kingpin.v2",
- "Comment": "v2.0.12",
- "Rev": "639879d6110b1b0409410c7b737ef0bb18325038"
- },
- {
- "ImportPath": "gopkg.in/check.v1",
- "Rev": "11d3bc7aa68e238947792f30573146a3231fc0f1"
- },
- {
- "ImportPath": "gopkg.in/fsnotify.v1",
- "Comment": "v1.2.0",
- "Rev": "96c060f6a6b7e0d6f75fddd10efeaca3e5d1bcb0"
- },
- {
- "ImportPath": "gopkg.in/mgo.v2/bson",
- "Comment": "r2015.06.03-5-g22287ba",
- "Rev": "22287bab4379e1fbf6002fb4eb769888f3fb224c"
- },
- {
- "ImportPath": "gopkg.in/yaml.v2",
- "Rev": "7ad95dd0798a40da1ccdff6dff35fd177b5edf40"
- }
- ]
+ "ImportPath": "github.com/emilevauge/traefik",
+ "GoVersion": "go1.4.2",
+ "Packages": [
+ "./..."
+ ],
+ "Deps": [{
+ "ImportPath": "github.com/BurntSushi/toml",
+ "Rev": "bd2bdf7f18f849530ef7a1c29a4290217cab32a1"
+ }, {
+ "ImportPath": "github.com/BurntSushi/ty",
+ "Rev": "6add9cd6ad42d389d6ead1dde60b4ad71e46fd74"
+ }, {
+ "ImportPath": "github.com/Sirupsen/logrus",
+ "Comment": "v0.8.7",
+ "Rev": "418b41d23a1bf978c06faea5313ba194650ac088"
+ }, {
+ "ImportPath": "github.com/alecthomas/template",
+ "Rev": "b867cc6ab45cece8143cfcc6fc9c77cf3f2c23c0"
+ }, {
+ "ImportPath": "github.com/alecthomas/units",
+ "Rev": "6b4e7dc5e3143b85ea77909c72caf89416fc2915"
+ }, {
+ "ImportPath": "github.com/boltdb/bolt",
+ "Rev": "51f99c862475898df9773747d3accd05a7ca33c1"
+ }, {
+ "ImportPath": "github.com/cenkalti/backoff",
+ "Rev": "4dc77674aceaabba2c7e3da25d4c823edfb73f99"
+ }, {
+ "ImportPath": "github.com/codahale/hdrhistogram",
+ "Rev": "954f16e8b9ef0e5d5189456aa4c1202758e04f17"
+ }, {
+ "ImportPath": "github.com/codegangsta/negroni",
+ "Comment": "v0.1-70-gc7477ad",
+ "Rev": "c7477ad8e330bef55bf1ebe300cf8aa67c492d1b"
+ }, {
+ "ImportPath": "github.com/coreos/go-etcd/etcd",
+ "Comment": "v2.0.0-11-gcc90c7b",
+ "Rev": "cc90c7b091275e606ad0ca7102a23fb2072f3f5e"
+ }, {
+ "ImportPath": "github.com/davecgh/go-spew/spew",
+ "Rev": "2df174808ee097f90d259e432cc04442cf60be21"
+ }, {
+ "ImportPath": "github.com/docker/libkv",
+ "Rev": "3732f7ff1b56057c3158f10bceb1e79133025373"
+ }, {
+ "ImportPath": "github.com/docker/distribution",
+ "Comment": "v2.0.0-467-g9038e48",
+ "Rev": "9038e48c3b982f8e82281ea486f078a73731ac4e"
+ }, {
+ "ImportPath": "github.com/docker/docker/api",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/cliconfig",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/daemon/network",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/graph/tags",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/image",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/opts",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/archive",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/fileutils",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/homedir",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/httputils",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/ioutils",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/jsonmessage",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/mflag",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/nat",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/parsers",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/pools",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/promise",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/random",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/stdcopy",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/stringid",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/symlink",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/system",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/tarsum",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/term",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/timeutils",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/tlsconfig",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/ulimit",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/units",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/urlutil",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/useragent",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/pkg/version",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/registry",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/runconfig",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/utils",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/docker/volume",
+ "Comment": "v1.4.1-5200-gf39987a",
+ "Rev": "f39987afe8d611407887b3094c03d6ba6a766a67"
+ }, {
+ "ImportPath": "github.com/docker/libcompose/docker",
+ "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
+ }, {
+ "ImportPath": "github.com/docker/libcompose/logger",
+ "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
+ }, {
+ "ImportPath": "github.com/docker/libcompose/lookup",
+ "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
+ }, {
+ "ImportPath": "github.com/docker/libcompose/project",
+ "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
+ }, {
+ "ImportPath": "github.com/docker/libcompose/utils",
+ "Rev": "aad672800904307e96a2c21cad1420f3080e0f35"
+ }, {
+ "ImportPath": "github.com/docker/libtrust",
+ "Rev": "9cbd2a1374f46905c68a4eb3694a130610adc62a"
+ }, {
+ "ImportPath": "github.com/elazarl/go-bindata-assetfs",
+ "Rev": "d5cac425555ca5cf00694df246e04f05e6a55150"
+ }, {
+ "ImportPath": "github.com/flynn/go-shlex",
+ "Rev": "3f9db97f856818214da2e1057f8ad84803971cff"
+ }, {
+ "ImportPath": "github.com/fsouza/go-dockerclient",
+ "Rev": "0239034d42f665efa17fd77c39f891c2f9f32922"
+ }, {
+ "ImportPath": "github.com/gambol99/go-marathon",
+ "Rev": "0ba31bcb0d7633ba1888d744c42990eb15281cf1"
+ }, {
+ "ImportPath": "github.com/gorilla/context",
+ "Rev": "215affda49addc4c8ef7e2534915df2c8c35c6cd"
+ }, {
+ "ImportPath": "github.com/gorilla/handlers",
+ "Rev": "40694b40f4a928c062f56849989d3e9cd0570e5f"
+ }, {
+ "ImportPath": "github.com/gorilla/mux",
+ "Rev": "f15e0c49460fd49eebe2bcc8486b05d1bef68d3a"
+ }, {
+ "ImportPath": "github.com/hashicorp/consul/api",
+ "Comment": "v0.5.2-313-gde08067",
+ "Rev": "de080672fee9e6104572eeea89eccdca135bb918"
+ }, {
+ "ImportPath": "github.com/mailgun/log",
+ "Rev": "44874009257d4d47ba9806f1b7f72a32a015e4d8"
+ }, {
+ "ImportPath": "github.com/mailgun/manners",
+ "Comment": "0.3.1-30-g37136f7",
+ "Rev": "37136f736785d7c6aa3b9a27b4b2dd1028ca6d79"
+ }, {
+ "ImportPath": "github.com/mailgun/oxy/cbreaker",
+ "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
+ }, {
+ "ImportPath": "github.com/mailgun/oxy/forward",
+ "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
+ }, {
+ "ImportPath": "github.com/mailgun/oxy/memmetrics",
+ "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
+ }, {
+ "ImportPath": "github.com/mailgun/oxy/roundrobin",
+ "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
+ }, {
+ "ImportPath": "github.com/mailgun/oxy/utils",
+ "Rev": "547c334d658398c05b346c0b79d8f47ba2e1473b"
+ }, {
+ "ImportPath": "github.com/mailgun/predicate",
+ "Rev": "cb0bff91a7ab7cf7571e661ff883fc997bc554a3"
+ }, {
+ "ImportPath": "github.com/mailgun/timetools",
+ "Rev": "fd192d755b00c968d312d23f521eb0cdc6f66bd0"
+ }, {
+ "ImportPath": "github.com/samuel/go-zookeeper/zk",
+ "Rev": "fa6674abf3f4580b946a01bf7a1ce4ba8766205b"
+ }, {
+ "ImportPath": "github.com/opencontainers/runc/libcontainer/user",
+ "Comment": "v0.0.4-21-g4ab1324",
+ "Rev": "4ab132458fc3e9dbeea624153e0331952dc4c8d5"
+ }, {
+ "ImportPath": "github.com/samalba/dockerclient",
+ "Rev": "cfb489c624b635251a93e74e1e90eb0959c5367f"
+ }, {
+ "ImportPath": "github.com/thoas/stats",
+ "Rev": "54ed61c2b47e263ae2f01b86837b0c4bd1da28e8"
+ }, {
+ "ImportPath": "github.com/unrolled/render",
+ "Rev": "26b4e3aac686940fe29521545afad9966ddfc80c"
+ }, {
+ "ImportPath": "github.com/vdemeester/shakers",
+ "Rev": "8fe734f75f3a70b651cbfbf8a55a009da09e8dc5"
+ }, {
+ "ImportPath": "golang.org/x/net/context",
+ "Rev": "d9558e5c97f85372afee28cf2b6059d7d3818919"
+ }, {
+ "ImportPath": "gopkg.in/alecthomas/kingpin.v2",
+ "Comment": "v2.0.12",
+ "Rev": "639879d6110b1b0409410c7b737ef0bb18325038"
+ }, {
+ "ImportPath": "gopkg.in/check.v1",
+ "Rev": "11d3bc7aa68e238947792f30573146a3231fc0f1"
+ }, {
+ "ImportPath": "gopkg.in/fsnotify.v1",
+ "Comment": "v1.2.0",
+ "Rev": "96c060f6a6b7e0d6f75fddd10efeaca3e5d1bcb0"
+ }, {
+ "ImportPath": "gopkg.in/mgo.v2/bson",
+ "Comment": "r2015.06.03-5-g22287ba",
+ "Rev": "22287bab4379e1fbf6002fb4eb769888f3fb224c"
+ }, {
+ "ImportPath": "gopkg.in/yaml.v2",
+ "Rev": "7ad95dd0798a40da1ccdff6dff35fd177b5edf40"
+ }]
}
diff --git a/README.md b/README.md
index 8475987a7..d619bb613 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ ___
Træfɪk is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease.
-It supports several backends ([Docker :whale:](https://www.docker.com/), [Mesos/Marathon](https://mesosphere.github.io/marathon/), [Consul](https://consul.io/), [Etcd](https://coreos.com/etcd/), Rest API, file...) to manage its configuration automatically and dynamically.
+It supports several backends ([Docker :whale:](https://www.docker.com/), [Mesos/Marathon](https://mesosphere.github.io/marathon/), [Consul](https://consul.io/), [Etcd](https://coreos.com/etcd/), [Zookeeper](https://zookeeper.apache.org), [BoltDB](https://github.com/boltdb/bolt), Rest API, file...) to manage its configuration automatically and dynamically.
# Features
diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md
deleted file mode 100644
index f672330a0..000000000
--- a/docs/ROADMAP.md
+++ /dev/null
@@ -1,35 +0,0 @@
-![Træfɪk](http://traefik.github.io/traefik.logo.svg "Træfɪk")
-___
-
-# Roadmap
-
-* Add traefik.protocol label
-* Providers recovery
-* tls client verification
-* Default configuration values
-* Retry with streams
-* Licence
-* Add traefik.indlude all/enabled policy
-* Consul support
-* README
-* API enhancements
-* Godoc
-
-
-* Kubernetes support
-* Etcd support
-* Smart configuration diff
-
-
-* ~~GraceTimeout~~
-* ~~Weights~~
-* ~~Filter traefik.enabled=false apps~~
-* ~~Filter no exposed port apps~~
-* ~~Logs~~
-* ~~SSL frontend support~~
-* ~~SSL backends support~~
-* ~~Static files with go-bindata~~
-* ~~Metrics~~
-* ~~Dockerfile~~
-* ~~Use Negroni middlewares for metrics, grace, logs~~
-* ~~Website~~
diff --git a/docs/index.md b/docs/index.md
index 045f221cf..03bb16eb0 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -11,6 +11,9 @@ ___
* [Docker backend](#docker)
* [Mesos/Marathon backend](#marathon)
* [Consul backend](#consul)
+* [Etcd backend](#etcd)
+* [Zookeeper backend](#zk)
+* [Boltdb backend](#boltdb)
* [Benchmarks](#benchmarks)
@@ -257,106 +260,77 @@ $ curl -s "http://localhost:8080/health" | jq .
* ```/api```: ```GET``` configuration for all providers
```sh
-$ curl -s "http://localhost:8082/api" | jq .
+$ curl -s "http://localhost:8080/api" | jq .
{
"file": {
"Frontends": {
- "frontend-traefik": {
+ "frontend2": {
"Routes": {
- "route-host-traefik": {
- "Value": "traefik.docker.localhost",
- "Rule": "Host"
+ "test_2": {
+ "Value": "/test",
+ "Rule": "Path"
}
},
- "Backend": "backend-test2"
+ "Backend": "backend1"
},
- "frontend-test": {
+ "frontend1": {
"Routes": {
- "route-host-test": {
- "Value": "test.docker.localhost",
+ "test_1": {
+ "Value": "test.localhost",
"Rule": "Host"
}
},
- "Backend": "backend-test1"
+ "Backend": "backend2"
}
},
"Backends": {
- "backend-test2": {
+ "backend2": {
+ "LoadBalancer": {
+ "Method": "drr"
+ },
+ "CircuitBreaker": null,
"Servers": {
- "server-stoic_brattain": {
- "Weight": 0,
- "Url": "http://172.17.0.8:80"
+ "server2": {
+ "Weight": 2,
+ "URL": "http://172.17.0.5:80"
},
- "server-jovial_khorana": {
- "Weight": 0,
- "Url": "http://172.17.0.12:80"
- },
- "server-jovial_franklin": {
- "Weight": 0,
- "Url": "http://172.17.0.11:80"
- },
- "server-elegant_panini": {
- "Weight": 0,
- "Url": "http://172.17.0.9:80"
- },
- "server-adoring_elion": {
- "Weight": 0,
- "Url": "http://172.17.0.10:80"
+ "server1": {
+ "Weight": 1,
+ "URL": "http://172.17.0.4:80"
}
}
},
- "backend-test1": {
+ "backend1": {
+ "LoadBalancer": {
+ "Method": "wrr"
+ },
+ "CircuitBreaker": {
+ "Expression": "NetworkErrorRatio() > 0.5"
+ },
"Servers": {
- "server-trusting_wozniak": {
- "Weight": 0,
- "Url": "http://172.17.0.5:80"
+ "server2": {
+ "Weight": 1,
+ "URL": "http://172.17.0.3:80"
},
- "server-sharp_jang": {
- "Weight": 0,
- "Url": "http://172.17.0.7:80"
- },
- "server-dreamy_feynman": {
- "Weight": 0,
- "Url": "http://172.17.0.6:80"
+ "server1": {
+ "Weight": 10,
+ "URL": "http://172.17.0.2:80"
}
}
}
}
- },
- "marathon": {
- "Frontends": {
- "frontend-marathon": {
- "Routes": {
- "route-host-marathon": {
- "Value": "marathon.docker.localhost",
- "Rule": "Host"
- }
- },
- "Backend": "backend-marathon"
- },
- },
- "Backends": {
- "backend-marathon": {
- "Servers": {
- "server-marathon-1": {
- "Weight": 0,
- "Url": "http://172.17.0.8:802"
- },
- },
- },
- },
- },
+ }
}
-
```
-* ```/api/{provider}```: ```GET``` or ```PUT``` provider
-* ```/api/{provider}/backends```: ```GET``` backends
-* ```/api/{provider}/backends/{backend}```: ```GET``` a backend
-* ```/api/{provider}/backends/{backend}/servers```: ```GET``` servers in a backend
-* ```/api/{provider}/backends/{backend}/servers/{server}```: ```GET``` a server in a backend
-* ```/api/{provider}/frontends```: ```GET``` frontends
-* ```/api/{provider}/frontends/{frontend}```: ```GET``` a frontend
+* ```/api/providers```: ```GET``` providers
+* ```/api/providers/{provider}```: ```GET``` or ```PUT``` provider
+* ```/api/providers/{provider}/backends```: ```GET``` backends
+* ```/api/providers/{provider}/backends/{backend}```: ```GET``` a backend
+* ```/api/providers/{provider}/backends/{backend}/servers```: ```GET``` servers in a backend
+* ```/api/providers/{provider}/backends/{backend}/servers/{server}```: ```GET``` a server in a backend
+* ```/api/providers/{provider}/frontends```: ```GET``` frontends
+* ```/api/providers/{provider}/frontends/{frontend}```: ```GET``` a frontend
## Docker backend
@@ -508,6 +482,126 @@ prefix = "traefik"
# filename = "consul.tmpl"
```
+## Etcd backend
+
+Træfɪk can be configured to use Etcd as a backend configuration:
+
+```toml
+################################################################
+# Etcd configuration backend
+################################################################
+
+# Enable Etcd configuration backend
+#
+# Optional
+#
+# [etcd]
+
+# Etcd server endpoint
+#
+# Required
+#
+# endpoint = "127.0.0.1:4001"
+
+# Enable watch Etcd changes
+#
+# Optional
+#
+# watch = true
+
+# Prefix used for KV store.
+#
+# Optional
+#
+# prefix = "/traefik"
+
+# Override default configuration template. For advanced users :)
+#
+# Optional
+#
+# filename = "etcd.tmpl"
+```
+
+## Zookeeper backend
+
+Træfɪk can be configured to use Zookeeper as a backend configuration:
+
+```toml
+################################################################
+# Zookeeper configuration backend
+################################################################
+
+# Enable Zookeeperconfiguration backend
+#
+# Optional
+#
+# [zookeeper]
+
+# Zookeeper server endpoint
+#
+# Required
+#
+# endpoint = "127.0.0.1:2181"
+
+# Enable watch Zookeeper changes
+#
+# Optional
+#
+# watch = true
+
+# Prefix used for KV store.
+#
+# Optional
+#
+# prefix = "/traefik"
+
+# Override default configuration template. For advanced users :)
+#
+# Optional
+#
+# filename = "zookeeper.tmpl"
+```
+
+## BoltDB backend
+
+Træfɪk can be configured to use BoltDB as a backend configuration:
+
+```toml
+################################################################
+# BoltDB configuration backend
+################################################################
+
+# Enable BoltDB configuration backend
+#
+# Optional
+#
+# [boltdb]
+
+# BoltDB file
+#
+# Required
+#
+# endpoint = "/my.db"
+
+# Enable watch BoltDB changes
+#
+# Optional
+#
+# watch = true
+
+# Prefix used for KV store.
+#
+# Optional
+#
+# prefix = "/traefik"
+
+# Override default configuration template. For advanced users :)
+#
+# Optional
+#
+# filename = "boltdb.tmpl"
+```
+
## Benchmarks
diff --git a/traefik.sample.toml b/traefik.sample.toml
index 5194b1c8c..51d452609 100644
--- a/traefik.sample.toml
+++ b/traefik.sample.toml
@@ -147,7 +147,7 @@
#
# endpoint = "http://127.0.0.1:8080"
-# Network interface used to call Marathon web services
+# Network interface used to call Marathon web services. Needed in case of multiple network interfaces.
# Optional
# Default: "eth0"
#
@@ -208,6 +208,112 @@
# filename = "consul.tmpl"
+################################################################
+# Etcd configuration backend
+################################################################
+
+# Enable Etcd configuration backend
+#
+# Optional
+#
+# [etcd]
+
+# Etcd server endpoint
+#
+# Required
+#
+# endpoint = "127.0.0.1:4001"
+
+# Enable watch Etcd changes
+#
+# Optional
+#
+# watch = true
+
+# Prefix used for KV store.
+#
+# Optional
+#
+# prefix = "/traefik"
+
+# Override default configuration template. For advanced users :)
+#
+# Optional
+#
+# filename = "etcd.tmpl"
+
+
+################################################################
+# Zookeeper configuration backend
+################################################################
+
+# Enable Zookeeperconfiguration backend
+#
+# Optional
+#
+# [zookeeper]
+
+# Zookeeper server endpoint
+#
+# Required
+#
+# endpoint = "127.0.0.1:2181"
+
+# Enable watch Zookeeper changes
+#
+# Optional
+#
+# watch = true
+
+# Prefix used for KV store.
+#
+# Optional
+#
+# prefix = "/traefik"
+
+# Override default configuration template. For advanced users :)
+#
+# Optional
+#
+# filename = "zookeeper.tmpl"
+
+
+################################################################
+# BoltDB configuration backend
+################################################################
+
+# Enable BoltDB configuration backend
+#
+# Optional
+#
+# [boltdb]
+
+# BoltDB file
+#
+# Required
+#
+# endpoint = "/my.db"
+
+# Enable watch BoltDB changes
+#
+# Optional
+#
+# watch = true
+
+# Prefix used for KV store.
+#
+# Optional
+#
+# prefix = "/traefik"
+
+# Override default configuration template. For advanced users :)
+#
+# Optional
+#
+# filename = "boltdb.tmpl"
+
+
+
################################################################
# Sample rules
diff --git a/web.go b/web.go
index f5a0d26c7..185542535 100644
--- a/web.go
+++ b/web.go
@@ -27,8 +27,8 @@ func (provider *WebProvider) Provide(configurationChan chan<- configMessage) err
systemRouter.Methods("GET").Path("/health").Handler(http.HandlerFunc(GetHealthHandler))
systemRouter.Methods("GET").Path("/api").Handler(http.HandlerFunc(GetConfigHandler))
systemRouter.Methods("GET").Path("/api/providers").Handler(http.HandlerFunc(GetProvidersHandler))
- systemRouter.Methods("GET").Path("/api/{provider}").Handler(http.HandlerFunc(GetConfigHandler))
- systemRouter.Methods("PUT").Path("/api/{provider}").Handler(http.HandlerFunc(
+ systemRouter.Methods("GET").Path("/api/providers/{provider}").Handler(http.HandlerFunc(GetConfigHandler))
+ systemRouter.Methods("PUT").Path("/api/providers/{provider}").Handler(http.HandlerFunc(
func(rw http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
if vars["provider"] != "web" {
@@ -48,12 +48,12 @@ func (provider *WebProvider) Provide(configurationChan chan<- configMessage) err
http.Error(rw, fmt.Sprintf("%+v", err), http.StatusBadRequest)
}
}))
- systemRouter.Methods("GET").Path("/api/{provider}/backends").Handler(http.HandlerFunc(GetBackendsHandler))
- systemRouter.Methods("GET").Path("/api/{provider}/backends/{backend}").Handler(http.HandlerFunc(GetBackendHandler))
- systemRouter.Methods("GET").Path("/api/{provider}/backends/{backend}/servers").Handler(http.HandlerFunc(GetServersHandler))
- systemRouter.Methods("GET").Path("/api/{provider}/backends/{backend}/servers/{server}").Handler(http.HandlerFunc(GetServerHandler))
- systemRouter.Methods("GET").Path("/api/{provider}/frontends").Handler(http.HandlerFunc(GetFrontendsHandler))
- systemRouter.Methods("GET").Path("/api/{provider}/frontends/{frontend}").Handler(http.HandlerFunc(GetFrontendHandler))
+ systemRouter.Methods("GET").Path("/api/providers/{provider}/backends").Handler(http.HandlerFunc(GetBackendsHandler))
+ systemRouter.Methods("GET").Path("/api/providers/{provider}/backends/{backend}").Handler(http.HandlerFunc(GetBackendHandler))
+ systemRouter.Methods("GET").Path("/api/providers/{provider}/backends/{backend}/servers").Handler(http.HandlerFunc(GetServersHandler))
+ systemRouter.Methods("GET").Path("/api/providers/{provider}/backends/{backend}/servers/{server}").Handler(http.HandlerFunc(GetServerHandler))
+ systemRouter.Methods("GET").Path("/api/providers/{provider}/frontends").Handler(http.HandlerFunc(GetFrontendsHandler))
+ systemRouter.Methods("GET").Path("/api/providers/{provider}/frontends/{frontend}").Handler(http.HandlerFunc(GetFrontendHandler))
systemRouter.Methods("GET").PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, Prefix: "static"})))
go func() {