Newer
Older
package server
import (
"context"
"time"
pb "code.fbi.h-da.de/cocsn/api/go/gosdn/core"
ppb "code.fbi.h-da.de/cocsn/api/go/gosdn/pnd"
spb "code.fbi.h-da.de/cocsn/api/go/gosdn/southbound"
"code.fbi.h-da.de/cocsn/gosdn/nucleus"
"github.com/google/uuid"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
type core struct {
pb.UnimplementedCoreServer
}
func (s core) Get(ctx context.Context, request *pb.GetRequest) (*pb.GetResponse, error) {
var pndList []uuid.UUID
switch request.All {
case true:
pndList = pndc.UUIDs()
default:
var err error
pndList, err = stringToUUID(request.Pid)
if err != nil {
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
pnds := make([]*ppb.PrincipalNetworkDomain, len(pndList))
for i, id := range pndList {
pnd, err := pndc.Get(id)
if err != nil {
return nil, err
}
ond, err := fillOnds(pnd, true)
if err != nil {
return nil, status.Errorf(codes.Aborted, "%v", err)
}
sbi, err := fillSbis(pnd, true)
if err != nil {
return nil, status.Errorf(codes.Aborted, "%v", err)
}
pnds[i] = &ppb.PrincipalNetworkDomain{
Id: pnd.ID().String(),
Name: pnd.GetName(),
Description: pnd.GetDescription(),
Ond: ond,
Sbi: sbi,
}
}
return &pb.GetResponse{
Timestamp: time.Now().UnixNano(),
Pnd: pnds,
}, nil
}
func (s core) Set(ctx context.Context, request *pb.SetRequest) (*pb.SetResponse, error) {
for _, r := range request.Pnd {
sbi := nucleus.NewSBI(spb.Type_OPENCONFIG)
pnd, err := nucleus.NewPND(r.Name, r.Description, uuid.New(), sbi)
if err != nil {
return nil, status.Errorf(codes.Aborted, "%v", err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
}
return &pb.SetResponse{
Timestamp: time.Now().UnixNano(),
Status: pb.SetResponse_OK,
}, nil
}