Skip to content
Snippets Groups Projects

Process response overhaul

Merged Ghost User requested to merge process-response-overhaul into develop
1 file
+ 63
3
Compare changes
  • Side-by-side
  • Inline
+ 63
3
@@ -2,11 +2,12 @@ package server
import (
"context"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"reflect"
"time"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"code.fbi.h-da.de/cocsn/gosdn/interfaces/device"
ppb "code.fbi.h-da.de/cocsn/api/go/gosdn/pnd"
@@ -16,6 +17,7 @@ import (
"code.fbi.h-da.de/cocsn/gosdn/nucleus/errors"
"github.com/google/uuid"
"github.com/openconfig/ygot/ygot"
log "github.com/sirupsen/logrus"
)
type pndServer struct {
@@ -25,6 +27,7 @@ type pndServer struct {
func (p pndServer) Get(ctx context.Context, request *ppb.GetRequest) (*ppb.GetResponse, error) {
pid, err := uuid.Parse(request.Pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
switch req := request.Request.(type) {
@@ -44,18 +47,22 @@ func (p pndServer) Get(ctx context.Context, request *ppb.GetRequest) (*ppb.GetRe
func handleGetPnd(pid uuid.UUID) (*ppb.GetResponse, error) {
pnd, err := pndc.GetPND(pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
onds, err := fillOnds(pnd, true)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
sbis, err := fillSbis(pnd, true)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
changes, err := fillChanges(pnd, true)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
@@ -75,10 +82,12 @@ func handleGetPnd(pid uuid.UUID) (*ppb.GetResponse, error) {
func handleGetSbi(pid uuid.UUID, req *ppb.GetRequest_Sbi) (*ppb.GetResponse, error) {
pnd, err := pndc.GetPND(pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
sbis, err := fillSbis(pnd, req.Sbi.GetAll(), req.Sbi.Sid...)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.GetResponse{
@@ -92,6 +101,7 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) {
for i, id := range sid {
parsed, err := uuid.Parse(id)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
UUIDs[i] = parsed
@@ -102,10 +112,12 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) {
func handleGetOnd(pid uuid.UUID, req *ppb.GetRequest_Ond) (*ppb.GetResponse, error) {
pnd, err := pndc.GetPND(pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
onds, err := fillOnds(pnd, req.Ond.All, req.Ond.Did...)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.GetResponse{
@@ -117,10 +129,12 @@ func handleGetOnd(pid uuid.UUID, req *ppb.GetRequest_Ond) (*ppb.GetResponse, err
func handleGetChange(pid uuid.UUID, req *ppb.GetRequest_Change) (*ppb.GetResponse, error) {
pnd, err := pndc.GetPND(pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
changes, err := fillChanges(pnd, req.Change.All, req.Change.Cuid...)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.GetResponse{
@@ -146,6 +160,7 @@ func fillSbis(pnd networkdomain.NetworkDomain, all bool, sid ...string) ([]*spb.
}
sbiList, err = stringToUUID(sid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
@@ -153,6 +168,7 @@ func fillSbis(pnd networkdomain.NetworkDomain, all bool, sid ...string) ([]*spb.
for i, id := range sbiList {
sbi, err := sbiStore.GetSBI(id)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
sbis[i] = &spb.SouthboundInterface{
@@ -179,6 +195,7 @@ func fillOnds(pnd networkdomain.NetworkDomain, all bool, did ...string) ([]*ppb.
}
ondList, err = stringToUUID(did)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
@@ -187,11 +204,13 @@ func fillOnds(pnd networkdomain.NetworkDomain, all bool, did ...string) ([]*ppb.
for i, id := range ondList {
d, err := pnd.GetDevice(id.String())
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
cfg := ygot.GNMINotificationsConfig{}
dev, err := ygot.TogNMINotifications(d.(device.Device).Model(), time.Now().UnixNano(), cfg)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
onds[i] = &ppb.OrchestratedNetworkingDevice{
@@ -220,6 +239,7 @@ func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*
}
changeList, err = stringToUUID(cuid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
@@ -228,6 +248,7 @@ func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*
for i, ch := range changeList {
c, err := pnd.GetChange(ch)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
change, ok := c.(*nucleus.Change)
@@ -250,24 +271,29 @@ func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*
func (p pndServer) Set(ctx context.Context, request *ppb.SetRequest) (*ppb.SetResponse, error) {
pid, err := uuid.Parse(request.Pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
pnd, err := pndc.GetPND(pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
ondResp, err := handleSetOnd(pnd, request.Ond)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
changeResp, err := handleSetChange(pnd, request.Change)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
changeRequestResp, err := handleChangeRequest(pnd, request.ChangeRequest)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.SetResponse{
@@ -285,10 +311,12 @@ func handleSetOnd(pnd networkdomain.NetworkDomain, req []*ppb.SetOnd) (*ppb.SetR
for _, r := range req {
sid, err := uuid.Parse(r.Sbi.Id)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
if err := pnd.AddDevice(r.DeviceName, r.TransportOption, sid); err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
return &ppb.SetResponse{
@@ -308,15 +336,18 @@ func handleSetChange(pnd networkdomain.NetworkDomain, req []*ppb.SetChange) (*pp
for _, r := range req {
cuid, err := uuid.Parse(r.Cuid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
switch r.Op {
case ppb.SetChange_COMMIT:
if err := pnd.Commit(cuid); err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
case ppb.SetChange_CONFIRM:
if err := pnd.Confirm(cuid); err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
default:
@@ -336,9 +367,11 @@ func handleChangeRequest(pnd networkdomain.NetworkDomain, req []*ppb.ChangeReque
for _, r := range req {
did, err := uuid.Parse(r.Id)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
if err := pnd.ChangeOND(did, r.ApiOp, r.Path, r.Value); err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
@@ -347,3 +380,30 @@ func handleChangeRequest(pnd networkdomain.NetworkDomain, req []*ppb.ChangeReque
Status: ppb.SetResponse_OK,
}, nil
}
func (p pndServer) Delete(ctx context.Context, req *ppb.DeleteRequest) (*ppb.DeleteResponse, error) {
pid, err := uuid.Parse(req.Pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
pnd, err := pndc.GetPND(pid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
did, err := uuid.Parse(req.Uuid)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
if err := pnd.RemoveDevice(did); err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.DeleteResponse{
Timestamp: time.Now().UnixNano(),
Status: ppb.DeleteResponse_OK,
}, nil
}
Loading