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
No related branches found
No related tags found
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