/
main.go
76 lines (61 loc) · 1.75 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
package main
import (
proxy "github.com/jeffjen/ambd/proxy"
web "github.com/jeffjen/ambd/web"
disc "github.com/jeffjen/go-discovery"
dcli "github.com/jeffjen/go-discovery/cli"
log "github.com/Sirupsen/logrus"
cli "github.com/codegangsta/cli"
"os"
"path"
)
func main() {
app := cli.NewApp()
app.Name = "ambd"
app.Usage = "Facilitate dynamic Ambassador pattern"
app.Authors = []cli.Author{
cli.Author{"Yi-Hung Jen", "yihungjen@gmail.com"},
}
app.Flags = NewFlag()
app.Action = Ambassador
app.Run(os.Args)
}
func Ambassador(ctx *cli.Context) {
var (
addr = ctx.String("addr")
proxycfg = ctx.String("proxycfg")
localproxycfg = proxy.ConfigKey()
proxyTargets = ctx.StringSlice("proxy")
stop = make(chan struct{}, 1)
)
// setup register path for discovery
disc.RegisterPath = path.Join(ctx.String("cluster"), proxy.DiscoveryPath)
// setup Discovery URI from config
proxy.DiscoveryURI()
if err := dcli.Before(ctx); err != nil { // We don't want to setup discovery
if err == dcli.ErrRequireDiscovery {
log.WithFields(log.Fields{"err": err}).Warning("discovery feature disabled")
} else {
log.WithFields(log.Fields{"err": err}).Fatal("halt")
}
} else { // We had successfully setup discovery
if localproxycfg != "" {
proxy.ProxyConfigKey = localproxycfg
} else if proxycfg != "" {
proxy.ProxyConfigKey = proxycfg
}
if proxyTargets != nil {
proxy.Targets = proxyTargets
}
proxy.EnableDiscoveryProxy = ctx.Bool("proxy2discovery")
proxy.Follow()
}
if addr != "" {
log.WithFields(log.Fields{"addr": addr}).Info("API endpoint begin")
web.RunAPIEndpoint(addr, stop)
} else {
log.Warning("API endpoint disabled")
}
<-stop // we should never reach here
// TODO: we should gracefully shutdown proxied connections
}