Add initial support for provisioning and removing services, getting service data
Change-Id: Ie49206d788a202e70a8d64f083c3f85b92ced8fb
diff --git a/internal/core/adapter.go b/internal/core/adapter.go
index 6a59650..5e19753 100644
--- a/internal/core/adapter.go
+++ b/internal/core/adapter.go
@@ -30,13 +30,13 @@
type VolthaYangAdapter struct {
volthaNbiClient *clients.VolthaNbiClient
- oltAppClient *clients.OltAppClient
+ onosClient *clients.OnosClient
}
-func NewVolthaYangAdapter(nbiClient *clients.VolthaNbiClient, oltClient *clients.OltAppClient) *VolthaYangAdapter {
+func NewVolthaYangAdapter(nbiClient *clients.VolthaNbiClient, onosClient *clients.OnosClient) *VolthaYangAdapter {
return &VolthaYangAdapter{
volthaNbiClient: nbiClient,
- oltAppClient: oltClient,
+ onosClient: onosClient,
}
}
@@ -58,7 +58,7 @@
if err != nil {
return nil, fmt.Errorf("get-onu-ports-failed: %v", err)
}
- logger.Debugw(ctx, "get-ports-success", log.Fields{"deviceId": device.Id, "ports": ports})
+ logger.Debugw(ctx, "get-onu-ports-success", log.Fields{"deviceId": device.Id, "ports": ports})
portsItems, err := translateOnuPorts(device.Id, ports)
if err != nil {
@@ -75,3 +75,114 @@
return items, nil
}
+
+func (t *VolthaYangAdapter) GetVlans(ctx context.Context) ([]YangItem, error) {
+ services, err := t.onosClient.GetProgrammedSubscribers()
+ if err != nil {
+ return nil, fmt.Errorf("get-programmed-subscribers-failed: %v", err)
+ }
+ logger.Debugw(ctx, "get-programmed-subscribers-success", log.Fields{"services": services})
+
+ //No need for other requests if there are no services
+ if len(services) == 0 {
+ return []YangItem{}, nil
+ }
+
+ ports, err := t.onosClient.GetPorts()
+ if err != nil {
+ return nil, fmt.Errorf("get-onos-ports-failed: %v", err)
+ }
+ logger.Debugw(ctx, "get-onos-ports-success", log.Fields{"ports": ports})
+
+ items, err := translateVlans(services, ports)
+ if err != nil {
+ return nil, fmt.Errorf("cannot-translate-vlans: %v", err)
+ }
+
+ return items, nil
+}
+
+func (t *VolthaYangAdapter) GetBandwidthProfiles(ctx context.Context) ([]YangItem, error) {
+ services, err := t.onosClient.GetProgrammedSubscribers()
+ if err != nil {
+ return nil, fmt.Errorf("get-programmed-subscribers-failed: %v", err)
+ }
+ logger.Debugw(ctx, "get-programmed-subscribers-success", log.Fields{"services": services})
+
+ //No need for other requests if there are no services
+ if len(services) == 0 {
+ return []YangItem{}, nil
+ }
+
+ bwProfilesMap := map[string]bool{}
+ bwProfiles := []clients.BandwidthProfile{}
+
+ for _, service := range services {
+ //Get information on downstream bw profile if new
+ if _, ok := bwProfilesMap[service.TagInfo.DownstreamBandwidthProfile]; !ok {
+ bw, err := t.onosClient.GetBandwidthProfile(service.TagInfo.DownstreamBandwidthProfile)
+ if err != nil {
+ return nil, fmt.Errorf("get-bw-profile-failed: %s %v", service.TagInfo.DownstreamBandwidthProfile, err)
+ }
+ logger.Debugw(ctx, "get-bw-profile-success", log.Fields{"bwProfile": bw})
+
+ bwProfiles = append(bwProfiles, *bw)
+ bwProfilesMap[service.TagInfo.DownstreamBandwidthProfile] = true
+ }
+
+ //Get information on upstream bw profile if new
+ if _, ok := bwProfilesMap[service.TagInfo.UpstreamBandwidthProfile]; !ok {
+ bw, err := t.onosClient.GetBandwidthProfile(service.TagInfo.UpstreamBandwidthProfile)
+ if err != nil {
+ return nil, fmt.Errorf("get-bw-profile-failed: %s %v", service.TagInfo.UpstreamBandwidthProfile, err)
+ }
+ logger.Debugw(ctx, "get-bw-profile-success", log.Fields{"bwProfile": bw})
+
+ bwProfiles = append(bwProfiles, *bw)
+ bwProfilesMap[service.TagInfo.UpstreamBandwidthProfile] = true
+ }
+ }
+
+ items, err := translateBandwidthProfiles(bwProfiles)
+ if err != nil {
+ return nil, fmt.Errorf("cannot-translate-bandwidth-profiles: %v", err)
+ }
+
+ return items, nil
+}
+
+func (t *VolthaYangAdapter) GetServices(ctx context.Context) ([]YangItem, error) {
+ services, err := t.onosClient.GetProgrammedSubscribers()
+ if err != nil {
+ return nil, fmt.Errorf("get-programmed-subscribers-failed: %v", err)
+ }
+ logger.Debugw(ctx, "get-programmed-subscribers-success", log.Fields{"services": services})
+
+ //No need for other requests if there are no services
+ if len(services) == 0 {
+ return []YangItem{}, nil
+ }
+
+ ports, err := t.onosClient.GetPorts()
+ if err != nil {
+ return nil, fmt.Errorf("get-onos-ports-failed: %v", err)
+ }
+ logger.Debugw(ctx, "get-onos-ports-success", log.Fields{"ports": ports})
+
+ items, err := translateServices(services, ports)
+ if err != nil {
+ return nil, fmt.Errorf("cannot-translate-services: %v", err)
+ }
+
+ return items, nil
+}
+
+func (t *VolthaYangAdapter) ProvisionService(portName string, sTag string, cTag string, technologyProfileId string) error {
+ _, err := t.onosClient.ProvisionService(portName, sTag, cTag, technologyProfileId)
+ return err
+}
+
+func (t *VolthaYangAdapter) RemoveService(portName string, sTag string, cTag string, technologyProfileId string) error {
+ _, err := t.onosClient.RemoveService(portName, sTag, cTag, technologyProfileId)
+ return err
+}