-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathmain.go
98 lines (85 loc) · 3.18 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
package main
import (
"flag"
"fmt"
"github.com/Sirupsen/logrus"
"github.com/nightlyone/lockfile"
"os"
"runtime"
)
const Version = "2.3.3"
var log = logrus.New()
func main() {
var (
// TODO(xutao) support more vip interface binding
// TODO(xutao) lainlet cannot process prefix: "http://"
//eventHandler = flag.String("event.hanlder", "", "Event hanlder file.")
domain = flag.String("domain", "", "Lain domain")
etcdEndpoint = flag.String("etcd.endpoint", "http://127.0.0.1:4001", "Etcd endpoint")
lainletEndPoint = flag.String("lainlet.endpoint", "127.0.0.1:9001", "Lainlet endpoint")
dockerEndpoint = flag.String("docker.endpoint", "unix:///var/run/docker.sock", "Docker daemon endpoint")
lockFilename = flag.String("lock.filename", "/var/run/lain-networkd.pid", "Lock filename")
netInterface = flag.String("net.interface", "eth0", "Default interface to bind vip")
hostname = flag.String("hostname", "", "Hostname")
netAddress = flag.String("net.address", "", "Host IP address(default: net.interface's first ip)")
libnetwork = flag.Bool("libnetwork", false, "Enable/Disable libnetwork.")
tinydns = flag.Bool("tinydns", false, "Enable/Disable watch tinydns ip.")
swarm = flag.Bool("swarm", false, "Enable/Disable watch swarm ip.")
webrouter = flag.Bool("webrouter", false, "Enable/Disable watch webrouter ip.")
streamrouter = flag.Bool("streamrouter", false, "Enable/Disable watch streamrouter vips and ports.")
deployd = flag.Bool("deployd", false, "Enable/Disable watch deployd ip.")
acl = flag.Bool("acl", false, "Enable/Disable acl.")
dnsAddr = flag.String("godns.addr", "127.0.0.1:53", "godnds' listen address")
apiAddr = flag.String("api.addr", "127.0.0.1:3000", "api server's listen address")
printVersion = flag.Bool("version", false, "Print the version and exit.")
verbose = flag.Bool("verbose", false, "Print more info.")
)
flag.Parse()
if *printVersion == true {
fmt.Println("networkd Version: " + Version)
fmt.Println("Go Version: " + runtime.Version())
fmt.Println("Go OS/Arch: " + runtime.GOOS + "/" + runtime.GOARCH)
os.Exit(0)
}
if *verbose == true {
log.Level = logrus.DebugLevel
} else {
log.Level = logrus.InfoLevel
}
lock, err := lockfile.New(*lockFilename)
if err != nil {
log.WithFields(logrus.Fields{
"err": err,
}).Fatal("Cannot init lock")
}
err = lock.TryLock()
// Error handling is essential, as we only try to get the lock.
if err != nil {
log.WithFields(logrus.Fields{
"err": err,
}).Fatal("Cannot lock file")
}
defer lock.Unlock()
var agt Agent
agt.InitFlag(*tinydns, *swarm, *webrouter, *deployd, *acl, *streamrouter)
agt.InitIptables()
agt.InitLibNetwork(*libnetwork)
agt.InitDocker(*dockerEndpoint)
agt.InitEtcd(*etcdEndpoint)
agt.InitCalico(*etcdEndpoint)
agt.InitInterface(*netInterface)
agt.InitHostname(*hostname)
agt.InitAddress(*netAddress)
agt.InitLibkv(*etcdEndpoint)
agt.InitLainlet(*lainletEndPoint)
agt.InitWebrouter()
agt.InitStreamrouter()
agt.InitDeployd()
agt.InitDomain(*domain)
agt.InitGodns(*dnsAddr)
agt.InitApiServer(*apiAddr)
if *acl {
agt.InitAcl()
}
agt.Run()
}