/
main.go
111 lines (93 loc) · 2.09 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package main
import (
"os"
"github.com/codegangsta/cli"
"github.com/docker/go-plugins-helpers/ipam"
"github.com/docker/go-plugins-helpers/network"
. "github.com/xytis/polyp/common"
dipam "github.com/xytis/polyp/ipam"
dnet "github.com/xytis/polyp/net"
)
func main() {
var flagLogLevel = cli.StringFlag{
Name: "log-level",
Value: "info",
Usage: "logging level (debug, info, warning, error)",
}
var flagNoIPAM = cli.BoolFlag{
Name: "no-ipam",
Usage: "Disable IPAM plugin",
}
var flagNoNet = cli.BoolFlag{
Name: "no-network",
Usage: "Disable Network plugin",
}
var flagClusterStore = cli.StringFlag{
Name: "cluster-store, s",
Value: "consul://127.0.0.1:8500",
Usage: "cluster store for shared polyp data",
}
var flagInterface = cli.StringFlag{
Name: "interface, i",
Value: "eth0",
Usage: "primary interface for vlan binds",
}
app := cli.NewApp()
app.Name = "polyp"
app.Usage = "Docker dhcp enabled Networking"
app.Version = Version
app.Flags = []cli.Flag{
flagLogLevel,
flagNoIPAM,
flagNoNet,
flagClusterStore,
flagInterface,
}
app.Action = Run
app.Run(os.Args)
}
func Run(ctx *cli.Context) {
SetLogLevel(ctx.String("log-level"))
var (
derr, ierr chan error
)
//Bind to cluster store
store, err := NewStore(ctx.String("cluster-store"))
if err != nil {
panic(err)
}
if !ctx.Bool("no-network") {
d, err := dnet.NewDriver("global", ctx.String("interface"), store)
if err != nil {
panic(err)
}
h := network.NewHandler(d)
derr = make(chan error)
go func() {
derr <- h.ServeUnix("root", "dnet")
}()
Log.Infof("Running Driver plugin 'dnet', bound on interface %s", ctx.String("interface"))
}
if !ctx.Bool("no-ipam") {
i, err := dipam.NewIpam()
if err != nil {
panic(err)
}
h := ipam.NewHandler(i)
ierr = make(chan error)
go func() {
ierr <- h.ServeUnix("root", "dhcp")
}()
Log.Infof("Running IPAM plugin 'dhcp'")
}
if derr == nil && ierr == nil {
Log.Errorf("You started the daemon without anything to do")
os.Exit(127)
}
select {
case err := <-derr:
panic(err)
case err := <-ierr:
panic(err)
}
}