Newer
Older
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)
}
return gosdn_pnd, testauth
}
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")