move netbox feed to graph
diff --git a/Gopkg.lock b/Gopkg.lock
index cebc34e..ff902da 100644
--- a/Gopkg.lock
+++ b/Gopkg.lock
@@ -26,6 +26,14 @@
version = "v9"
[[projects]]
+ digest = "1:ffe9824d294da03b391f44e1ae8281281b4afc1bdaa9588c9097785e3af10cec"
+ name = "github.com/davecgh/go-spew"
+ packages = ["spew"]
+ pruneopts = "UT"
+ revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73"
+ version = "v1.1.1"
+
+[[projects]]
branch = "master"
digest = "1:08aeb20c1d146f9254126139f272865927b6db288145f88f0a3baacc24ddfa24"
name = "github.com/digitalocean/go-netbox"
@@ -293,7 +301,9 @@
analyzer-name = "dep"
analyzer-version = 1
input-imports = [
+ "github.com/davecgh/go-spew/spew",
"github.com/digitalocean/go-netbox/netbox",
+ "github.com/digitalocean/go-netbox/netbox/client",
"github.com/digitalocean/go-netbox/netbox/client/dcim",
"github.com/golang/glog",
"github.com/golang/protobuf/proto",
diff --git a/graph/graph.go b/graph/graph.go
index 35b1f23..1fdb5ab 100644
--- a/graph/graph.go
+++ b/graph/graph.go
@@ -1,10 +1,15 @@
package graph
import (
+ "context"
"fmt"
- confpb "code.hackerspace.pl/q3k/topo/proto/config"
+ "github.com/davecgh/go-spew/spew"
+ "github.com/digitalocean/go-netbox/netbox/client"
+ "github.com/digitalocean/go-netbox/netbox/client/dcim"
"github.com/golang/glog"
+
+ confpb "code.hackerspace.pl/q3k/topo/proto/config"
)
type MachinePort struct {
@@ -60,6 +65,9 @@
if machinepb.Name == "" {
return fmt.Errorf("empty machine name")
}
+ if loadedMachines[machinepb.Name] {
+ return fmt.Errorf("duplicate machine name: %v", machinepb.Name)
+ }
machine, ok := g.Machines[machinepb.Name]
if !ok {
machine = &Machine{
@@ -81,6 +89,12 @@
if switchpb.Name == "" {
return fmt.Errorf("empty switch name")
}
+ if loadedSwitches[switchpb.Name] {
+ return fmt.Errorf("duplicate switch name: %v", switchpb.Name)
+ }
+ if loadedMachines[switchpb.Name] {
+ return fmt.Errorf("switch name collides with machine name: %v", switchpb.Name)
+ }
sw, ok := g.Switches[switchpb.Name]
if !ok {
sw = &Switch{
@@ -121,3 +135,20 @@
return nil
}
+
+func (g *Graph) FeedFromNetbox(ctx context.Context, nb *client.NetBox) error {
+ for _, machine := range g.Machines {
+ req := &dcim.DcimInterfaceConnectionsListParams{
+ Device: &machine.Name,
+ Context: ctx,
+ }
+ res, err := nb.Dcim.DcimInterfaceConnectionsList(req, nil)
+ if err != nil {
+ return fmt.Errorf("while querying information about %q: %v", machine.Name, err)
+ }
+ for _, connection := range res.Payload.Results {
+ glog.Info(spew.Sdump(connection))
+ }
+ }
+ return nil
+}
diff --git a/main.go b/main.go
index ce79ca7..b97e171 100644
--- a/main.go
+++ b/main.go
@@ -1,13 +1,12 @@
package main
import (
+ "context"
"flag"
"io/ioutil"
- //"github.com/digitalocean/go-netbox/netbox"
- //"github.com/digitalocean/go-netbox/netbox/client"
- //"github.com/digitalocean/go-netbox/netbox/client/dcim"
-
+ "github.com/digitalocean/go-netbox/netbox"
+ "github.com/digitalocean/go-netbox/netbox/client"
"github.com/golang/glog"
"github.com/golang/protobuf/proto"
@@ -27,10 +26,12 @@
func main() {
flag.StringVar(&flagConfigPath, "config_path", "./topo.pb.text", "Text proto configuration of Topo (per config.proto)")
- flag.StringVar(&flagNetboxHost, "netbox_host", "nebtox.bgp.wtf", "Netbox host")
+ flag.StringVar(&flagNetboxHost, "netbox_host", "netbox.bgp.wtf", "Netbox host")
flag.StringVar(&flagNetboxAPIKey, "netbox_api_key", "", "Netbox API key")
flag.Parse()
+ ctx := context.Background()
+
data, err := ioutil.ReadFile(flagConfigPath)
if err != nil {
glog.Exitf("Could not read config: %v", err)
@@ -45,12 +46,10 @@
glog.Exitf("Initial config load failed: %v", err)
}
- //client.DefaultSchemes = []string{"https"}
- //nb := netbox.NewNetboxWithAPIKey(flagNetboxHost, flagNetboxAPIKey)
- //req := &dcim.DcimInterfaceConnectionsListParams{
- // Device: swag.String("bc01n01"),
- // Context: context.Background(),
- //}
- //res, err := nb.Dcim.DcimInterfaceConnectionsList(req, nil)
- //glog.Infof("%+v, %v", res, err)
+ client.DefaultSchemes = []string{"https"}
+ nb := netbox.NewNetboxWithAPIKey(flagNetboxHost, flagNetboxAPIKey)
+ err = gr.FeedFromNetbox(ctx, nb)
+ if err != nil {
+ glog.Exitf("Initial netbox feed failed: %v", err)
+ }
}