Merge pull request #223 from goguardian/kv-multi
Support multiple endpoints for KV stores:
This commit is contained in:
commit
b84b95fe97
6
cmd.go
6
cmd.go
|
@ -131,7 +131,7 @@ func init() {
|
||||||
traefikCmd.PersistentFlags().BoolVar(&arguments.consul, "consul", false, "Enable Consul backend")
|
traefikCmd.PersistentFlags().BoolVar(&arguments.consul, "consul", false, "Enable Consul backend")
|
||||||
traefikCmd.PersistentFlags().BoolVar(&arguments.Consul.Watch, "consul.watch", true, "Watch provider")
|
traefikCmd.PersistentFlags().BoolVar(&arguments.Consul.Watch, "consul.watch", true, "Watch provider")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Consul.Filename, "consul.filename", "", "Override default configuration template. For advanced users :)")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Consul.Filename, "consul.filename", "", "Override default configuration template. For advanced users :)")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Consul.Endpoint, "consul.endpoint", "127.0.0.1:8500", "Consul server endpoint")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Consul.Endpoint, "consul.endpoint", "127.0.0.1:8500", "Comma sepparated Consul server endpoints")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Consul.Prefix, "consul.prefix", "/traefik", "Prefix used for KV store")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Consul.Prefix, "consul.prefix", "/traefik", "Prefix used for KV store")
|
||||||
traefikCmd.PersistentFlags().BoolVar(&arguments.consulTLS, "consul.tls", false, "Enable Consul TLS support")
|
traefikCmd.PersistentFlags().BoolVar(&arguments.consulTLS, "consul.tls", false, "Enable Consul TLS support")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Consul.TLS.CA, "consul.tls.ca", "", "TLS CA")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Consul.TLS.CA, "consul.tls.ca", "", "TLS CA")
|
||||||
|
@ -146,13 +146,13 @@ func init() {
|
||||||
traefikCmd.PersistentFlags().BoolVar(&arguments.zookeeper, "zookeeper", false, "Enable Zookeeper backend")
|
traefikCmd.PersistentFlags().BoolVar(&arguments.zookeeper, "zookeeper", false, "Enable Zookeeper backend")
|
||||||
traefikCmd.PersistentFlags().BoolVar(&arguments.Zookeeper.Watch, "zookeeper.watch", true, "Watch provider")
|
traefikCmd.PersistentFlags().BoolVar(&arguments.Zookeeper.Watch, "zookeeper.watch", true, "Watch provider")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Zookeeper.Filename, "zookeeper.filename", "", "Override default configuration template. For advanced users :)")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Zookeeper.Filename, "zookeeper.filename", "", "Override default configuration template. For advanced users :)")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Zookeeper.Endpoint, "zookeeper.endpoint", "127.0.0.1:2181", "Zookeeper server endpoint")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Zookeeper.Endpoint, "zookeeper.endpoint", "127.0.0.1:2181", "Comma sepparated Zookeeper server endpoints")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Zookeeper.Prefix, "zookeeper.prefix", "/traefik", "Prefix used for KV store")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Zookeeper.Prefix, "zookeeper.prefix", "/traefik", "Prefix used for KV store")
|
||||||
|
|
||||||
traefikCmd.PersistentFlags().BoolVar(&arguments.etcd, "etcd", false, "Enable Etcd backend")
|
traefikCmd.PersistentFlags().BoolVar(&arguments.etcd, "etcd", false, "Enable Etcd backend")
|
||||||
traefikCmd.PersistentFlags().BoolVar(&arguments.Etcd.Watch, "etcd.watch", true, "Watch provider")
|
traefikCmd.PersistentFlags().BoolVar(&arguments.Etcd.Watch, "etcd.watch", true, "Watch provider")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Etcd.Filename, "etcd.filename", "", "Override default configuration template. For advanced users :)")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Etcd.Filename, "etcd.filename", "", "Override default configuration template. For advanced users :)")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Etcd.Endpoint, "etcd.endpoint", "127.0.0.1:4001", "Etcd server endpoint")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Etcd.Endpoint, "etcd.endpoint", "127.0.0.1:4001", "Comma sepparated Etcd server endpoints")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Etcd.Prefix, "etcd.prefix", "/traefik", "Prefix used for KV store")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Etcd.Prefix, "etcd.prefix", "/traefik", "Prefix used for KV store")
|
||||||
traefikCmd.PersistentFlags().BoolVar(&arguments.etcdTLS, "etcd.tls", false, "Enable Etcd TLS support")
|
traefikCmd.PersistentFlags().BoolVar(&arguments.etcdTLS, "etcd.tls", false, "Enable Etcd TLS support")
|
||||||
traefikCmd.PersistentFlags().StringVar(&arguments.Etcd.TLS.CA, "etcd.tls.ca", "", "TLS CA")
|
traefikCmd.PersistentFlags().StringVar(&arguments.Etcd.TLS.CA, "etcd.tls.ca", "", "TLS CA")
|
||||||
|
|
|
@ -106,7 +106,7 @@ Flags:
|
||||||
--boltdb.watch Watch provider (default true)
|
--boltdb.watch Watch provider (default true)
|
||||||
-c, --configFile string Configuration file to use (TOML, JSON, YAML, HCL).
|
-c, --configFile string Configuration file to use (TOML, JSON, YAML, HCL).
|
||||||
--consul Enable Consul backend
|
--consul Enable Consul backend
|
||||||
--consul.endpoint string Consul server endpoint (default "127.0.0.1:8500")
|
--consul.endpoint string Comma sepparated Consul server endpoints (default "127.0.0.1:8500")
|
||||||
--consul.filename string Override default configuration template. For advanced users :)
|
--consul.filename string Override default configuration template. For advanced users :)
|
||||||
--consul.prefix string Prefix used for KV store (default "/traefik")
|
--consul.prefix string Prefix used for KV store (default "/traefik")
|
||||||
--consul.tls Enable Consul TLS support
|
--consul.tls Enable Consul TLS support
|
||||||
|
@ -131,7 +131,7 @@ Flags:
|
||||||
--docker.watch Watch provider (default true)
|
--docker.watch Watch provider (default true)
|
||||||
--entryPoints value Entrypoints definition using format: --entryPoints='Name:http Address::8000 Redirect.EntryPoint:https' --entryPoints='Name:https Address::4442 TLS:tests/traefik.crt,tests/traefik.key'
|
--entryPoints value Entrypoints definition using format: --entryPoints='Name:http Address::8000 Redirect.EntryPoint:https' --entryPoints='Name:https Address::4442 TLS:tests/traefik.crt,tests/traefik.key'
|
||||||
--etcd Enable Etcd backend
|
--etcd Enable Etcd backend
|
||||||
--etcd.endpoint string Etcd server endpoint (default "127.0.0.1:4001")
|
--etcd.endpoint string Comma sepparated Etcd server endpoints (default "127.0.0.1:4001")
|
||||||
--etcd.filename string Override default configuration template. For advanced users :)
|
--etcd.filename string Override default configuration template. For advanced users :)
|
||||||
--etcd.prefix string Prefix used for KV store (default "/traefik")
|
--etcd.prefix string Prefix used for KV store (default "/traefik")
|
||||||
--etcd.tls Enable Etcd TLS support
|
--etcd.tls Enable Etcd TLS support
|
||||||
|
@ -160,7 +160,7 @@ Flags:
|
||||||
--web.keyFile string SSL certificate
|
--web.keyFile string SSL certificate
|
||||||
--web.readOnly Enable read only API
|
--web.readOnly Enable read only API
|
||||||
--zookeeper Enable Zookeeper backend
|
--zookeeper Enable Zookeeper backend
|
||||||
--zookeeper.endpoint string Zookeeper server endpoint (default "127.0.0.1:2181")
|
--zookeeper.endpoint string Comma sepparated Zookeeper server endpoints (default "127.0.0.1:2181")
|
||||||
--zookeeper.filename string Override default configuration template. For advanced users :)
|
--zookeeper.filename string Override default configuration template. For advanced users :)
|
||||||
--zookeeper.prefix string Prefix used for KV store (default "/traefik")
|
--zookeeper.prefix string Prefix used for KV store (default "/traefik")
|
||||||
--zookeeper.watch Watch provider (default true)
|
--zookeeper.watch Watch provider (default true)
|
||||||
|
|
27
integration/etcd_test.go
Normal file
27
integration/etcd_test.go
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"os/exec"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"fmt"
|
||||||
|
checker "github.com/vdemeester/shakers"
|
||||||
|
check "gopkg.in/check.v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *EtcdSuite) TestSimpleConfiguration(c *check.C) {
|
||||||
|
cmd := exec.Command(traefikBinary, "--configFile=fixtures/etcd/simple.toml")
|
||||||
|
err := cmd.Start()
|
||||||
|
c.Assert(err, checker.IsNil)
|
||||||
|
defer cmd.Process.Kill()
|
||||||
|
|
||||||
|
time.Sleep(1000 * time.Millisecond)
|
||||||
|
// TODO validate : run on 80
|
||||||
|
resp, err := http.Get("http://127.0.0.1:8000/")
|
||||||
|
|
||||||
|
// Expected no response as we did not configure anything
|
||||||
|
c.Assert(resp, checker.IsNil)
|
||||||
|
c.Assert(err, checker.NotNil)
|
||||||
|
c.Assert(err.Error(), checker.Contains, fmt.Sprintf("getsockopt: connection refused"))
|
||||||
|
}
|
10
integration/fixtures/etcd/simple.toml
Normal file
10
integration/fixtures/etcd/simple.toml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
defaultEntryPoints = ["http"]
|
||||||
|
|
||||||
|
[entryPoints]
|
||||||
|
[entryPoints.http]
|
||||||
|
address = ":8000"
|
||||||
|
|
||||||
|
logLevel = "DEBUG"
|
||||||
|
|
||||||
|
[etcd]
|
||||||
|
endpoint = "127.0.0.1:4003,127.0.0.1:4002,127.0.0.1:4001"
|
|
@ -29,6 +29,7 @@ func init() {
|
||||||
check.Suite(&DockerSuite{})
|
check.Suite(&DockerSuite{})
|
||||||
check.Suite(&ConsulSuite{})
|
check.Suite(&ConsulSuite{})
|
||||||
check.Suite(&ConsulCatalogSuite{})
|
check.Suite(&ConsulCatalogSuite{})
|
||||||
|
check.Suite(&EtcdSuite{})
|
||||||
check.Suite(&MarathonSuite{})
|
check.Suite(&MarathonSuite{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +51,13 @@ func (s *ConsulSuite) SetUpSuite(c *check.C) {
|
||||||
s.createComposeProject(c, "consul")
|
s.createComposeProject(c, "consul")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Etcd test suites (using libcompose)
|
||||||
|
type EtcdSuite struct{ BaseSuite }
|
||||||
|
|
||||||
|
func (s *EtcdSuite) SetUpSuite(c *check.C) {
|
||||||
|
s.createComposeProject(c, "etcd")
|
||||||
|
}
|
||||||
|
|
||||||
// Marathon test suites (using libcompose)
|
// Marathon test suites (using libcompose)
|
||||||
type MarathonSuite struct{ BaseSuite }
|
type MarathonSuite struct{ BaseSuite }
|
||||||
|
|
||||||
|
|
30
integration/resources/compose/etcd.yml
Normal file
30
integration/resources/compose/etcd.yml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
etcd1:
|
||||||
|
image: quay.io/coreos/etcd:v2.2.0
|
||||||
|
net: "host"
|
||||||
|
command: >
|
||||||
|
--name etcd1
|
||||||
|
--listen-peer-urls http://localhost:7001
|
||||||
|
--listen-client-urls http://localhost:4001
|
||||||
|
--initial-advertise-peer-urls http://localhost:7001
|
||||||
|
--advertise-client-urls http://localhost:4001
|
||||||
|
--initial-cluster etcd1=http://localhost:7001,etcd2=http://localhost:7002,etcd3=http://localhost:7003
|
||||||
|
etcd2:
|
||||||
|
image: quay.io/coreos/etcd:v2.2.0
|
||||||
|
net: "host"
|
||||||
|
command: >
|
||||||
|
--name etcd2
|
||||||
|
--listen-peer-urls http://localhost:7002
|
||||||
|
--listen-client-urls http://localhost:4002
|
||||||
|
--initial-advertise-peer-urls http://localhost:7002
|
||||||
|
--advertise-client-urls http://localhost:4002
|
||||||
|
--initial-cluster etcd1=http://localhost:7001,etcd2=http://localhost:7002,etcd3=http://localhost:7003
|
||||||
|
etcd3:
|
||||||
|
image: quay.io/coreos/etcd:v2.2.0
|
||||||
|
net: "host"
|
||||||
|
command: >
|
||||||
|
--name etcd3
|
||||||
|
--listen-peer-urls http://localhost:7003
|
||||||
|
--listen-client-urls http://localhost:4003
|
||||||
|
--initial-advertise-peer-urls http://localhost:7003
|
||||||
|
--advertise-client-urls http://localhost:4003
|
||||||
|
--initial-cluster etcd1=http://localhost:7001,etcd2=http://localhost:7002,etcd3=http://localhost:7003
|
|
@ -69,7 +69,7 @@ func (provider *Kv) provide(configurationChan chan<- types.ConfigMessage) error
|
||||||
|
|
||||||
kv, err := libkv.NewStore(
|
kv, err := libkv.NewStore(
|
||||||
provider.storeType,
|
provider.storeType,
|
||||||
[]string{provider.Endpoint},
|
strings.Split(provider.Endpoint, ","),
|
||||||
storeConfig,
|
storeConfig,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue