Skip to content
Snippets Groups Projects
gnmi.go 1.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • Manuel Kieweg's avatar
    Manuel Kieweg committed
    package main
    
    import (
    
    	"code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi"
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	"code.fbi.h-da.de/cocsn/gosdn/nucleus"
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	schema "code.fbi.h-da.de/cocsn/yang-models/generated/arista"
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	"context"
    	"github.com/google/uuid"
    	log "github.com/sirupsen/logrus"
    )
    
    func main() {
    
    	log.SetLevel(log.DebugLevel)
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	sbi := &nucleus.AristaOC{}
    	transport := &nucleus.Gnmi{SetNode: sbi.SetNode()}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	device := nucleus.Device{
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		Device: &schema.Device{},
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		Config: nucleus.DeviceConfig{
    			Uuid:     uuid.New(),
    
    			Address:  "localhost:9339",
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    			Username: "admin",
    			Password: "arista",
    		},
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		Transport: transport,
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	}
    	pnd := nucleus.NewPND("openconfig", sbi)
    	if err := pnd.AddDevice(device); err != nil {
    		log.Fatal(err)
    	}
    
    
    	cfg := &gnmi.Config{
    		Addr:     device.Config.Address,
    		Password: device.Config.Password,
    		Username: device.Config.Username,
    	}
    	ctx := gnmi.NewContext(context.Background(), cfg)
    	ctx = context.WithValue(ctx, "config", cfg)
    
    	p := []string{"/interfaces/interface[name=en0]/state/name"}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	errors := 0
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		req, err := gnmi.NewGetRequest(gnmi.SplitPaths([]string{path}), "")
    		resp, err := nucleus.GetWithRequest(ctx, req)
    		if err != nil {
    			log.Debug(err)
    			errors++
    			break
    		}
    		if err := device.Add(resp); err != nil {
    			log.Debug(err)
    			errors++
    		}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	percentage := float64(errors) / float64(len(p)) * 100.0
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	log.Debugf("%v errors", errors)
    	log.Debugf("%v percent failed", percentage)