Skip to content
Snippets Groups Projects
configurationmanagement.go 2.94 KiB
Newer Older
  • Learn to ignore specific revisions
  • Neil Schark's avatar
    wip
    Neil Schark committed
    package server
    
    import (
    	"context"
    
    Neil Schark's avatar
    Neil Schark committed
    	"encoding/json"
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    	"time"
    
    
    Neil Schark's avatar
    Neil Schark committed
    	cmpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement"
    
    Neil Schark's avatar
    Neil Schark committed
    	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
    
    Neil Schark's avatar
    Neil Schark committed
    	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
    
    Neil Schark's avatar
    Neil Schark committed
    	"code.fbi.h-da.de/danet/gosdn/controller/store"
    	"code.fbi.h-da.de/danet/gosdn/controller/topology"
    	"code.fbi.h-da.de/danet/gosdn/controller/topology/links"
    	"code.fbi.h-da.de/danet/gosdn/controller/topology/nodes"
    	"code.fbi.h-da.de/danet/gosdn/controller/topology/ports"
    	"github.com/google/uuid"
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    )
    
    
    Neil Schark's avatar
    Neil Schark committed
    // ConfigurationManagementServer represents  ConfigurationManagementServer...
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    type ConfigurationManagementServer struct {
    
    Neil Schark's avatar
    Neil Schark committed
    	cmpb.UnimplementedConfigurationManagementServiceServer
    
    Neil Schark's avatar
    Neil Schark committed
    	pndStore        networkdomain.PndStore
    	topologyService topology.Service
    	nodeService     nodes.Service
    	portService     ports.Service
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    }
    
    
    Neil Schark's avatar
    Neil Schark committed
    // NewConfigurationManagementServer creates the ConfigurationManagementServer..
    
    Neil Schark's avatar
    Neil Schark committed
    func NewConfigurationManagementServer(
    	pndStore networkdomain.PndStore,
    	topologyService topology.Service,
    	nodeService nodes.Service, portService ports.Service,
    ) *ConfigurationManagementServer {
    	return &ConfigurationManagementServer{
    		pndStore:        pndStore,
    		topologyService: topologyService,
    		nodeService:     nodeService,
    		portService:     portService}
    }
    
    
    Neil Schark's avatar
    Neil Schark committed
    // SDNConfig is used to aprse the SDNConfig into JSON.
    
    Neil Schark's avatar
    Neil Schark committed
    type SDNConfig struct {
    	PndID           string                          `json:"pndID"`
    	Nodes           []nodes.Node                    `json:"nodes"`
    	Ports           []ports.Port                    `json:"ports"`
    	Links           []links.Link                    `json:"links"`
    
    	NetworkElements []networkelement.NetworkElement `json:"networkelements"`
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    }
    
    // ExportSDNConfig returns the SDN configuration.
    
    Neil Schark's avatar
    Neil Schark committed
    func (c ConfigurationManagementServer) ExportSDNConfig(ctx context.Context, request *cmpb.ExportSDNConfigRequest) (*cmpb.ExportSDNConfigResponse, error) {
    
    Neil Schark's avatar
    Neil Schark committed
    	var sdnConfig = SDNConfig{}
    	sdnConfig.PndID = request.Pid
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    
    
    Neil Schark's avatar
    Neil Schark committed
    	pndUUID := uuid.MustParse(request.Pid)
    	pnd, err := c.pndStore.Get(store.Query{ID: pndUUID})
    	if err != nil {
    		return nil, err
    	}
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    
    
    Neil Schark's avatar
    Neil Schark committed
    	sdnConfig.NetworkElements = pnd.NetworkElements()
    	sdnConfig.Nodes, err = c.nodeService.GetAll()
    	if err != nil {
    		return nil, err
    	}
    	sdnConfig.Ports, err = c.portService.GetAll()
    	if err != nil {
    		return nil, err
    	}
    	sdnConfig.Links, err = c.topologyService.GetAll()
    	if err != nil {
    		return nil, err
    	}
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    
    
    	jsonSDNConfig, err := json.MarshalIndent(sdnConfig, "", "   ")
    
    Neil Schark's avatar
    Neil Schark committed
    	if err != nil {
    		return nil, err
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    	}
    
    
    	stringified := string(jsonSDNConfig)
    
    
    Neil Schark's avatar
    Neil Schark committed
    	return &cmpb.ExportSDNConfigResponse{
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    		Timestamp: time.Now().UnixNano(),
    
    		SdnConfig: stringified}, nil
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    }
    
    // ImportSDNConfig receives an SDN configuration and imports it.
    
    Neil Schark's avatar
    Neil Schark committed
    func (s *NetworkElementServer) ImportSDNConfig(ctx context.Context, request *cmpb.ImportSDNConfigRequest) (*cmpb.ImportSDNConfigResponse, error) {
    	return &cmpb.ImportSDNConfigResponse{
    
    Neil Schark's avatar
    wip
    Neil Schark committed
    		Timestamp: time.Now().UnixNano()}, nil
    }