blob: c8b8a76eecc9d974ac91875b95fbb0e7af76d964 [file] [log] [blame]
Serge Bazanski8d7843c2018-10-04 10:37:36 +01001package main
2
Serge Bazanskic7be4a12018-10-06 13:18:05 +01003//go:generate packr
4
Serge Bazanski8d7843c2018-10-04 10:37:36 +01005import (
Serge Bazanski2c6c6d12018-10-06 11:55:04 +01006 "context"
Serge Bazanski8d7843c2018-10-04 10:37:36 +01007 "flag"
8 "io/ioutil"
9
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010010 "github.com/digitalocean/go-netbox/netbox"
11 "github.com/digitalocean/go-netbox/netbox/client"
Serge Bazanski8d7843c2018-10-04 10:37:36 +010012 "github.com/golang/glog"
13 "github.com/golang/protobuf/proto"
14
Serge Bazanski28f49072018-10-06 11:31:18 +010015 "code.hackerspace.pl/q3k/topo/graph"
Serge Bazanski8d7843c2018-10-04 10:37:36 +010016 confpb "code.hackerspace.pl/q3k/topo/proto/config"
17)
18
19var (
Serge Bazanski88b572d2018-10-05 16:35:01 -070020 flagConfigPath string
21 flagNetboxHost string
22 flagNetboxAPIKey string
Serge Bazanski46765082018-10-06 12:32:01 +010023 flagDebugListen string
Serge Bazanski8d7843c2018-10-04 10:37:36 +010024)
25
26func init() {
27 flag.Set("logtostderr", "true")
28}
29
30func main() {
31 flag.StringVar(&flagConfigPath, "config_path", "./topo.pb.text", "Text proto configuration of Topo (per config.proto)")
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010032 flag.StringVar(&flagNetboxHost, "netbox_host", "netbox.bgp.wtf", "Netbox host")
Serge Bazanski88b572d2018-10-05 16:35:01 -070033 flag.StringVar(&flagNetboxAPIKey, "netbox_api_key", "", "Netbox API key")
Serge Bazanski46765082018-10-06 12:32:01 +010034 flag.StringVar(&flagDebugListen, "debug_listen", "127.0.0.1:42001", "Debug HTTP listen address")
Serge Bazanski8d7843c2018-10-04 10:37:36 +010035 flag.Parse()
36
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010037 ctx := context.Background()
38
Serge Bazanski8d7843c2018-10-04 10:37:36 +010039 data, err := ioutil.ReadFile(flagConfigPath)
40 if err != nil {
41 glog.Exitf("Could not read config: %v", err)
42 }
43
44 config := confpb.Config{}
45 proto.UnmarshalText(string(data), &config)
Serge Bazanski88b572d2018-10-05 16:35:01 -070046
Serge Bazanski28f49072018-10-06 11:31:18 +010047 gr := graph.New()
48 err = gr.LoadConfig(&config)
49 if err != nil {
50 glog.Exitf("Initial config load failed: %v", err)
Serge Bazanski88b572d2018-10-05 16:35:01 -070051 }
Serge Bazanski28f49072018-10-06 11:31:18 +010052
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010053 client.DefaultSchemes = []string{"https"}
54 nb := netbox.NewNetboxWithAPIKey(flagNetboxHost, flagNetboxAPIKey)
55 err = gr.FeedFromNetbox(ctx, nb)
56 if err != nil {
57 glog.Exitf("Initial netbox feed failed: %v", err)
58 }
Serge Bazanski46765082018-10-06 12:32:01 +010059
60 sconf := ServiceConfig{
61 DebugListen: flagDebugListen,
62 }
63 srv := NewService(gr, sconf)
64 srv.Run()
Serge Bazanski8d7843c2018-10-04 10:37:36 +010065}