From 957fce6a6c5e1ba936e603730590941d112cc410 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 9 Jan 2015 21:42:29 +0000 Subject: [PATCH 1/4] use list of IPs as a discovery Signed-off-by: Victor Vieux --- discovery/list/list.go | 33 ++++++++++++++++++++++++++++ discovery/list/list_test.go | 20 +++++++++++++++++ main.go | 1 + manage.go | 44 ++++++++++++++++++------------------- 4 files changed, 75 insertions(+), 23 deletions(-) create mode 100644 discovery/list/list.go create mode 100644 discovery/list/list_test.go diff --git a/discovery/list/list.go b/discovery/list/list.go new file mode 100644 index 0000000000..c36e063684 --- /dev/null +++ b/discovery/list/list.go @@ -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 +} diff --git a/discovery/list/list_test.go b/discovery/list/list_test.go new file mode 100644 index 0000000000..94ad01f56c --- /dev/null +++ b/discovery/list/list_test.go @@ -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")) +} diff --git a/main.go b/main.go index 1965d24080..d75a61d10b 100644 --- a/main.go +++ b/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" ) diff --git a/manage.go b/manage.go index 143eb63fdf..63395cebe4 100644 --- a/manage.go +++ b/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, From 7d7a8e0cbade11314409020b36f562dad70629ae Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 9 Jan 2015 21:48:04 +0000 Subject: [PATCH 2/4] add doc Signed-off-by: Victor Vieux --- discovery/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/discovery/README.md b/discovery/README.md index 765738cc8e..05620c357e 100644 --- a/discovery/README.md +++ b/discovery/README.md @@ -128,6 +128,20 @@ $ swarm list --discovery zk://,/ ``` +###### Using a static list of ips + +```bash +# start the manager on any machine or your laptop +$ swarm manage --discovery list://, -H= + +# use the regular docker cli +$ docker -H info +$ docker -H run ... +$ docker -H ps +$ docker -H logs ... +... +``` + ## Contributing Contributing a new discovery backend is easy, From f8825b644b944e0271590fce10effceef5f495e8 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 13 Jan 2015 19:56:53 +0000 Subject: [PATCH 3/4] rename list to nodes Signed-off-by: Victor Vieux --- discovery/discovery.go | 5 +++++ discovery/list/list.go | 33 --------------------------------- discovery/list/list_test.go | 20 -------------------- discovery/nodes/nodes.go | 33 +++++++++++++++++++++++++++++++++ discovery/nodes/nodes_test.go | 20 ++++++++++++++++++++ main.go | 2 +- 6 files changed, 59 insertions(+), 54 deletions(-) delete mode 100644 discovery/list/list.go delete mode 100644 discovery/list/list_test.go create mode 100644 discovery/nodes/nodes.go create mode 100644 discovery/nodes/nodes_test.go diff --git a/discovery/discovery.go b/discovery/discovery.go index 779acb01ce..2e53be4c85 100644 --- a/discovery/discovery.go +++ b/discovery/discovery.go @@ -55,6 +55,11 @@ func New(rawurl string, heartbeat int) (DiscoveryService, error) { return nil, err } + // nodes:port,node2:port => nodes://node1:port,node2:port + if url.Scheme == "" { + url.Scheme = "nodes" + } + if discovery, exists := discoveries[url.Scheme]; exists { log.Debugf("Initializing %q discovery service with %q", url.Scheme, url.Host+url.Path) err := discovery.Initialize(url.Host+url.Path, heartbeat) diff --git a/discovery/list/list.go b/discovery/list/list.go deleted file mode 100644 index c36e063684..0000000000 --- a/discovery/list/list.go +++ /dev/null @@ -1,33 +0,0 @@ -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 -} diff --git a/discovery/list/list_test.go b/discovery/list/list_test.go deleted file mode 100644 index 94ad01f56c..0000000000 --- a/discovery/list/list_test.go +++ /dev/null @@ -1,20 +0,0 @@ -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")) -} diff --git a/discovery/nodes/nodes.go b/discovery/nodes/nodes.go new file mode 100644 index 0000000000..9428a1aada --- /dev/null +++ b/discovery/nodes/nodes.go @@ -0,0 +1,33 @@ +package nodes + +import ( + "strings" + + "github.com/docker/swarm/discovery" +) + +type NodesDiscoveryService struct { + nodes []*discovery.Node +} + +func init() { + discovery.Register("nodes", &NodesDiscoveryService{}) +} + +func (s *NodesDiscoveryService) Initialize(uris string, _ int) error { + for _, ip := range strings.Split(uris, ",") { + s.nodes = append(s.nodes, discovery.NewNode(ip)) + } + + return nil +} +func (s *NodesDiscoveryService) Fetch() ([]*discovery.Node, error) { + return s.nodes, nil +} + +func (s *NodesDiscoveryService) Watch(callback discovery.WatchCallback) { +} + +func (s *NodesDiscoveryService) Register(addr string) error { + return discovery.ErrNotImplemented +} diff --git a/discovery/nodes/nodes_test.go b/discovery/nodes/nodes_test.go new file mode 100644 index 0000000000..b4e4569700 --- /dev/null +++ b/discovery/nodes/nodes_test.go @@ -0,0 +1,20 @@ +package nodes + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestInitialise(t *testing.T) { + discovery := &NodesDiscoveryService{} + discovery.Initialize("1.1.1.1:1111,2.2.2.2:2222", 0) + assert.Equal(t, len(discovery.nodes), 2) + assert.Equal(t, discovery.nodes[0].String(), "1.1.1.1:1111") + assert.Equal(t, discovery.nodes[1].String(), "2.2.2.2:2222") +} + +func TestRegister(t *testing.T) { + discovery := &NodesDiscoveryService{} + assert.Error(t, discovery.Register("0.0.0.0")) +} diff --git a/main.go b/main.go index d75a61d10b..5359d6e88e 100644 --- a/main.go +++ b/main.go @@ -11,7 +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/nodes" "github.com/docker/swarm/discovery/token" _ "github.com/docker/swarm/discovery/zookeeper" ) From 6e79a0e3458009998df08da0586934ffa0501dab Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 13 Jan 2015 21:41:49 +0000 Subject: [PATCH 4/4] add tabs in the help Signed-off-by: Victor Vieux --- discovery/README.md | 4 +++- flags.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/discovery/README.md b/discovery/README.md index 05620c357e..b89a3a8def 100644 --- a/discovery/README.md +++ b/discovery/README.md @@ -132,7 +132,9 @@ $ swarm list --discovery zk://,/ ```bash # start the manager on any machine or your laptop -$ swarm manage --discovery list://, -H= +$ swarm manage --discovery , -H= +#or +$ swarm manage --discovery nodes://, -H= # use the regular docker cli $ docker -H info diff --git a/flags.go b/flags.go index c97d19bdec..5f4ac86be0 100644 --- a/flags.go +++ b/flags.go @@ -6,7 +6,7 @@ var ( flDiscovery = cli.StringFlag{ Name: "discovery", Value: "", - Usage: "DiscoveryService to use [token://, etcd://,/, file://path/to/file, consul:///, zk://,/]", + Usage: "DiscoveryService to use [token://,\n\t\t\t\t etcd://,/,\n\t\t\t\t file://path/to/file,\n\t\t\t\t consul:///,\n\t\t\t\t zk://,/,\n\t\t\t\t ,]", EnvVar: "SWARM_DISCOVERY", } flAddr = cli.StringFlag{