blob: 5802ee1fb77c916826c369544544ab8e4ad4cf08 [file] [log] [blame]
Serge Bazanski8d7843c2018-10-04 10:37:36 +01001package main
2
3import (
Serge Bazanski2c6c6d12018-10-06 11:55:04 +01004 "context"
Serge Bazanski8d7843c2018-10-04 10:37:36 +01005 "flag"
6 "io/ioutil"
7
Serge Bazanski2c6c6d12018-10-06 11:55:04 +01008 "github.com/digitalocean/go-netbox/netbox"
9 "github.com/digitalocean/go-netbox/netbox/client"
Serge Bazanski8d7843c2018-10-04 10:37:36 +010010 "github.com/golang/glog"
11 "github.com/golang/protobuf/proto"
12
Serge Bazanski28f49072018-10-06 11:31:18 +010013 "code.hackerspace.pl/q3k/topo/graph"
Serge Bazanski8d7843c2018-10-04 10:37:36 +010014 confpb "code.hackerspace.pl/q3k/topo/proto/config"
15)
16
17var (
Serge Bazanski88b572d2018-10-05 16:35:01 -070018 flagConfigPath string
19 flagNetboxHost string
20 flagNetboxAPIKey string
Serge Bazanski46765082018-10-06 12:32:01 +010021 flagDebugListen string
Serge Bazanski8d7843c2018-10-04 10:37:36 +010022)
23
24func init() {
25 flag.Set("logtostderr", "true")
26}
27
28func main() {
29 flag.StringVar(&flagConfigPath, "config_path", "./topo.pb.text", "Text proto configuration of Topo (per config.proto)")
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010030 flag.StringVar(&flagNetboxHost, "netbox_host", "netbox.bgp.wtf", "Netbox host")
Serge Bazanski88b572d2018-10-05 16:35:01 -070031 flag.StringVar(&flagNetboxAPIKey, "netbox_api_key", "", "Netbox API key")
Serge Bazanski46765082018-10-06 12:32:01 +010032 flag.StringVar(&flagDebugListen, "debug_listen", "127.0.0.1:42001", "Debug HTTP listen address")
Serge Bazanski8d7843c2018-10-04 10:37:36 +010033 flag.Parse()
34
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010035 ctx := context.Background()
36
Serge Bazanski8d7843c2018-10-04 10:37:36 +010037 data, err := ioutil.ReadFile(flagConfigPath)
38 if err != nil {
39 glog.Exitf("Could not read config: %v", err)
40 }
41
42 config := confpb.Config{}
43 proto.UnmarshalText(string(data), &config)
Serge Bazanski88b572d2018-10-05 16:35:01 -070044
Serge Bazanski28f49072018-10-06 11:31:18 +010045 gr := graph.New()
46 err = gr.LoadConfig(&config)
47 if err != nil {
48 glog.Exitf("Initial config load failed: %v", err)
Serge Bazanski88b572d2018-10-05 16:35:01 -070049 }
Serge Bazanski28f49072018-10-06 11:31:18 +010050
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010051 client.DefaultSchemes = []string{"https"}
52 nb := netbox.NewNetboxWithAPIKey(flagNetboxHost, flagNetboxAPIKey)
53 err = gr.FeedFromNetbox(ctx, nb)
54 if err != nil {
55 glog.Exitf("Initial netbox feed failed: %v", err)
56 }
Serge Bazanski46765082018-10-06 12:32:01 +010057
58 sconf := ServiceConfig{
59 DebugListen: flagDebugListen,
60 }
61 srv := NewService(gr, sconf)
62 srv.Run()
Serge Bazanski8d7843c2018-10-04 10:37:36 +010063}