forked from mantl/mesos-consul
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
109 lines (90 loc) · 2.94 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
package main
import (
"fmt"
"log"
"os"
"time"
"github.com/CiscoCloud/mesos-consul/config"
"github.com/CiscoCloud/mesos-consul/consul"
"github.com/CiscoCloud/mesos-consul/mesos"
"github.com/hashicorp/consul-template/logging"
flag "github.com/ogier/pflag"
)
const Name = "mesos-consul"
const Version = "0.1.1"
func Usage() {
fmt.Println("Usage: mesos-consul --zk=\"\" --registry=\"\" [options]")
fmt.Println("Options:")
fmt.Println(" --refresh= Refresh time (default 1m)")
fmt.Println()
}
func main() {
c, err := parseFlags(os.Args[1:])
if err != nil {
log.Fatal(err)
}
log.Print("[INFO] Using registry port: ", c.RegistryPort)
log.Print("[INFO] Using zookeeper: ", c.Zk)
leader := mesos.New(c, consul.NewConsul(c))
ticker := time.NewTicker(c.Refresh)
leader.Refresh()
for _ = range ticker.C {
leader.Refresh()
}
}
func parseFlags(args []string) (*config.Config, error) {
var doHelp bool
var c = config.DefaultConfig()
flags := flag.NewFlagSet("mesos-consul", flag.ContinueOnError)
flags.Usage = func() {
fmt.Print(usage)
}
flags.BoolVar(&doHelp, "help", false, "")
flags.StringVar(&c.LogLevel, "log-level", "WARN", "")
flags.DurationVar(&c.Refresh, "refresh", time.Minute, "")
flags.StringVar(&c.RegistryPort, "registry-port", "8500", "")
flags.Var((*config.AuthVar)(c.RegistryAuth), "registry-auth", "")
flags.BoolVar(&c.RegistrySSL.Enabled, "registry-ssl", c.RegistrySSL.Enabled, "")
flags.BoolVar(&c.RegistrySSL.Verify, "registry-ssl-verify", c.RegistrySSL.Verify, "")
flags.StringVar(&c.RegistrySSL.Cert, "registry-ssl-cert", c.RegistrySSL.Cert, "")
flags.StringVar(&c.RegistrySSL.CaCert, "registry-ssl-cacert", c.RegistrySSL.CaCert, "")
flags.StringVar(&c.RegistryToken, "registry-token", c.RegistryToken, "")
flags.StringVar(&c.Zk, "zk", "zk://127.0.0.1:2181/mesos", "")
if err := flags.Parse(args); err != nil {
return nil, err
}
args = flags.Args()
if len(args) > 0 {
return nil, fmt.Errorf("extra argument(s): %q", args)
}
if (doHelp) {
flags.Usage()
os.Exit(0)
}
logging.Setup(&logging.Config{
Name: "mesos-consul",
Level: c.LogLevel,
Writer: os.Stderr,
})
return c, nil
}
const usage = `
Usage: mesos-consul [options]
Options:
--log-level=<log_level> Set the Logging level to one of [ "DEBUG", "INFO", "WARN", "ERROR" ]
(default "WARN")
--refresh=<time> Set the Mesos refresh rate
(default 1m)
--registry-auth=<user[:pass]> Set the basic authentication username
(and password)
--registry-port=<port> Port to connect to consul agents
(default 8500)
--registry-ssl Use SSL when connecting to the registry
--registry-ssl-verify Verify certificates when connecting via SSL
--registry-ssl-cert SSL certificates to send to registry
--registry-ssl-cacert Validate server certificate against this CA
certificate file list
--registry-token=<token> Set registry ACL token
--zk=<address> Zookeeper path to Mesos
(default zk://127.0.0.1:2181/mesos)
`