diff --git a/controller/nucleus/networkElement.go b/controller/nucleus/networkElement.go index 30abfb4584d0768080aa3ad6271bcb6e2c66df90..6546007778ca4852b3cebc7e40970cca094d6bdc 100644 --- a/controller/nucleus/networkElement.go +++ b/controller/nucleus/networkElement.go @@ -178,7 +178,7 @@ func (d *CsbiNetworkElement) GetModel() ([]byte, error) { // GetModelAsFilteredCopy returns the ygot representation of the Network // Element, but as copy with read-only fields removed. -// TODO: extend plugin to provide a filtered copy of the model +// TODO: extend plugin to provide a filtered copy of the model. func (n *CsbiNetworkElement) GetModelAsFilteredCopy() (ygot.GoStruct, error) { //filteredModelCopy, err := createFilteredCopy(n) //if err != nil { @@ -345,12 +345,13 @@ func (d *CommonNetworkElement) GetModelAsString() (string, error) { return string(byteModel), err } -func (n *CommonNetworkElement) getYgotEmitJSONConfig() *ygot.EmitJSONConfig { - return &ygot.EmitJSONConfig{ - Format: ygot.RFC7951, - Indent: "", - SkipValidation: true, - RFC7951Config: &ygot.RFC7951JSONConfig{ - AppendModuleName: true, - }} -} +//TODO: check if this can be removed +//func (n *CommonNetworkElement) getYgotEmitJSONConfig() *ygot.EmitJSONConfig { +// return &ygot.EmitJSONConfig{ +// Format: ygot.RFC7951, +// Indent: "", +// SkipValidation: true, +// RFC7951Config: &ygot.RFC7951JSONConfig{ +// AppendModuleName: true, +// }} +//} diff --git a/controller/nucleus/principalNetworkDomain.go b/controller/nucleus/principalNetworkDomain.go index c2afd7b55a523a43ad6faeda80bb8bfb74b6f215..a4db24b601ff7a67b32ff972517fd2281cd6baa0 100644 --- a/controller/nucleus/principalNetworkDomain.go +++ b/controller/nucleus/principalNetworkDomain.go @@ -15,7 +15,6 @@ import ( "code.fbi.h-da.de/danet/gosdn/controller/nucleus/types" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/util" "go.mongodb.org/mongo-driver/bson" - "golang.org/x/sync/errgroup" cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/csbi" rpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" @@ -462,7 +461,6 @@ func (pnd *pndImplementation) ensureIntendedConfigurationIsAppliedOnNetworkEleme // ChangeMNE creates a change from the provided Operation, path and value. // The Change is Pending and times out after the specified timeout period. func (pnd *pndImplementation) ChangeMNE(duid uuid.UUID, operation ppb.ApiOperation, path string, value ...string) (uuid.UUID, error) { - mne, err := pnd.networkElementService.Get(store.Query{ ID: duid, }) @@ -613,130 +611,132 @@ func (pnd *pndImplementation) handleCsbiDeletion(mne networkelement.NetworkEleme return nil } -func (pnd *pndImplementation) handleCsbiEnrolment(name string, opt *tpb.TransportOption) (uuid.UUID, error) { - g := new(errgroup.Group) - ctx, cancel := context.WithTimeout(context.Background(), time.Minute*5) - defer cancel() - req := &cpb.CreateRequest{ - Timestamp: time.Now().UnixNano(), - TransportOption: []*tpb.TransportOption{opt}, - } - resp, err := pnd.csbiClient.Create(ctx, req) - if err != nil { - return uuid.Nil, err - } - // the slice only contains one deployment - var mneID uuid.UUID - for _, deployment := range resp.Deployments { - dCopy := deployment - g.Go(func() error { - mneID, err = pnd.createCsbiNetworkElement(ctx, name, dCopy, opt) - if err != nil { - return err - } - return nil - }) - } - err = g.Wait() - if err != nil { - return uuid.Nil, err - } - - return mneID, nil -} - +//TODO: can probably be removed +//func (pnd *pndImplementation) handleCsbiEnrolment(name string, opt *tpb.TransportOption) (uuid.UUID, error) { +// g := new(errgroup.Group) +// ctx, cancel := context.WithTimeout(context.Background(), time.Minute*5) +// defer cancel() +// req := &cpb.CreateRequest{ +// Timestamp: time.Now().UnixNano(), +// TransportOption: []*tpb.TransportOption{opt}, +// } +// resp, err := pnd.csbiClient.Create(ctx, req) +// if err != nil { +// return uuid.Nil, err +// } +// // the slice only contains one deployment +// var mneID uuid.UUID +// for _, deployment := range resp.Deployments { +// dCopy := deployment +// g.Go(func() error { +// mneID, err = pnd.createCsbiNetworkElement(ctx, name, dCopy, opt) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// err = g.Wait() +// if err != nil { +// return uuid.Nil, err +// } +// +// return mneID, nil +//} + +//TODO: can probably be removed // createCsbiNetworkElement is a helper method for cSBI network element creation. The method // waits for a SYN (which indicates that the cSBI is running and addressable) // of the commissioned cSBI and creates the network element within the controller. -func (pnd *pndImplementation) createCsbiNetworkElement( - ctx context.Context, - name string, - deployment *cpb.Deployment, - opt *tpb.TransportOption, -) (uuid.UUID, error) { - //id, err := uuid.Parse(deployment.Id) - //if err != nil { - // return uuid.Nil, err - //} - //ch := make(chan networkelement.Details, 1) - //pnd.callback(id, ch) - //defer pnd.callback(id, nil) - //defer close(ch) - //tickatus := time.NewTicker(time.Minute * 1) - //defer tickatus.Stop() - //select { - //case <-tickatus.C: - // log.WithFields(log.Fields{ - // "id": deployment.Id, - // "err": ctx.Err(), - // }).Error("csbi handshake timed out") - //case mneDetails := <-ch: - // log.Infof("syn from csbi %v", mneDetails.ID) - // id, err := uuid.Parse(mneDetails.ID) - // if err != nil { - // return uuid.Nil, err - // } - // csbiTransportOptions := &tpb.TransportOption{ - // Address: mneDetails.Address, - // Username: opt.Username, - // Password: opt.Password, - // Tls: opt.Tls, - // Type: opt.Type, - // TransportOption: opt.TransportOption, - // } - // log.WithField("transport option", csbiTransportOptions).Debug("gosdn gnmi transport options") - // - // files := []string{util.GoStructName, util.ManifestFileName, util.GoStructAdditionsName} - // csbiID := uuid.New() - // ctx, cancel := context.WithTimeout(context.Background(), time.Minute*10) - // defer cancel() - // - // g := new(errgroup.Group) - // for _, f := range files { - // req := &cpb.GetPayloadRequest{ - // Timestamp: time.Now().UnixNano(), - // Did: deployment.Id, - // File: f, - // } - // g.Go(func() error { - // gClient, err := pnd.csbiClient.GetFile(ctx, req) - // if err != nil { - // return err - // } - // err = saveStreamToFile(gClient, req.GetFile(), csbiID) - // if err != nil { - // return err - // } - // return nil - // }) - // } - // - // err = g.Wait() - // if err != nil { - // return uuid.Nil, err - // } - // - // csbi, err := NewSBI(spb.Type_TYPE_CONTAINERISED, csbiID) - // if err != nil { - // return uuid.Nil, err - // } - // err = pnd.southboundService.Add(csbi) - // if err != nil { - // return uuid.Nil, err - // } - // mne, err := NewNetworkElement(name, uuid.Nil, csbiTransportOptions, csbi, conflict.Metadata{ResourceVersion: 0}) - // if err != nil { - // return uuid.Nil, err - // } - // mne.(*CsbiNetworkElement).UUID = id - // ch <- networkelement.Details{TransportOption: opt} - // if err := pnd.networkElementService.Add(mne); err != nil { - // return uuid.Nil, err - // } - // return id, nil - //} - return uuid.Nil, nil -} +//func (pnd *pndImplementation) createCsbiNetworkElement( +// ctx context.Context, +// name string, +// deployment *cpb.Deployment, +// opt *tpb.TransportOption, +//) (uuid.UUID, error) { +// //id, err := uuid.Parse(deployment.Id) +// //if err != nil { +// // return uuid.Nil, err +// //} +// //ch := make(chan networkelement.Details, 1) +// //pnd.callback(id, ch) +// //defer pnd.callback(id, nil) +// //defer close(ch) +// //tickatus := time.NewTicker(time.Minute * 1) +// //defer tickatus.Stop() +// //select { +// //case <-tickatus.C: +// // log.WithFields(log.Fields{ +// // "id": deployment.Id, +// // "err": ctx.Err(), +// // }).Error("csbi handshake timed out") +// //case mneDetails := <-ch: +// // log.Infof("syn from csbi %v", mneDetails.ID) +// // id, err := uuid.Parse(mneDetails.ID) +// // if err != nil { +// // return uuid.Nil, err +// // } +// // csbiTransportOptions := &tpb.TransportOption{ +// // Address: mneDetails.Address, +// // Username: opt.Username, +// // Password: opt.Password, +// // Tls: opt.Tls, +// // Type: opt.Type, +// // TransportOption: opt.TransportOption, +// // } +// // log.WithField("transport option", csbiTransportOptions).Debug("gosdn gnmi transport options") +// // +// // files := []string{util.GoStructName, util.ManifestFileName, util.GoStructAdditionsName} +// // csbiID := uuid.New() +// // ctx, cancel := context.WithTimeout(context.Background(), time.Minute*10) +// // defer cancel() +// // +// // g := new(errgroup.Group) +// // for _, f := range files { +// // req := &cpb.GetPayloadRequest{ +// // Timestamp: time.Now().UnixNano(), +// // Did: deployment.Id, +// // File: f, +// // } +// // g.Go(func() error { +// // gClient, err := pnd.csbiClient.GetFile(ctx, req) +// // if err != nil { +// // return err +// // } +// // err = saveStreamToFile(gClient, req.GetFile(), csbiID) +// // if err != nil { +// // return err +// // } +// // return nil +// // }) +// // } +// // +// // err = g.Wait() +// // if err != nil { +// // return uuid.Nil, err +// // } +// // +// // csbi, err := NewSBI(spb.Type_TYPE_CONTAINERISED, csbiID) +// // if err != nil { +// // return uuid.Nil, err +// // } +// // err = pnd.southboundService.Add(csbi) +// // if err != nil { +// // return uuid.Nil, err +// // } +// // mne, err := NewNetworkElement(name, uuid.Nil, csbiTransportOptions, csbi, conflict.Metadata{ResourceVersion: 0}) +// // if err != nil { +// // return uuid.Nil, err +// // } +// // mne.(*CsbiNetworkElement).UUID = id +// // ch <- networkelement.Details{TransportOption: opt} +// // if err := pnd.networkElementService.Add(mne); err != nil { +// // return uuid.Nil, err +// // } +// // return id, nil +// //} +// return uuid.Nil, nil +//} // TODO: update // requestPlugin request a plugin from the plugin-registry. diff --git a/controller/nucleus/principalNetworkDomain_test.go b/controller/nucleus/principalNetworkDomain_test.go index ab3626fb1b72024f55791c7e5ae3b1e7fe5a2f24..2528e48072282a4547a140e00467bac6e4750c05 100644 --- a/controller/nucleus/principalNetworkDomain_test.go +++ b/controller/nucleus/principalNetworkDomain_test.go @@ -526,7 +526,6 @@ func Test_pndImplementation_RequestAll(t *testing.T) { //} func Test_pndImplementation_GetNetworkElement(t *testing.T) { - pnd := newPnd() mne := mockNetworkElement() diff --git a/controller/plugin/shared/grpc.go b/controller/plugin/shared/grpc.go index d00fe5055838b6a992a09ae1ad815051917f8417..46dbf1e60b2fa1c1e5262f12b9d91a397adfc389 100644 --- a/controller/plugin/shared/grpc.go +++ b/controller/plugin/shared/grpc.go @@ -165,7 +165,6 @@ func (m *DeviceModelServer) ValidateChange( func (m *DeviceModelServer) SchemaTreeGzip( req *pb.SchemaTreeGzipRequest, stream pb.Plugin_SchemaTreeGzipServer) error { - buffer := make([]byte, int(MB)) schema, err := m.Impl.SchemaTreeGzip() if err != nil { diff --git a/plugin-registry/server.go b/plugin-registry/server.go index d1c5d614dcc68bc2826c88b779e5c71659771262..9ab9bdeabbf48c2e84580ab50667d5436277523f 100644 --- a/plugin-registry/server.go +++ b/plugin-registry/server.go @@ -64,7 +64,6 @@ func (s *Server) Get(ctx context.Context, req *pb.GetRequest) (*pb.GetResponse, } func (s *Server) GetAll(ctx context.Context, req *pb.GetAllRequest) (*pb.GetResponse, error) { - pluginResultSlice := make([]*pb.Plugin, 0) for _, plugin := range s.registry.Plugins { pluginResultSlice = append(pluginResultSlice, pluginConverter(plugin)) @@ -121,6 +120,7 @@ func (s *Server) Download(req *pb.GetDownloadRequest, stream pb.PluginRegistrySe return nil } +// Delete removes a plugin from the plugin registry. func (s *Server) Delete(ctx context.Context, req *pb.DeleteRequest) (*pb.DeleteResponse, error) { - return nil, nil + return nil, status.Error(codes.Unimplemented, "The delete method is currently not implemented.") } diff --git a/plugins/sdk/deviceModel.go b/plugins/sdk/deviceModel.go index 218233b52164a21cd1593686959d430e816d17b6..21a35967ea294bdb3fed1c6e7370244a7a92bb92 100644 --- a/plugins/sdk/deviceModel.go +++ b/plugins/sdk/deviceModel.go @@ -29,7 +29,6 @@ func NewDeviceModel(generatedSchemaFn func() (*ytypes.Schema, error), generatedU schema, err := generatedSchemaFn() if err != nil { return nil, err - } validatedCopy, err := createValidatedCopy(schema.Root) @@ -177,8 +176,12 @@ func (d *DeviceModel) Diff(original, modified []byte) (*gpb.Notification, error) } //TODO: This should be changed to be optional - ygot.PruneConfigFalse(d.schema.RootSchema(), originalAsValidatedCopy) - ygot.PruneConfigFalse(d.schema.RootSchema(), modifiedAsValidatedCopy) + if err := ygot.PruneConfigFalse(d.schema.RootSchema(), originalAsValidatedCopy); err != nil { + return nil, err + } + if err := ygot.PruneConfigFalse(d.schema.RootSchema(), modifiedAsValidatedCopy); err != nil { + return nil, err + } return ygot.Diff(originalAsValidatedCopy, modifiedAsValidatedCopy) }