split main

This commit is contained in:
Victor Vieux 2014-11-18 03:05:37 +00:00
parent 74a6bff763
commit 8411d0ed94
3 changed files with 95 additions and 74 deletions

30
join.go Normal file
View File

@ -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)
}
}
}()
}

76
main.go
View File

@ -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,
},
}

63
manage.go Normal file
View File

@ -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")))
}