mirror of https://github.com/docker/docs.git
Merge pull request #232 from vieux/ip_discovery
Proposal: add a `list` discovery service to give a list of ips
This commit is contained in:
commit
59ea9e5681
|
@ -128,6 +128,22 @@ $ swarm list --discovery zk://<zookeeper_addr1>,<zookeeper_addr2>/<path>
|
||||||
<node_ip:2375>
|
<node_ip:2375>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
###### Using a static list of ips
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# start the manager on any machine or your laptop
|
||||||
|
$ swarm manage --discovery <node_ip1:2375>,<node_ip2:2375> -H=<swarm_ip:swarm_port>
|
||||||
|
#or
|
||||||
|
$ swarm manage --discovery nodes://<node_ip1:2375>,<node_ip2:2375> -H=<swarm_ip:swarm_port>
|
||||||
|
|
||||||
|
# use the regular docker cli
|
||||||
|
$ docker -H <swarm_ip:swarm_port> info
|
||||||
|
$ docker -H <swarm_ip:swarm_port> run ...
|
||||||
|
$ docker -H <swarm_ip:swarm_port> ps
|
||||||
|
$ docker -H <swarm_ip:swarm_port> logs ...
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Contributing a new discovery backend is easy,
|
Contributing a new discovery backend is easy,
|
||||||
|
|
|
@ -55,6 +55,11 @@ func New(rawurl string, heartbeat int) (DiscoveryService, error) {
|
||||||
return nil, err
|
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 {
|
if discovery, exists := discoveries[url.Scheme]; exists {
|
||||||
log.Debugf("Initializing %q discovery service with %q", url.Scheme, url.Host+url.Path)
|
log.Debugf("Initializing %q discovery service with %q", url.Scheme, url.Host+url.Path)
|
||||||
err := discovery.Initialize(url.Host+url.Path, heartbeat)
|
err := discovery.Initialize(url.Host+url.Path, heartbeat)
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -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"))
|
||||||
|
}
|
2
flags.go
2
flags.go
|
@ -6,7 +6,7 @@ var (
|
||||||
flDiscovery = cli.StringFlag{
|
flDiscovery = cli.StringFlag{
|
||||||
Name: "discovery",
|
Name: "discovery",
|
||||||
Value: "",
|
Value: "",
|
||||||
Usage: "DiscoveryService to use [token://<token>, etcd://<ip1>,<ip2>/<path>, file://path/to/file, consul://<addr>/<path>, zk://<ip1>,<ip2>/<path>]",
|
Usage: "DiscoveryService to use [token://<token>,\n\t\t\t\t etcd://<ip1>,<ip2>/<path>,\n\t\t\t\t file://path/to/file,\n\t\t\t\t consul://<addr>/<path>,\n\t\t\t\t zk://<ip1>,<ip2>/<path>,\n\t\t\t\t <ip1>,<ip2>]",
|
||||||
EnvVar: "SWARM_DISCOVERY",
|
EnvVar: "SWARM_DISCOVERY",
|
||||||
}
|
}
|
||||||
flAddr = cli.StringFlag{
|
flAddr = cli.StringFlag{
|
||||||
|
|
1
main.go
1
main.go
|
@ -11,6 +11,7 @@ import (
|
||||||
_ "github.com/docker/swarm/discovery/consul"
|
_ "github.com/docker/swarm/discovery/consul"
|
||||||
_ "github.com/docker/swarm/discovery/etcd"
|
_ "github.com/docker/swarm/discovery/etcd"
|
||||||
_ "github.com/docker/swarm/discovery/file"
|
_ "github.com/docker/swarm/discovery/file"
|
||||||
|
_ "github.com/docker/swarm/discovery/nodes"
|
||||||
"github.com/docker/swarm/discovery/token"
|
"github.com/docker/swarm/discovery/token"
|
||||||
_ "github.com/docker/swarm/discovery/zookeeper"
|
_ "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 := cluster.NewCluster(tlsConfig)
|
||||||
cluster.Events(&logHandler{})
|
cluster.Events(&logHandler{})
|
||||||
|
|
||||||
go func() {
|
if !c.IsSet("discovery") {
|
||||||
if c.String("discovery") != "" {
|
log.Fatal("--discovery required to manage a cluster")
|
||||||
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)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
s, err := strategy.New(c.String("strategy"))
|
s, err := strategy.New(c.String("strategy"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -112,6 +92,24 @@ func manage(c *cli.Context) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
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(
|
sched := scheduler.NewScheduler(
|
||||||
cluster,
|
cluster,
|
||||||
s,
|
s,
|
||||||
|
|
Loading…
Reference in New Issue