diff --git a/applications/rtdt-manager/rtdt-topology/rtdt-topology.go b/applications/rtdt-manager/rtdt-topology/rtdt-topology.go index 59458bae3c1a433bc43dcc9aec6bea1ac26c4156..46d75c2168661e9ea67d1ab29392dbb2a701a6d4 100644 --- a/applications/rtdt-manager/rtdt-topology/rtdt-topology.go +++ b/applications/rtdt-manager/rtdt-topology/rtdt-topology.go @@ -61,6 +61,23 @@ func (t *Topology) GetNodeByName(name string) *Node { return nil } +func (t *Topology) GetPortByUUID(UUID string) *Port { + for _, port := range t.Ports { + if port.ID == UUID { + return port + } + } + return nil +} +func (t *Topology) GetLinkByUUID(UUID string) *Link { + for _, link := range t.Links { + if link.ID == UUID { + return link + } + } + return nil +} + // Source for function: "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/link.go" // commit: 0264b698286b6cbb965d743078c681f8af55edf6 // GetLinkAsSliceOfStrings returns the link as a slice of strings for yaml representation. @@ -117,14 +134,12 @@ func (p *Port) Convert() *topoPb.Port { } } func (l *Link) Convert() *topoPb.Link { - return &topoPb.Link{ - Id: l.ID, - Name: l.Name, - SourceNode: l.SourceNode.Convert(), - SourcePort: l.SourcePort.Convert(), - TargetNode: l.TargetNode.Convert(), - TargetPort: l.TargetPort.Convert(), - - } + return &topoPb.Link{ + Id: l.ID, + Name: l.Name, + SourceNode: l.SourceNode.Convert(), + SourcePort: l.SourcePort.Convert(), + TargetNode: l.TargetNode.Convert(), + TargetPort: l.TargetPort.Convert(), + } } - diff --git a/applications/rtdt-manager/venv/venv.go b/applications/rtdt-manager/venv/venv.go index 8b182cd135ca729d03557190f4200cec7b1c08aa..d414651dabe1d3445847524d65ebe06984fd1cc6 100644 --- a/applications/rtdt-manager/venv/venv.go +++ b/applications/rtdt-manager/venv/venv.go @@ -317,6 +317,56 @@ func (v *VEnv) UploadTopology() error { return nil } +func (v *VEnv) RetrieveTopology() error { + conn := v.auth.GetConn() + ctx := v.auth.CreateContextWithAuthorization() + topoService := topoPb.NewTopologyServiceClient(conn) + topoResponse, err := topoService.GetTopology(ctx, &topoPb.GetTopologyRequest{Timestamp: util.Now()}) + if err != nil { + return fmt.Errorf("Couldn't retrieve topology from DB: %v\n", err) + } + sourceTopo := topoResponse.GetToplogy() + targetTopo := rtdt_topology.NewTopology() + for _, link := range sourceTopo.Links { + var n0 rtdt_topology.Node + var n1 rtdt_topology.Node + if targetTopo.GetNodeByUUID(link.SourceNode.Id) == nil { + snode := link.SourceNode + n1 = rtdt_topology.Node{ + ID: snode.Id, + Name: snode.Name, + Kind: "todo", + Image: "todo", // How to do this? + MgmtIpv4: "todo", + } + v.topology.Nodes = append(v.topology.Nodes, &n1) + } + if targetTopo.GetNodeByUUID(link.TargetNode.Id) == nil { + tnode := link.TargetNode + n1 = rtdt_topology.Node{ + ID: tnode.Id, + Name: tnode.Name, + Kind: "todo", + Image: "todo", // How to do this? + MgmtIpv4: "todo", + } + v.topology.Nodes = append(v.topology.Nodes, &n1) + } + if targetTopo.GetLinkByUUID(link.Id) == nil { + + var newLink = rtdt_topology.Link{ + ID: link.Id, + Name: link.Name, + SourceNode: &n0, + TargetNode: &n1, + } + v.topology.Links = append(v.topology.Links, &newLink) + } + } + + return nil +} + func getTypedValue(value string) *gnmi.TypedValue { if boolVal, err := strconv.ParseBool(value); err == nil { return &gnmi.TypedValue{Value: &gnmi.TypedValue_BoolVal{BoolVal: boolVal}}