Topo API
The github.com/onosproject/onos-ric-sdk-go/pkg/topo
provides a high level interface for applications to interact
with onos-topo subsystem. The current interface allows applications to Create, Update, Get, and List topology entities and their relations and Watch topology changes.
Create A Topo Client
The following code snippet shows how to create an instance of topo SDK client:
import (
toposdk "github.com/onosproject/onos-ric-sdk-go/pkg/topo"
topoapi "github.com/onosproject/onos-api/go/onos/topo"
)
topoClient, err := toposdk.NewClient()
if err != nil {
return err
}
Create or Update Topo Objects
The current SDK provides Create and Update methods which allows creating new topology objects or updating existing ones. As an example, the following code snippet shows how to create an E2 node entity object using Create method:
...
object: = &topoapi.Object {
ID: e2NodeID,
Type: topoapi.Object_ENTITY,
Obj: & topoapi.Object_Entity {
Entity: & topoapi.Entity {
KindID: topoapi.ID(topoapi.E2NODE),
},
},
Aspects: make(map[string]*gogotypes.Any),
Labels: map[string] string {},
}
// Define E2 node aspects
e2NodeAspects := &topoapi.E2Node{
Servicemodels: <Service models Information> // Service models information
}
err := object.SetAspect(e2NodeAspects)
err = topoClient.Create(context.TODO(), object)
To update an existing Object, Get method can be used to retrieve an existing object and then after updating its fields, the modified topo Object should be passed to Update method.
Get or List Topo Objects
To get a topo object, the topology object ID should be passed to Get method as follows:
topoObject, err := topoClient.Get(context.TODO(), topoObjectID)
List method can be used to obtain a collection of objects. List method provides Topology filters option to allow listing specific entities or relations. For example, the following code snippet lists all of Control relations in topo
controlRelationFilter := &topoapi.Filters{
KindFilter: &topoapi.Filter{
Filter: &topoapi.Filter_Equal_{
Equal_: &topoapi.EqualFilter{
Value: topoapi.CONTROLS,
},
},
},
}
objects, err := topoClient.List(context.TODO(), controlRelationFilter)
Watch Topo Changes
Current SDK provides a Watch method that allows applications to monitor topology changes using Go channels. Watch method provides Topology filters option that allows monitoring changes for specific entities or relations. For example, the following code snippet shows how to use Watch method to monitor Control relations
controlRelationFilter := &topoapi.Filters{
KindFilter: &topoapi.Filter{
Filter: &topoapi.Filter_Equal_{
Equal_: &topoapi.EqualFilter{
Value: topoapi.CONTROLS,
},
},
},
}
ch := make(chan topoapi.Event)
err := topoClient.Watch(context.TODO(), ch, toposdk.WithWatchFilters(controlRelationFilter))
for event := range ch {
// Process each event
}
// Close the channel when stopping
close (ch)