Skip to content
Snippets Groups Projects
main.go 3.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • package main
    
    import (
    	"encoding/json"
    	"flag"
    	"fmt"
    	"os"
    	"time"
    
    
    	"code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
    
    	"code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
    	"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/gosdnutil"
    	rtdt_auth "code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/rtdt-auth"
    	"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/sdnconfig"
    
    	"code.fbi.h-da.de/danet/gosdn/applications/rtdt-manager/util"
    
    	"google.golang.org/grpc"
    	"google.golang.org/grpc/credentials/insecure"
    )
    
    
    func SetupGosdnConn() (*pnd.PrincipalNetworkDomain, *rtdt_auth.RtdtAuth) {
    
    	dialOption := grpc.WithTransportCredentials(insecure.NewCredentials())
    	conn, err := grpc.NewClient("172.100.0.5:55055", dialOption, grpc.WithDefaultCallOptions())
    	if err != nil {
    		fmt.Printf("Error: Failed to create connection to gosdn: %v\n", err)
    
    	} else {
    		fmt.Printf("Successfully created connection to gosdn\n")
    	}
    	testauth := rtdt_auth.NewRtdtAuth("admin", "172.100.0.5:55055", "TestPassword", conn)
    	// Get PND of gosdn in created venv
    	var gosdn_pnd *pnd.PrincipalNetworkDomain
    	for {
    		gosdn_pnd, err = gosdnutil.FetchPnd(conn, testauth)
    		if err == nil {
    			break
    		}
    		fmt.Printf("Couldn't retrieve PND, retrying in 2 seconds..\n")
    		time.Sleep(time.Second * 2)
    	}
    
    func GetMne(name string) {
    	gosdn_pnd, testauth := SetupGosdnConn()
    	if gosdn_pnd == nil || testauth == nil {
    		fmt.Println("ERROR: couldn't establish connection to gosdn")
    	}
    	getAllReq := &networkelement.GetAllRequest{
    		Timestamp: util.Now(),
    		Pid:       gosdn_pnd.GetId(),
    	}
    	mneServiceClient := networkelement.NewNetworkElementServiceClient(testauth.GetConn())
    	response, err := mneServiceClient.GetAll(testauth.CreateContextWithAuthorization(), getAllReq)
    	if err != nil {
    		fmt.Printf("Bad thing happened. Bad thing: %v\n", err)
    		return
    	}
    	for i, mne := range response.GetMne() {
    		fmt.Printf("Mne model %d: %s\n", i, mne.String())
    	}
    }
    
    
    func Download() {
    	gosdn_pnd, testauth := SetupGosdnConn()
    	if gosdn_pnd == nil || testauth == nil {
    		fmt.Println("ERROR: couldn't establish connection to gosdn")
    	}
    	newconfig := sdnconfig.NewSdnConfig()
    	newconfig.RetrieveSdnConfig(gosdn_pnd.Id, *testauth)
    
    	data, err := json.MarshalIndent(newconfig, "", "  ")
    
    	if err != nil {
    		fmt.Println("Failed to marshall data")
    		return
    	}
    
    
    	fmt.Println("Successully downloaded config:", string(data))
    }
    
    func Upload(sdnConfigPath string) {
    	gosdn_pnd, testauth := SetupGosdnConn()
    	testconfig := sdnconfig.NewSdnConfig()
    	wd, err := os.Getwd()
    	fmt.Println("Getwd returns:", wd)
    	err = testconfig.LoadSdnConfig(sdnConfigPath)
    	if err != nil {
    		fmt.Println("Couldn't load config, err:", err)
    	}
    	testdata, err := json.Marshal(testconfig)
    
    	if err != nil {
    		fmt.Println("Failed to marshall data")
    		return
    	}
    
    	fmt.Println("Data to be uploaded:", string(testdata))
    
    	testconfig.UploadSdnConfig(gosdn_pnd.Id, *testauth)
    
    
    // This is for testing sdnconfig files
    func main() {
    	var sdnConfigPath string
    	var mode string
    	flag.StringVar(&mode, "mode", "download", "Whether to download config or upload config")
    	flag.StringVar(&sdnConfigPath, "sdnconfig", "applications/rtdt-manager/data/sample_venv_sdnconfig.json", "SdnConfig file (json)")
    	flag.Parse()
    
    	switch mode {
    	case "download":
    		fmt.Println("Mode: Download")
    		Download()
    		return
    	case "upload":
    		fmt.Println("Mode: Upload")
    		Upload(sdnConfigPath)
    		return
    
    	case "get":
    		fmt.Println("Mode: Get")
    		GetMne("gnmi-target-switch0")
    
    	default:
    		fmt.Println("Unknown Mode!")
    		return
    	}
    }