Skip to content
Snippets Groups Projects
Commit a08d0a28 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

NBI component - IETF L3VPN:

- Enabled creation of multiple services at once
parent 8f996309
No related branches found
No related tags found
2 merge requests!235Release TeraFlowSDN 3.0,!204Resolve "(CTTC) Multiple Bugs related to F5G PoC CAMARA experiment"
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
# limitations under the License. # limitations under the License.
import logging import logging
from typing import Dict from typing import Dict, List
from flask import request from flask import request
from flask.json import jsonify from flask.json import jsonify
from flask_restful import Resource from flask_restful import Resource
...@@ -36,11 +36,40 @@ class L3VPN_Services(Resource): ...@@ -36,11 +36,40 @@ class L3VPN_Services(Resource):
request_data : Dict = request.json request_data : Dict = request.json
LOGGER.debug('Request: {:s}'.format(str(request_data))) LOGGER.debug('Request: {:s}'.format(str(request_data)))
errors = list()
if 'ietf-l3vpn-svc:l3vpn-services' in request_data:
# processing multiple L3VPN service requests formatted as:
#{
# "ietf-l3vpn-svc:l3vpn-services": {
# "l3vpn-svc": [
# {
# "service-id": "vpn1",
# "vpn-services": {
# "vpn-service": [
for l3vpn_svc in request_data['ietf-l3vpn-svc:l3vpn-services']['l3vpn-svc']:
l3vpn_svc.pop('service-id', None)
l3vpn_svc_request_data = {'ietf-l3vpn-svc:l3vpn-svc': l3vpn_svc}
errors.extend(self._process_l3vpn(l3vpn_svc_request_data))
elif 'ietf-l3vpn-svc:l3vpn-svc' in request_data:
# processing single (standard) L3VPN service request formatted as:
#{
# "ietf-l3vpn-svc:l3vpn-svc": {
# "vpn-services": {
# "vpn-service": [
errors.extend(self._process_l3vpn(request_data))
else:
errors.append('unexpected request: {:s}'.format(str(request_data)))
response = jsonify(errors)
response.status_code = HTTP_CREATED if len(errors) == 0 else HTTP_SERVERERROR
return response
def _process_l3vpn(self, request_data : Dict) -> List[Dict]:
yang_validator = YangValidator('ietf-l3vpn-svc') yang_validator = YangValidator('ietf-l3vpn-svc')
request_data = yang_validator.parse_to_dict(request_data) request_data = yang_validator.parse_to_dict(request_data)
yang_validator.destroy() yang_validator.destroy()
errors = [] errors = list()
for vpn_service in request_data['l3vpn-svc']['vpn-services']['vpn-service']: for vpn_service in request_data['l3vpn-svc']['vpn-services']['vpn-service']:
process_vpn_service(vpn_service, errors) process_vpn_service(vpn_service, errors)
...@@ -48,6 +77,4 @@ class L3VPN_Services(Resource): ...@@ -48,6 +77,4 @@ class L3VPN_Services(Resource):
for site in request_data['l3vpn-svc']['sites']['site']: for site in request_data['l3vpn-svc']['sites']['site']:
process_site(site, errors) process_site(site, errors)
response = jsonify(errors) return errors
response.status_code = HTTP_CREATED if len(errors) == 0 else HTTP_SERVERERROR
return response
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment