Skip to content
Snippets Groups Projects
Commit cdcb0bb2 authored by Manuel Kieweg's avatar Manuel Kieweg
Browse files

cherry pick delete api op

parent 35367b42
Branches
Tags
8 merge requests!246Develop,!245Develop into Master,!244Master into develop2 into master,!219Draft: Testing,!214Test pipelines,!195DO NOT MERGE 2,!194DO NOT MERGE! just for testing,!138Develop
......@@ -5,6 +5,9 @@ import (
"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"
......@@ -14,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 {
......@@ -23,7 +27,8 @@ 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 {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
switch req := request.Request.(type) {
case *ppb.GetRequest_Pnd:
......@@ -42,19 +47,23 @@ 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 {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
onds, err := fillOnds(pnd, true)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
sbis, err := fillSbis(pnd, true)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
changes, err := fillChanges(pnd, true)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.GetResponse{
......@@ -73,11 +82,13 @@ 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 {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
sbis, err := fillSbis(pnd, req.Sbi.GetAll(), req.Sbi.Sid...)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.GetResponse{
Timestamp: time.Now().UnixNano(),
......@@ -90,7 +101,8 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) {
for i, id := range sid {
parsed, err := uuid.Parse(id)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
UUIDs[i] = parsed
}
......@@ -100,11 +112,13 @@ 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 {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
onds, err := fillOnds(pnd, req.Ond.All, req.Ond.Did...)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.GetResponse{
Timestamp: time.Now().UnixNano(),
......@@ -115,11 +129,13 @@ 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 {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
changes, err := fillChanges(pnd, req.Change.All, req.Change.Cuid...)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.GetResponse{
Timestamp: time.Now().UnixNano(),
......@@ -144,14 +160,16 @@ func fillSbis(pnd networkdomain.NetworkDomain, all bool, sid ...string) ([]*spb.
}
sbiList, err = stringToUUID(sid)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
sbis := make([]*spb.SouthboundInterface, len(sbiList))
for i, id := range sbiList {
sbi, err := sbiStore.GetSBI(id)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
sbis[i] = &spb.SouthboundInterface{
Id: id.String(),
......@@ -177,7 +195,8 @@ func fillOnds(pnd networkdomain.NetworkDomain, all bool, did ...string) ([]*ppb.
}
ondList, err = stringToUUID(did)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
......@@ -185,12 +204,14 @@ func fillOnds(pnd networkdomain.NetworkDomain, all bool, did ...string) ([]*ppb.
for i, id := range ondList {
d, err := pnd.GetDevice(id.String())
if err != nil {
return nil, err
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 {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
onds[i] = &ppb.OrchestratedNetworkingDevice{
Id: id.String(),
......@@ -218,7 +239,8 @@ func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*
}
changeList, err = stringToUUID(cuid)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
......@@ -226,7 +248,8 @@ func fillChanges(pnd networkdomain.NetworkDomain, all bool, cuid ...string) ([]*
for i, ch := range changeList {
c, err := pnd.GetChange(ch)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
change, ok := c.(*nucleus.Change)
if !ok {
......@@ -248,25 +271,30 @@ 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 {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
pnd, err := pndc.GetPND(pid)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
ondResp, err := handleSetOnd(pnd, request.Ond)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
changeResp, err := handleSetChange(pnd, request.Change)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
changeRequestResp, err := handleChangeRequest(pnd, request.ChangeRequest)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &ppb.SetResponse{
Timestamp: time.Now().UnixNano(),
......@@ -283,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 {
return nil, err
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{
......@@ -306,16 +336,19 @@ func handleSetChange(pnd networkdomain.NetworkDomain, req []*ppb.SetChange) (*pp
for _, r := range req {
cuid, err := uuid.Parse(r.Cuid)
if err != nil {
return nil, err
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 {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
case ppb.SetChange_CONFIRM:
if err := pnd.Confirm(cuid); err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
default:
return nil, &errors.ErrInvalidParameters{
......@@ -334,10 +367,12 @@ func handleChangeRequest(pnd networkdomain.NetworkDomain, req []*ppb.ChangeReque
for _, r := range req {
did, err := uuid.Parse(r.Id)
if err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
if err := pnd.ChangeOND(did, r.ApiOp, r.Path, r.Value); err != nil {
return nil, err
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
return &ppb.SetResponse{
......@@ -345,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
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment