diff --git a/join.go b/join.go new file mode 100644 index 0000000000..54d70e39a1 --- /dev/null +++ b/join.go @@ -0,0 +1,30 @@ +package main + +import ( + "time" + + log "github.com/Sirupsen/logrus" + "github.com/codegangsta/cli" + "github.com/docker/libcluster/discovery" +) + +func join(c *cli.Context) { + + if c.String("token") == "" { + log.Fatal("--token required to join a cluster") + } + + if err := discovery.RegisterSlave(c.String("addr"), c.String("token")); err != nil { + log.Fatal(err) + } + + // heartbeat every 25 seconds + go func() { + for { + time.Sleep(25 * time.Second) + if err := discovery.RegisterSlave(c.String("addr"), c.String("token")); err != nil { + log.Error(err) + } + } + }() +} diff --git a/main.go b/main.go index 2709c7cfb4..4ba1f6cc94 100644 --- a/main.go +++ b/main.go @@ -7,11 +7,7 @@ import ( log "github.com/Sirupsen/logrus" "github.com/codegangsta/cli" - "github.com/docker/libcluster/api" "github.com/docker/libcluster/discovery" - "github.com/docker/libcluster/scheduler" - "github.com/docker/libcluster/scheduler/filter" - "github.com/docker/libcluster/scheduler/strategy" "github.com/docker/libcluster/swarm" ) @@ -79,82 +75,14 @@ func main() { ShortName: "m", Usage: "manage a docker cluster", Flags: clusterFlags, - - Action: func(c *cli.Context) { - - refresh := func(cluster *swarm.Cluster, nodes []string) error { - for _, addr := range nodes { - if cluster.Node(addr) == nil { - n := swarm.NewNode(addr, addr) - if err := n.Connect(nil); err != nil { - return err - } - if err := cluster.AddNode(n); err != nil { - return err - } - } - } - return nil - } - - cluster := swarm.NewCluster() - cluster.Events(&logHandler{}) - - if c.String("token") != "" { - nodes, err := discovery.FetchSlaves(c.String("token")) - if err != nil { - log.Fatal(err) - - } - if err := refresh(cluster, nodes); err != nil { - log.Fatal(err) - } - go func() { - for { - time.Sleep(25 * time.Second) - nodes, err = discovery.FetchSlaves(c.String("token")) - if err == nil { - refresh(cluster, nodes) - } - } - }() - } else { - if err := refresh(cluster, c.Args()); err != nil { - log.Fatal(err) - } - } - - s := scheduler.NewScheduler(cluster, &strategy.BinPackingPlacementStrategy{}, []filter.Filter{}) - - log.Fatal(api.ListenAndServe(cluster, s, c.String("addr"))) - }, + Action: manage, }, { Name: "join", ShortName: "j", Usage: "join a docker cluster", Flags: clusterFlags, - - Action: func(c *cli.Context) { - - if c.String("token") == "" { - log.Fatal("--token required to join a cluster") - } - - if err := discovery.RegisterSlave(c.String("addr"), c.String("token")); err != nil { - log.Fatal(err) - } - - // heartbeat every 25 seconds - go func() { - for { - time.Sleep(25 * time.Second) - if err := discovery.RegisterSlave(c.String("addr"), c.String("token")); err != nil { - log.Error(err) - } - } - }() - }, + Action: join, }, } diff --git a/manage.go b/manage.go new file mode 100644 index 0000000000..0271421d9e --- /dev/null +++ b/manage.go @@ -0,0 +1,63 @@ +package main + +import ( + "log" + "time" + + "github.com/codegangsta/cli" + "github.com/docker/libcluster/api" + "github.com/docker/libcluster/discovery" + "github.com/docker/libcluster/scheduler" + "github.com/docker/libcluster/scheduler/filter" + "github.com/docker/libcluster/scheduler/strategy" + "github.com/docker/libcluster/swarm" +) + +func manage(c *cli.Context) { + + refresh := func(cluster *swarm.Cluster, nodes []string) error { + for _, addr := range nodes { + if cluster.Node(addr) == nil { + n := swarm.NewNode(addr, addr) + if err := n.Connect(nil); err != nil { + return err + } + if err := cluster.AddNode(n); err != nil { + return err + } + } + } + return nil + } + + cluster := swarm.NewCluster() + cluster.Events(&logHandler{}) + + if c.String("token") != "" { + nodes, err := discovery.FetchSlaves(c.String("token")) + if err != nil { + log.Fatal(err) + + } + if err := refresh(cluster, nodes); err != nil { + log.Fatal(err) + } + go func() { + for { + time.Sleep(25 * time.Second) + nodes, err = discovery.FetchSlaves(c.String("token")) + if err == nil { + refresh(cluster, nodes) + } + } + }() + } else { + if err := refresh(cluster, c.Args()); err != nil { + log.Fatal(err) + } + } + + s := scheduler.NewScheduler(cluster, &strategy.BinPackingPlacementStrategy{}, []filter.Filter{}) + + log.Fatal(api.ListenAndServe(cluster, s, c.String("addr"))) +}