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.
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
}
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.
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)
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)