blob: b97e171806cbfdf28b81114d1220d4225d70ec81 [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 Bazanski8d7843c2018-10-04 10:37:36 +010021)
22
23func init() {
24 flag.Set("logtostderr", "true")
25}
26
27func main() {
28 flag.StringVar(&flagConfigPath, "config_path", "./topo.pb.text", "Text proto configuration of Topo (per config.proto)")
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010029 flag.StringVar(&flagNetboxHost, "netbox_host", "netbox.bgp.wtf", "Netbox host")
Serge Bazanski88b572d2018-10-05 16:35:01 -070030 flag.StringVar(&flagNetboxAPIKey, "netbox_api_key", "", "Netbox API key")
Serge Bazanski8d7843c2018-10-04 10:37:36 +010031 flag.Parse()
32
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010033 ctx := context.Background()
34
Serge Bazanski8d7843c2018-10-04 10:37:36 +010035 data, err := ioutil.ReadFile(flagConfigPath)
36 if err != nil {
37 glog.Exitf("Could not read config: %v", err)
38 }
39
40 config := confpb.Config{}
41 proto.UnmarshalText(string(data), &config)
Serge Bazanski88b572d2018-10-05 16:35:01 -070042
Serge Bazanski28f49072018-10-06 11:31:18 +010043 gr := graph.New()
44 err = gr.LoadConfig(&config)
45 if err != nil {
46 glog.Exitf("Initial config load failed: %v", err)
Serge Bazanski88b572d2018-10-05 16:35:01 -070047 }
Serge Bazanski28f49072018-10-06 11:31:18 +010048
Serge Bazanski2c6c6d12018-10-06 11:55:04 +010049 client.DefaultSchemes = []string{"https"}
50 nb := netbox.NewNetboxWithAPIKey(flagNetboxHost, flagNetboxAPIKey)
51 err = gr.FeedFromNetbox(ctx, nb)
52 if err != nil {
53 glog.Exitf("Initial netbox feed failed: %v", err)
54 }
Serge Bazanski8d7843c2018-10-04 10:37:36 +010055}