Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • danet/gosdn
1 result
Select Git revision
Show changes
Commits on Source (5)
code-quality:
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/golangci/golangci-lint:v1.56.1-alpine
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/golangci/golangci-lint:v1.56.2-alpine
stage: analyze
script:
# writes golangci-lint output to gl-code-quality-report.json
......
renovate:
stage: tools
image: renovate/renovate:37.183.0
image: renovate/renovate:37.192.1
variables:
LOG_LEVEL: debug
......
......@@ -39,10 +39,10 @@
"name": "CsbiService"
},
{
"name": "NetworkElementService"
"name": "PluginRegistryService"
},
{
"name": "PluginRegistryService"
"name": "NetworkElementService"
},
{
"name": "PluginInternalService"
......@@ -3333,6 +3333,9 @@
"model": {
"type": "string"
},
"plugin": {
"$ref": "#/definitions/plugin_registryPlugin"
},
"mneNotification": {
"type": "array",
"items": {
......
......@@ -3,7 +3,6 @@ syntax = "proto3";
package gosdn.plugin_internal;
import "buf/validate/validate.proto";
import "gosdn/plugin-registry/plugin-registry.proto";
option go_package = "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-internal";
......@@ -14,19 +13,19 @@ service PluginInternalService {
}
message GetAvailablePluginsRequest {
int64 timestamp = 1;
int64 timestamp = 1;
}
message GetAvailablePluginsResponse {
int64 timestamp = 1;
repeated gosdn.plugin_registry.Plugin plugins = 2;
int64 timestamp = 1;
repeated gosdn.plugin_registry.Plugin plugins = 2;
}
message GetPluginSchemaRequest {
int64 timestamp = 1;
string pid = 2 [(buf.validate.field).required = true];
int64 timestamp = 1;
string pid = 2 [(buf.validate.field).required = true];
}
message PluginSchemaPayload {
bytes chunk = 1;
bytes chunk = 1;
}
......@@ -58,9 +58,15 @@ The actual network element is not queried directly.`,
panel1 := pterm.DefaultBox.WithTitle("UUID:").Sprint(mne.Id)
panel2 := pterm.DefaultBox.WithTitle("Name:").Sprint(mne.Name)
panel3 := pterm.DefaultBox.WithTitle("Plugin-ID:").Sprint(mne.Plugin.Id)
panel4 := pterm.DefaultBox.WithTitle("Manifest:").Sprint(mne.Plugin.Manifest)
panel5 := pterm.DefaultBox.WithTitle("Plugin:").Sprint(panel3, "\n", panel4)
panels, _ := pterm.DefaultPanel.WithPanels(pterm.Panels{
{{Data: panel1}},
{{Data: panel2}},
{{Data: panel5}},
}).Srender()
pterm.DefaultBox.WithRightPadding(0).WithBottomPadding(0).Println(panels)
......
......@@ -7,6 +7,7 @@ import (
"time"
mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
plugin_registry "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry"
ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
"code.fbi.h-da.de/danet/gosdn/controller/config"
......@@ -119,21 +120,29 @@ func (n *NetworkElementServer) Get(ctx context.Context, request *mnepb.GetReques
return nil, status.Errorf(codes.Aborted, "%v", err)
}
// TODO(path): This needs some adjustments when we're switching towards a new
// path request handling.
mne, err := fillMneBySpecificPath(networkElement, "/", false)
mne := &mnepb.ManagedNetworkElement{
Id: networkElement.ID().String(),
Name: networkElement.Name(),
TransportAddress: networkElement.TransportAddress(),
}
err = fillMneBySpecificPath(mne, networkElement, "/", false)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
mne.Model, err = networkElement.GetModelAsString()
err = fillMneWithPluginInformation(mne, networkElement)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
mne.TransportAddress = networkElement.TransportAddress()
mne.Model, err = networkElement.GetModelAsString()
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
return &mnepb.GetResponse{
Timestamp: time.Now().UnixNano(),
......@@ -230,7 +239,19 @@ func (n *NetworkElementServer) GetAll(ctx context.Context, request *mnepb.GetAll
mnes := make([]*mnepb.ManagedNetworkElement, len(storedMNE))
for i, networkElement := range storedMNE {
mne, err := fillMneBySpecificPath(networkElement, "/", false)
mne := &mnepb.ManagedNetworkElement{
Id: networkElement.ID().String(),
Name: networkElement.Name(),
TransportAddress: networkElement.TransportAddress(),
}
err := fillMneBySpecificPath(mne, networkElement, "/", false)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
}
err = fillMneWithPluginInformation(mne, networkElement)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
......@@ -292,25 +313,40 @@ func (n *NetworkElementServer) GetAllFlattened(ctx context.Context, request *mne
}, nil
}
func fillMneBySpecificPath(nme networkelement.NetworkElement, path string, requestForIntendedState bool) (*mnepb.ManagedNetworkElement, error) {
func fillMneWithPluginInformation(mne *mnepb.ManagedNetworkElement, nme networkelement.NetworkElement) error {
plugin := nme.GetPlugin()
pluginManifest := plugin.Manifest()
mne.Plugin = &plugin_registry.Plugin{
Id: plugin.ID().String(),
Manifest: &plugin_registry.Manifest{
Name: pluginManifest.Name,
Firmware: pluginManifest.Firmware,
Author: pluginManifest.Author,
Version: pluginManifest.Version,
},
}
return nil
}
func fillMneBySpecificPath(mne *mnepb.ManagedNetworkElement, nme networkelement.NetworkElement, path string, requestForIntendedState bool) error {
gnmiPath, err := ygot.StringToStructuredPath(path)
if err != nil {
log.Error(err)
return nil, status.Errorf(codes.Aborted, "%v", err)
return status.Errorf(codes.Aborted, "%v", err)
}
notifications, err := nme.GetPlugin().GetNode(gnmiPath, requestForIntendedState)
plugin := nme.GetPlugin()
notifications, err := plugin.GetNode(gnmiPath, requestForIntendedState)
if err != nil {
return nil, status.Errorf(codes.Aborted, "%v", err)
return status.Errorf(codes.Aborted, "%v", err)
}
mne := &mnepb.ManagedNetworkElement{
Id: nme.ID().String(),
Name: nme.Name(),
MneNotification: notifications,
}
mne.MneNotification = notifications
return mne, nil
return nil
}
// GetPath gets an actual state of the path on a mne.
......@@ -401,7 +437,9 @@ func (n *NetworkElementServer) GetIntendedPath(ctx context.Context, request *mne
return nil, status.Errorf(codes.Aborted, "%v", err)
}
mne, err := fillMneBySpecificPath(networkElement, intendedPath, true)
mne := &mnepb.ManagedNetworkElement{}
err = fillMneBySpecificPath(mne, networkElement, intendedPath, true)
if err != nil {
return nil, err
}
......
......@@ -554,6 +554,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
......@@ -1058,6 +1060,8 @@ go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD0
go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4=
go.mongodb.org/mongo-driver v1.13.1 h1:YIc7HTYsKndGK4RFzJ3covLz1byri52x0IoMB0Pt/vk=
go.mongodb.org/mongo-driver v1.13.1/go.mod h1:wcDf1JBCXy2mOW0bWHwO/IOYqdca1MPCwDtFu/Z9+eo=
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
......