mirror of https://github.com/docker/docs.git
use list of IPs as a discovery
Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
parent
336c1e265e
commit
957fce6a6c
|
@ -0,0 +1,33 @@
|
|||
package list
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/docker/swarm/discovery"
|
||||
)
|
||||
|
||||
type ListDiscoveryService struct {
|
||||
list []*discovery.Node
|
||||
}
|
||||
|
||||
func init() {
|
||||
discovery.Register("list", &ListDiscoveryService{})
|
||||
}
|
||||
|
||||
func (s *ListDiscoveryService) Initialize(uris string, _ int) error {
|
||||
for _, ip := range strings.Split(uris, ",") {
|
||||
s.list = append(s.list, discovery.NewNode(ip))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
func (s *ListDiscoveryService) Fetch() ([]*discovery.Node, error) {
|
||||
return s.list, nil
|
||||
}
|
||||
|
||||
func (s *ListDiscoveryService) Watch(callback discovery.WatchCallback) {
|
||||
}
|
||||
|
||||
func (s *ListDiscoveryService) Register(addr string) error {
|
||||
return discovery.ErrNotImplemented
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package list
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestInitialise(t *testing.T) {
|
||||
discovery := &ListDiscoveryService{}
|
||||
discovery.Initialize("1.1.1.1:1111,2.2.2.2:2222", 0)
|
||||
assert.Equal(t, len(discovery.list), 2)
|
||||
assert.Equal(t, discovery.list[0].String(), "http://1.1.1.1:1111")
|
||||
assert.Equal(t, discovery.list[1].String(), "http://2.2.2.2:2222")
|
||||
}
|
||||
|
||||
func TestRegister(t *testing.T) {
|
||||
discovery := &ListDiscoveryService{}
|
||||
assert.Error(t, discovery.Register("0.0.0.0"))
|
||||
}
|
1
main.go
1
main.go
|
@ -11,6 +11,7 @@ import (
|
|||
_ "github.com/docker/swarm/discovery/consul"
|
||||
_ "github.com/docker/swarm/discovery/etcd"
|
||||
_ "github.com/docker/swarm/discovery/file"
|
||||
_ "github.com/docker/swarm/discovery/list"
|
||||
"github.com/docker/swarm/discovery/token"
|
||||
_ "github.com/docker/swarm/discovery/zookeeper"
|
||||
)
|
||||
|
|
44
manage.go
44
manage.go
|
@ -74,29 +74,9 @@ func manage(c *cli.Context) {
|
|||
cluster := cluster.NewCluster(tlsConfig)
|
||||
cluster.Events(&logHandler{})
|
||||
|
||||
go func() {
|
||||
if c.String("discovery") != "" {
|
||||
d, err := discovery.New(c.String("discovery"), c.Int("heartbeat"))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
nodes, err := d.Fetch()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
}
|
||||
cluster.UpdateNodes(nodes)
|
||||
|
||||
go d.Watch(cluster.UpdateNodes)
|
||||
} else {
|
||||
var nodes []*discovery.Node
|
||||
for _, arg := range c.Args() {
|
||||
nodes = append(nodes, discovery.NewNode(arg))
|
||||
}
|
||||
cluster.UpdateNodes(nodes)
|
||||
}
|
||||
}()
|
||||
if !c.IsSet("discovery") {
|
||||
log.Fatal("--discovery required to manage a cluster")
|
||||
}
|
||||
|
||||
s, err := strategy.New(c.String("strategy"))
|
||||
if err != nil {
|
||||
|
@ -112,6 +92,24 @@ func manage(c *cli.Context) {
|
|||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// get the list of nodes from the discovery service
|
||||
go func() {
|
||||
d, err := discovery.New(c.String("discovery"), c.Int("heartbeat"))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
nodes, err := d.Fetch()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
}
|
||||
cluster.UpdateNodes(nodes)
|
||||
|
||||
go d.Watch(cluster.UpdateNodes)
|
||||
}()
|
||||
|
||||
sched := scheduler.NewScheduler(
|
||||
cluster,
|
||||
s,
|
||||
|
|
Loading…
Reference in New Issue