Skip to content
Snippets Groups Projects
Commit f502d9ac authored by Malte Bauch's avatar Malte Bauch
Browse files

Fixed failing venv-manager

parent 25c40917
No related branches found
No related tags found
1 merge request!416Resolve "Refactor how PNDs are implemented in the code"
Pipeline #136906 failed
......@@ -11,8 +11,7 @@ import (
configMgmtPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement"
corePb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core"
networkelementPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
pndPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
topologyPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology"
"code.fbi.h-da.de/danet/gosdn/applications/venv-manager/containerlab"
link "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/links"
......@@ -296,12 +295,12 @@ func (v *VenvManager) parseTopologyDataIntoStructs(topologyData *topologyPb.GetT
}
func (v *VenvManager) loadNetworkElementModelPathsIntoGosdn(ctx context.Context, conn *grpc.ClientConn, nodes *[]node.Node) error {
pndService := pndPb.NewPndServiceClient(conn)
networkElementService := mnepb.NewNetworkElementServiceClient(conn)
paths := [2]string{"/lldp/config/system-description", "/system/state/"}
for _, path := range paths {
for _, node := range *nodes {
_, err := pndService.GetPath(ctx, &pndPb.GetPathRequest{Mneid: node.ID, Pid: v.pndID, Path: path})
_, err := networkElementService.GetPath(ctx, &mnepb.GetPathRequest{Mneid: node.ID, Pid: v.pndID, Path: path})
if err != nil {
return err
}
......@@ -335,10 +334,10 @@ func (v *VenvManager) getAndAddMoreData(topologyData *topology.GoSdnTopology) (*
return nil, err
}
networkElementService := networkelementPb.NewNetworkElementServiceClient(conn)
networkElementService := mnepb.NewNetworkElementServiceClient(conn)
for iterator, node := range topologyData.Nodes {
getNetworkElementResponse, _ := networkElementService.Get(ctx, &networkelementPb.GetNetworkElementRequest{NetworkElementId: node.ID})
getNetworkElementResponse, _ := networkElementService.Get(ctx, &mnepb.GetNetworkElementRequest{NetworkElementId: node.ID})
if err != nil {
return nil, err
}
......
......@@ -299,18 +299,18 @@ func ensureDefaultRoleExists() error {
"/gosdn.rbac.RoleService/UpdateRoles",
"/gosdn.rbac.RoleService/DeletePermissionsForRole",
"/gosdn.rbac.RoleService/DeleteRoles",
"/gosdn.pnd.PndService/GetMne",
"/gosdn.pnd.PndService/GetFlattenedMne",
"/gosdn.pnd.PndService/GetFlattenedMneList",
"/gosdn.pnd.PndService/GetPath",
"/gosdn.pnd.PndService/GetChange",
"/gosdn.pnd.PndService/GetChangeList",
"/gosdn.pnd.PndService/SetMneList",
"/gosdn.pnd.PndService/SetChangeList",
"/gosdn.pnd.PndService/SetPathList",
"/gosdn.pnd.PndService/DeviceSchema",
"/gosdn.pnd.PndService/DeleteMne",
"/gosdn.pnd.PndService/SubscribePath",
"/gosdn.networkelement.NetworkElementService/GetMne",
"/gosdn.networkelement.NetworkElementService/GetFlattenedMne",
"/gosdn.networkelement.NetworkElementService/GetFlattenedMneList",
"/gosdn.networkelement.NetworkElementService/GetPath",
"/gosdn.networkelement.NetworkElementService/GetChange",
"/gosdn.networkelement.NetworkElementService/GetChangeList",
"/gosdn.networkelement.NetworkElementService/SetMneList",
"/gosdn.networkelement.NetworkElementService/SetChangeList",
"/gosdn.networkelement.NetworkElementService/SetPathList",
"/gosdn.networkelement.NetworkElementService/DeviceSchema",
"/gosdn.networkelement.NetworkElementService/DeleteMne",
"/gosdn.networkelement.NetworkElementService/SubscribePath",
"/gosdn.plugin_internal.PluginInternalService/AvailablePlugins",
"/gosdn.plugin_internal.PluginInternalService/GetPluginSchema",
}))
......
package networkelement
import (
"context"
"code.fbi.h-da.de/danet/gosdn/controller/conflict"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/plugin"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
"github.com/google/uuid"
gpb "github.com/openconfig/gnmi/proto/gnmi"
"github.com/openconfig/ygot/ygot"
log "github.com/sirupsen/logrus"
"google.golang.org/protobuf/proto"
tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
......@@ -59,3 +64,34 @@ type LoadedNetworkElement struct {
PndID string `json:"pnd_id" bson:"pnd_id"`
}
// EnsureIntendedConfigurationIsAppliedOnNetworkElement pushes the stored
// configuration to a network element.
// TODO: find a better place for this function
func EnsureIntendedConfigurationIsAppliedOnNetworkElement(mne NetworkElement) error {
model, err := mne.GetModelAsFilteredCopy()
if err != nil {
return err
}
req := &gpb.SetRequest{}
path, err := ygot.StringToStructuredPath("/")
if err != nil {
return err
}
req.Update = []*gpb.Update{{
Path: path,
Val: &gpb.TypedValue{
Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(model)},
},
}}
response, err := mne.Transport().CustomSet(context.Background(), req)
if err != nil {
log.Errorf("Failed to apply model of network element err=%+v, response=%+v", err, response)
return err
}
return nil
}
......@@ -119,7 +119,7 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ
return nil, err
}
err = c.deleteAllElementsFromDatabase(pndUUID)
err = c.deleteAllElementsFromDatabase()
if err != nil {
return nil, err
}
......@@ -134,8 +134,8 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ
Status: cmpb.Status_STATUS_OK}, nil
}
func (c ConfigurationManagementServer) deleteAllElementsFromDatabase(pndUUID uuid.UUID) error {
if err := c.deleteNetworkElements(pndUUID); err != nil {
func (c ConfigurationManagementServer) deleteAllElementsFromDatabase() error {
if err := c.deleteNetworkElements(); err != nil {
return err
}
......@@ -187,7 +187,7 @@ func (c ConfigurationManagementServer) deleteTopology() error {
return nil
}
func (c ConfigurationManagementServer) deleteNetworkElements(pndUUID uuid.UUID) error {
func (c ConfigurationManagementServer) deleteNetworkElements() error {
networkElements, err := c.mneService.GetAll()
if err != nil {
return err
......@@ -307,7 +307,7 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD
return err
}
_, err = nucleus.NewNetworkElement(
createdNetworkElement, err := nucleus.NewNetworkElement(
inputNetworkElement.Name,
uuid.MustParse(inputNetworkElement.ID),
&transportOption,
......@@ -319,15 +319,24 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD
return err
}
networkelement, err := c.mneService.Get(store.Query{ID: uuid.MustParse(inputNetworkElement.ID)})
if err := c.mneService.Add(createdNetworkElement); err != nil {
return err
}
err = c.mneService.UpdateModel(createdNetworkElement.ID(), inputNetworkElement.Model)
if err != nil {
return err
}
err = c.mneService.UpdateModel(networkelement.ID(), inputNetworkElement.Model)
networkElement, err := c.mneService.Get(store.Query{ID: uuid.MustParse(inputNetworkElement.ID)})
if err != nil {
return err
}
if err := networkelement.EnsureIntendedConfigurationIsAppliedOnNetworkElement(networkElement); err != nil {
return err
}
}
return nil
}
......@@ -192,7 +192,12 @@ func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update
return nil, err
}
err = n.ensureIntendedConfigurationIsAppliedOnNetworkElement(mneID)
networkElement, err := n.mneService.Get(store.Query{ID: mneID})
if err != nil {
return nil, err
}
err = networkelement.EnsureIntendedConfigurationIsAppliedOnNetworkElement(networkElement)
if err != nil {
return &mnepb.UpdateNetworkElementResponse{
Timestamp: time.Now().UnixNano(),
......@@ -206,41 +211,6 @@ func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update
}, nil
}
func (n *NetworkElementServer) ensureIntendedConfigurationIsAppliedOnNetworkElement(mneID uuid.UUID) error {
mne, err := n.mneService.Get(store.Query{
ID: mneID,
})
if err != nil {
return err
}
model, err := mne.GetModelAsString()
if err != nil {
return err
}
req := &gpb.SetRequest{}
path, err := ygot.StringToStructuredPath("/")
if err != nil {
return err
}
req.Update = []*gpb.Update{{
Path: path,
Val: &gpb.TypedValue{
Value: &gpb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(model)},
},
}}
response, err := mne.Transport().CustomSet(context.Background(), req)
if err != nil {
log.Errorf("Failed to apply model of network element err=%+v, response=%+v", err, response)
return err
}
return nil
}
// GetMne gets a specific mne.
func (n *NetworkElementServer) GetMne(ctx context.Context, request *mnepb.GetMneRequest) (*mnepb.GetMneResponse, error) {
labels := prometheus.Labels{"service": "mne", "rpc": "get"}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment