Commit d7cececc authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

NBI component - IETF L2VPN connector:

- Hacked IETF L2VPN to create L3 service for OSM as needed, and L2 otherwise.
parent f7527c05
Loading
Loading
Loading
Loading
+10 −3
Original line number Original line Diff line number Diff line
@@ -35,13 +35,15 @@ from .Constants import (
LOGGER = logging.getLogger(__name__)
LOGGER = logging.getLogger(__name__)


def create_service(
def create_service(
    service_uuid : str, context_uuid : Optional[str] = DEFAULT_CONTEXT_NAME
    service_uuid : str,
    service_type : ServiceTypeEnum = ServiceTypeEnum.SERVICETYPE_L2NM,
    context_uuid : Optional[str] = DEFAULT_CONTEXT_NAME,
) -> Optional[Exception]:
) -> Optional[Exception]:
    # pylint: disable=no-member
    # pylint: disable=no-member
    service_request = Service()
    service_request = Service()
    service_request.service_id.context_id.context_uuid.uuid = context_uuid
    service_request.service_id.context_id.context_uuid.uuid = context_uuid
    service_request.service_id.service_uuid.uuid = service_uuid
    service_request.service_id.service_uuid.uuid = service_uuid
    service_request.service_type = ServiceTypeEnum.SERVICETYPE_L2NM
    service_request.service_type = service_type
    service_request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED
    service_request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED


    try:
    try:
@@ -56,7 +58,12 @@ def process_vpn_service(
    vpn_service : Dict, errors : List[Dict]
    vpn_service : Dict, errors : List[Dict]
) -> None:
) -> None:
    vpn_id = vpn_service['vpn-id']
    vpn_id = vpn_service['vpn-id']
    exc = create_service(vpn_id)
    customer_name = vpn_service.get('customer-name')
    if isinstance(customer_name, str) and customer_name.strip().lower() == 'osm':
        service_type = ServiceTypeEnum.SERVICETYPE_L3NM
    else:
        service_type = ServiceTypeEnum.SERVICETYPE_L2NM
    exc = create_service(vpn_id, service_type=service_type)
    if exc is not None: errors.append({'error': str(exc)})
    if exc is not None: errors.append({'error': str(exc)})




+8 −2
Original line number Original line Diff line number Diff line
@@ -44,7 +44,10 @@ class L2VPN_Service(Resource):
            if target is None:
            if target is None:
                raise Exception('VPN({:s}) not found in database'.format(str(vpn_id)))
                raise Exception('VPN({:s}) not found in database'.format(str(vpn_id)))
            
            
            if target.service_type != ServiceTypeEnum.SERVICETYPE_L2NM:
            if target.service_type not in (
                ServiceTypeEnum.SERVICETYPE_L2NM,
                ServiceTypeEnum.SERVICETYPE_L3NM,
            ):
                raise Exception('VPN({:s}) is not L2VPN'.format(str(vpn_id)))
                raise Exception('VPN({:s}) is not L2VPN'.format(str(vpn_id)))


            service_ids = {target.service_id.service_uuid.uuid, target.name} # pylint: disable=no-member
            service_ids = {target.service_id.service_uuid.uuid, target.name} # pylint: disable=no-member
@@ -72,7 +75,10 @@ class L2VPN_Service(Resource):
            target = get_service_by_uuid(context_client, vpn_id)
            target = get_service_by_uuid(context_client, vpn_id)
            if target is None:
            if target is None:
                LOGGER.warning('VPN({:s}) not found in database. Nothing done.'.format(str(vpn_id)))
                LOGGER.warning('VPN({:s}) not found in database. Nothing done.'.format(str(vpn_id)))
            elif target.service_type != ServiceTypeEnum.SERVICETYPE_L2NM:
            elif target.service_type not in (
                ServiceTypeEnum.SERVICETYPE_L2NM,
                ServiceTypeEnum.SERVICETYPE_L3NM,
            ):
                raise Exception('VPN({:s}) is not L2VPN'.format(str(vpn_id)))
                raise Exception('VPN({:s}) is not L2VPN'.format(str(vpn_id)))
            else:
            else:
                service_ids = {target.service_id.service_uuid.uuid, target.name} # pylint: disable=no-member
                service_ids = {target.service_id.service_uuid.uuid, target.name} # pylint: disable=no-member
+5 −1
Original line number Original line Diff line number Diff line
@@ -123,7 +123,11 @@ class L2VPN_SiteNetworkAccesses(Resource):
            context_client = ContextClient()
            context_client = ContextClient()
            vpn_services = list()
            vpn_services = list()
            for service in get_services(context_client):
            for service in get_services(context_client):
                if service.service_type != ServiceTypeEnum.SERVICETYPE_L2NM: continue
                if service.service_type not in (
                    ServiceTypeEnum.SERVICETYPE_L2NM,
                    ServiceTypeEnum.SERVICETYPE_L3NM,
                ):
                    continue


                # De-duplicate services uuid/names in case service_uuid == service_name
                # De-duplicate services uuid/names in case service_uuid == service_name
                vpn_ids = {service.service_id.service_uuid.uuid, service.name}
                vpn_ids = {service.service_id.service_uuid.uuid, service.name}