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 ( ...@@ -11,8 +11,7 @@ import (
configMgmtPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement" configMgmtPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement"
corePb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" corePb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core"
networkelementPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
pndPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd"
topologyPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology" topologyPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology"
"code.fbi.h-da.de/danet/gosdn/applications/venv-manager/containerlab" "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/containerlab"
link "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/links" link "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/links"
...@@ -296,12 +295,12 @@ func (v *VenvManager) parseTopologyDataIntoStructs(topologyData *topologyPb.GetT ...@@ -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 { 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/"} paths := [2]string{"/lldp/config/system-description", "/system/state/"}
for _, path := range paths { for _, path := range paths {
for _, node := range *nodes { 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 { if err != nil {
return err return err
} }
...@@ -335,10 +334,10 @@ func (v *VenvManager) getAndAddMoreData(topologyData *topology.GoSdnTopology) (* ...@@ -335,10 +334,10 @@ func (v *VenvManager) getAndAddMoreData(topologyData *topology.GoSdnTopology) (*
return nil, err return nil, err
} }
networkElementService := networkelementPb.NewNetworkElementServiceClient(conn) networkElementService := mnepb.NewNetworkElementServiceClient(conn)
for iterator, node := range topologyData.Nodes { 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 { if err != nil {
return nil, err return nil, err
} }
......
...@@ -299,18 +299,18 @@ func ensureDefaultRoleExists() error { ...@@ -299,18 +299,18 @@ func ensureDefaultRoleExists() error {
"/gosdn.rbac.RoleService/UpdateRoles", "/gosdn.rbac.RoleService/UpdateRoles",
"/gosdn.rbac.RoleService/DeletePermissionsForRole", "/gosdn.rbac.RoleService/DeletePermissionsForRole",
"/gosdn.rbac.RoleService/DeleteRoles", "/gosdn.rbac.RoleService/DeleteRoles",
"/gosdn.pnd.PndService/GetMne", "/gosdn.networkelement.NetworkElementService/GetMne",
"/gosdn.pnd.PndService/GetFlattenedMne", "/gosdn.networkelement.NetworkElementService/GetFlattenedMne",
"/gosdn.pnd.PndService/GetFlattenedMneList", "/gosdn.networkelement.NetworkElementService/GetFlattenedMneList",
"/gosdn.pnd.PndService/GetPath", "/gosdn.networkelement.NetworkElementService/GetPath",
"/gosdn.pnd.PndService/GetChange", "/gosdn.networkelement.NetworkElementService/GetChange",
"/gosdn.pnd.PndService/GetChangeList", "/gosdn.networkelement.NetworkElementService/GetChangeList",
"/gosdn.pnd.PndService/SetMneList", "/gosdn.networkelement.NetworkElementService/SetMneList",
"/gosdn.pnd.PndService/SetChangeList", "/gosdn.networkelement.NetworkElementService/SetChangeList",
"/gosdn.pnd.PndService/SetPathList", "/gosdn.networkelement.NetworkElementService/SetPathList",
"/gosdn.pnd.PndService/DeviceSchema", "/gosdn.networkelement.NetworkElementService/DeviceSchema",
"/gosdn.pnd.PndService/DeleteMne", "/gosdn.networkelement.NetworkElementService/DeleteMne",
"/gosdn.pnd.PndService/SubscribePath", "/gosdn.networkelement.NetworkElementService/SubscribePath",
"/gosdn.plugin_internal.PluginInternalService/AvailablePlugins", "/gosdn.plugin_internal.PluginInternalService/AvailablePlugins",
"/gosdn.plugin_internal.PluginInternalService/GetPluginSchema", "/gosdn.plugin_internal.PluginInternalService/GetPluginSchema",
})) }))
......
package networkelement package networkelement
import ( import (
"context"
"code.fbi.h-da.de/danet/gosdn/controller/conflict" "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/plugin"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
"github.com/google/uuid" "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" "google.golang.org/protobuf/proto"
tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
...@@ -59,3 +64,34 @@ type LoadedNetworkElement struct { ...@@ -59,3 +64,34 @@ type LoadedNetworkElement struct {
PndID string `json:"pnd_id" bson:"pnd_id"` 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 ...@@ -119,7 +119,7 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ
return nil, err return nil, err
} }
err = c.deleteAllElementsFromDatabase(pndUUID) err = c.deleteAllElementsFromDatabase()
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -134,8 +134,8 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ ...@@ -134,8 +134,8 @@ func (c ConfigurationManagementServer) ImportSDNConfig(ctx context.Context, requ
Status: cmpb.Status_STATUS_OK}, nil Status: cmpb.Status_STATUS_OK}, nil
} }
func (c ConfigurationManagementServer) deleteAllElementsFromDatabase(pndUUID uuid.UUID) error { func (c ConfigurationManagementServer) deleteAllElementsFromDatabase() error {
if err := c.deleteNetworkElements(pndUUID); err != nil { if err := c.deleteNetworkElements(); err != nil {
return err return err
} }
...@@ -187,7 +187,7 @@ func (c ConfigurationManagementServer) deleteTopology() error { ...@@ -187,7 +187,7 @@ func (c ConfigurationManagementServer) deleteTopology() error {
return nil return nil
} }
func (c ConfigurationManagementServer) deleteNetworkElements(pndUUID uuid.UUID) error { func (c ConfigurationManagementServer) deleteNetworkElements() error {
networkElements, err := c.mneService.GetAll() networkElements, err := c.mneService.GetAll()
if err != nil { if err != nil {
return err return err
...@@ -307,7 +307,7 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD ...@@ -307,7 +307,7 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD
return err return err
} }
_, err = nucleus.NewNetworkElement( createdNetworkElement, err := nucleus.NewNetworkElement(
inputNetworkElement.Name, inputNetworkElement.Name,
uuid.MustParse(inputNetworkElement.ID), uuid.MustParse(inputNetworkElement.ID),
&transportOption, &transportOption,
...@@ -319,15 +319,24 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD ...@@ -319,15 +319,24 @@ func (c ConfigurationManagementServer) createNetworkElements(sdnConfig *loadedSD
return err 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 { if err != nil {
return err 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 { if err != nil {
return err return err
} }
if err := networkelement.EnsureIntendedConfigurationIsAppliedOnNetworkElement(networkElement); err != nil {
return err
}
} }
return nil return nil
} }
...@@ -192,7 +192,12 @@ func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update ...@@ -192,7 +192,12 @@ func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update
return nil, err 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 { if err != nil {
return &mnepb.UpdateNetworkElementResponse{ return &mnepb.UpdateNetworkElementResponse{
Timestamp: time.Now().UnixNano(), Timestamp: time.Now().UnixNano(),
...@@ -206,41 +211,6 @@ func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update ...@@ -206,41 +211,6 @@ func (n *NetworkElementServer) Update(ctx context.Context, request *mnepb.Update
}, nil }, 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. // GetMne gets a specific mne.
func (n *NetworkElementServer) GetMne(ctx context.Context, request *mnepb.GetMneRequest) (*mnepb.GetMneResponse, error) { func (n *NetworkElementServer) GetMne(ctx context.Context, request *mnepb.GetMneRequest) (*mnepb.GetMneResponse, error) {
labels := prometheus.Labels{"service": "mne", "rpc": "get"} 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