Commit 25cc5c38 authored by Allen Abishek's avatar Allen Abishek
Browse files

NBI - L2VPN connector:

 
- Migrate L2VPNs from Slices to Services
parent eb5af569
Loading
Loading
Loading
Loading
+15 −15
Original line number Diff line number Diff line
@@ -16,10 +16,10 @@ import logging
from flask import request
from flask.json import jsonify
from flask_restful import Resource
from common.proto.context_pb2 import SliceStatusEnum
from common.tools.context_queries.Slice import get_slice_by_uuid
from common.proto.context_pb2 import ServiceStatusEnum
from common.tools.context_queries.Service import get_service_by_uuid
from context.client.ContextClient import ContextClient
from slice.client.SliceClient import SliceClient
from service.client.ServiceClient import ServiceClient
from nbi.service._tools.Authentication import HTTP_AUTH
from nbi.service._tools.HttpStatusCodes import (
    HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR
@@ -36,17 +36,17 @@ class L2VPN_Service(Resource):
        try:
            context_client = ContextClient()

            target = get_slice_by_uuid(context_client, vpn_id, rw_copy=True)
            target = get_service_by_uuid(context_client, vpn_id, rw_copy=True)
            if target is None:
                raise Exception('VPN({:s}) not found in database'.format(str(vpn_id)))

            if target.slice_id.slice_uuid.uuid != vpn_id: # pylint: disable=no-member
                raise Exception('Slice retrieval failed. Wrong Slice Id was returned')
            if target.service_id.service_uuid.uuid != vpn_id: # pylint: disable=no-member
                raise Exception('Service retrieval failed. Wrong Service Id was returned')

            slice_ready_status = SliceStatusEnum.SLICESTATUS_ACTIVE
            slice_status = target.slice_status.slice_status # pylint: disable=no-member
            service_ready_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE
            service_status = target.service_status.service_status # pylint: disable=no-member
            response = jsonify({})
            response.status_code = HTTP_OK if slice_status == slice_ready_status else HTTP_GATEWAYTIMEOUT
            response.status_code = HTTP_OK if service_status == service_ready_status else HTTP_GATEWAYTIMEOUT
        except Exception as e: # pylint: disable=broad-except
            LOGGER.exception('Something went wrong Retrieving VPN({:s})'.format(str(vpn_id)))
            response = jsonify({'error': str(e)})
@@ -61,14 +61,14 @@ class L2VPN_Service(Resource):
        try:
            context_client = ContextClient()

            target = get_slice_by_uuid(context_client, vpn_id)
            target = get_service_by_uuid(context_client, vpn_id)
            if target is None:
                LOGGER.warning('VPN({:s}) not found in database. Nothing done.'.format(str(vpn_id)))
            else:
                if target.slice_id.slice_uuid.uuid != vpn_id: # pylint: disable=no-member
                    raise Exception('Slice retrieval failed. Wrong Slice Id was returned')
                slice_client = SliceClient()
                slice_client.DeleteSlice(target.slice_id)
                if target.service_id.service_uuid.uuid != vpn_id: # pylint: disable=no-member
                    raise Exception('Service retrieval failed. Wrong Service Id was returned')
                service_client = ServiceClient()
                service_client.DeleteService(target.service_id)
            response = jsonify({})
            response.status_code = HTTP_NOCONTENT
        except Exception as e: # pylint: disable=broad-except
+10 −9
Original line number Diff line number Diff line
@@ -19,8 +19,8 @@ from flask.json import jsonify
from flask_restful import Resource
from werkzeug.exceptions import UnsupportedMediaType
from common.Constants import DEFAULT_CONTEXT_NAME
from common.proto.context_pb2 import SliceStatusEnum, Slice
from slice.client.SliceClient import SliceClient
from common.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum
from service.client.ServiceClient import ServiceClient
from nbi.service._tools.HttpStatusCodes import HTTP_CREATED, HTTP_SERVERERROR
from nbi.service._tools.Validator import validate_message
from nbi.service._tools.Authentication import HTTP_AUTH
@@ -44,13 +44,14 @@ class L2VPN_Services(Resource):
        for vpn_service in vpn_services:
            try:
                # pylint: disable=no-member
                slice_request = Slice()
                slice_request.slice_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
                slice_request.slice_id.slice_uuid.uuid = vpn_service['vpn-id']
                slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
                service_request = Service()
                service_request.service_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
                service_request.service_id.service_uuid.uuid = vpn_service['vpn-id']
                service_request.service_type = ServiceTypeEnum.SERVICETYPE_L2NM
                service_request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED

                slice_client = SliceClient()
                slice_client.CreateSlice(slice_request)
                service_client = ServiceClient()
                service_client.CreateService(service_request)

                response = jsonify({})
                response.status_code = HTTP_CREATED
+14 −14
Original line number Diff line number Diff line
@@ -19,8 +19,8 @@ from flask.json import jsonify
from flask.wrappers import Response
from flask_restful import Resource
from werkzeug.exceptions import UnsupportedMediaType
from common.proto.context_pb2 import Slice
from common.tools.context_queries.Slice import get_slice_by_uuid
from common.proto.context_pb2 import Service
from common.tools.context_queries.Service import get_service_by_uuid
from common.tools.grpc.ConfigRules import update_config_rule_custom
from common.tools.grpc.Constraints import (
    update_constraint_custom_dict, update_constraint_endpoint_location, update_constraint_endpoint_priority,
@@ -28,7 +28,7 @@ from common.tools.grpc.Constraints import (
from common.tools.grpc.EndPointIds import update_endpoint_ids
from common.tools.grpc.Tools import grpc_message_to_json_string
from context.client.ContextClient import ContextClient
from slice.client.SliceClient import SliceClient
from service.client.ServiceClient import ServiceClient
from nbi.service._tools.Authentication import HTTP_AUTH
from nbi.service._tools.HttpStatusCodes import HTTP_NOCONTENT, HTTP_SERVERERROR
from nbi.service._tools.Validator import validate_message
@@ -37,7 +37,7 @@ from .Constants import BEARER_MAPPINGS, DEFAULT_ADDRESS_FAMILIES, DEFAULT_BGP_AS

LOGGER = logging.getLogger(__name__)

def process_site_network_access(context_client : ContextClient, site_id : str, site_network_access : Dict) -> Slice:
def process_site_network_access(context_client : ContextClient, site_id : str, site_network_access : Dict) -> Service:
    vpn_id = site_network_access['vpn-attachment']['vpn-id']
    encapsulation_type = site_network_access['connection']['encapsulation-type']
    cvlan_id = site_network_access['connection']['tagged-interface'][encapsulation_type]['cvlan-id']
@@ -68,12 +68,12 @@ def process_site_network_access(context_client : ContextClient, site_id : str, s
        address_ip, address_prefix, remote_router, circuit_id
    ) = mapping

    target = get_slice_by_uuid(context_client, vpn_id, rw_copy=True)
    target = get_service_by_uuid(context_client, vpn_id, rw_copy=True)
    if target is None: raise Exception('VPN({:s}) not found in database'.format(str(vpn_id)))

    endpoint_ids = target.slice_endpoint_ids        # pylint: disable=no-member
    config_rules = target.slice_config.config_rules # pylint: disable=no-member
    constraints  = target.slice_constraints         # pylint: disable=no-member
    endpoint_ids = target.service_endpoint_ids       # pylint: disable=no-member
    config_rules = target.service_config.config_rules # pylint: disable=no-member
    constraints  = target.service_constraints        # pylint: disable=no-member

    endpoint_id = update_endpoint_ids(endpoint_ids, device_uuid, endpoint_uuid)

@@ -117,7 +117,7 @@ def process_site_network_access(context_client : ContextClient, site_id : str, s
    return target

def process_list_site_network_access(
        context_client : ContextClient, slice_client : SliceClient, site_id : str, request_data : Dict
        context_client : ContextClient, service_client : ServiceClient, site_id : str, request_data : Dict
    ) -> Response:

    LOGGER.debug('Request: {:s}'.format(str(request_data)))
@@ -128,7 +128,7 @@ def process_list_site_network_access(
        sna_request = process_site_network_access(context_client, site_id, site_network_access)
        LOGGER.debug('sna_request = {:s}'.format(grpc_message_to_json_string(sna_request)))
        try:
            slice_client.UpdateSlice(sna_request)
            service_client.UpdateService(sna_request)
        except Exception as e: # pylint: disable=broad-except
            msg = 'Something went wrong Updating VPN {:s}'
            LOGGER.exception(msg.format(grpc_message_to_json_string(sna_request)))
@@ -144,13 +144,13 @@ class L2VPN_SiteNetworkAccesses(Resource):
        if not request.is_json: raise UnsupportedMediaType('JSON payload is required')
        LOGGER.debug('Site_Id: {:s}'.format(str(site_id)))
        context_client = ContextClient()
        slice_client = SliceClient()
        return process_list_site_network_access(context_client, slice_client, site_id, request.json)
        service_client = ServiceClient()
        return process_list_site_network_access(context_client, service_client, site_id, request.json)

    @HTTP_AUTH.login_required
    def put(self, site_id : str):
        if not request.is_json: raise UnsupportedMediaType('JSON payload is required')
        LOGGER.debug('Site_Id: {:s}'.format(str(site_id)))
        context_client = ContextClient()
        slice_client = SliceClient()
        return process_list_site_network_access(context_client, slice_client, site_id, request.json)
        service_client = ServiceClient()
        return process_list_site_network_access(context_client, service_client, site_id, request.json)
 No newline at end of file
+1 −1

File changed.

Contains only whitespace changes.