Loading src/tapi/service/service/routes.py +65 −29 Original line number Diff line number Diff line Loading @@ -12,21 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. import base64, json, logging , os #, re from flask import jsonify, redirect, render_template, Blueprint, flash, session, url_for, request from common.proto.context_pb2 import (ContextList, Empty, TopologyId, TopologyList, Topology) import base64, json, logging , os , requests#, re from flask import jsonify, Blueprint, flash, session, url_for, request , make_response from common.proto.context_pb2 import (ContextList, Empty, Service, TopologyList, Topology) from common.tools.descriptor.Loader import DescriptorLoader, compose_notifications from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Topology import json_topology_id from common.tools.context_queries.Topology import create_topology from google.protobuf.json_format import MessageToDict , ParseDict from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient from service.client.ServiceClient import ServiceClient from slice.client.SliceClient import SliceClient service = Blueprint('service', __name__) from tapi.tools import service_builder service = Blueprint('service', __name__ ,url_prefix="/service") context_client = ContextClient() Loading @@ -36,29 +36,65 @@ slice_client = SliceClient() @service.route('/tapi/create_service', methods = ['GET']) def create_service () : service_json = request.json() @service.route('/tapi/create_topology/<context_uuid>', methods = ['POST']) def create_topology (context_uuid) : if context_uuid : topo_json = request.json() topo_uuid = topo_json.get('topology_uuid') @service.route('/set_service', methods = ['POST']) def set_service () : service_json = request.json service = ParseDict(service_json, Service()) try : context_client.connect() create_topology(context_client,context_uuid,topo_uuid) return 200 context_client.SetService(service) return make_response('Service Was Created Successfully !!' ,200) except Exception as e : logging.info(f'get_topology error {e}') return jsonify({'error':'Failed in creating topology'}),500 logging.info(f"error in creating service {e}") return make_response(f'error !! {e}' ,400) finally: if context_client: context_client.close() @service.route('/create_service',methods= ['POST']) def create_service (): data = request.json host = data.get('host',None) port = data.get('port',8008) service_name = data.get('name',None) service_type=data.get('type',None) service_bandwidth=data.get('bandwidth',0) service_bi = data.get('bidirectionality',0) src_dev=None src_end=None dst_dev=None dst_end=None if 'source' in data : src_dev = data['source'].get('device') src_end = data['source'].get('endpoint') if 'destination' in data : dst_dev = data['destination'].get('device',None) dst_end = data['destination'].get('endpoint',None) required_fields = { 'name': service_name, 'type': service_type, 'src_dev': src_dev, 'src_end': src_end, 'dst_dev': dst_dev, 'dst_end': dst_end, 'host':host } missing_fields= [key for key,value in required_fields.items() if value is None] if len(missing_fields) >0 : resonse = make_response(f"These fields are required {missing_fields}",400) return resonse else : url = ('http://{}:8008/service/set_service').format(host) required_fields['bandwidth']=service_bandwidth required_fields['bidirectionality']=service_bi required_fields['port']=port service_json = service_builder(required_fields) response = requests.post(url,service_json) return response No newline at end of file src/tapi/tools.py 0 → 100644 +24 −0 Original line number Diff line number Diff line def service_builder (service_json): service= { "service_id": { "context_id": {"context_uuid": {"uuid": "admin"}}, "service_uuid": {"uuid": service_json["name"]} }, "service_type": 6, "service_status": {"service_status": 1}, "service_endpoint_ids": [ {"device_id": {"device_uuid": {"uuid": service_json['src_dev']}}, "endpoint_uuid": {"uuid": service_json['src_end']}}, {"device_id": {"device_uuid": {"uuid":service_json['dst_dev']}}, "endpoint_uuid": {"uuid": service_json['dst_end']}} ], "service_constraints": [ {"custom": {"constraint_type": "type", "constraint_value": service_json['type']}}, {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": service_json['bandwidth']}}, {"custom": {"constraint_type": "bidirectionality", "constraint_value":service_json['bidirectionality']}} ], "service_config": {"config_rules": []} } return service No newline at end of file Loading
src/tapi/service/service/routes.py +65 −29 Original line number Diff line number Diff line Loading @@ -12,21 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. import base64, json, logging , os #, re from flask import jsonify, redirect, render_template, Blueprint, flash, session, url_for, request from common.proto.context_pb2 import (ContextList, Empty, TopologyId, TopologyList, Topology) import base64, json, logging , os , requests#, re from flask import jsonify, Blueprint, flash, session, url_for, request , make_response from common.proto.context_pb2 import (ContextList, Empty, Service, TopologyList, Topology) from common.tools.descriptor.Loader import DescriptorLoader, compose_notifications from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Topology import json_topology_id from common.tools.context_queries.Topology import create_topology from google.protobuf.json_format import MessageToDict , ParseDict from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient from service.client.ServiceClient import ServiceClient from slice.client.SliceClient import SliceClient service = Blueprint('service', __name__) from tapi.tools import service_builder service = Blueprint('service', __name__ ,url_prefix="/service") context_client = ContextClient() Loading @@ -36,29 +36,65 @@ slice_client = SliceClient() @service.route('/tapi/create_service', methods = ['GET']) def create_service () : service_json = request.json() @service.route('/tapi/create_topology/<context_uuid>', methods = ['POST']) def create_topology (context_uuid) : if context_uuid : topo_json = request.json() topo_uuid = topo_json.get('topology_uuid') @service.route('/set_service', methods = ['POST']) def set_service () : service_json = request.json service = ParseDict(service_json, Service()) try : context_client.connect() create_topology(context_client,context_uuid,topo_uuid) return 200 context_client.SetService(service) return make_response('Service Was Created Successfully !!' ,200) except Exception as e : logging.info(f'get_topology error {e}') return jsonify({'error':'Failed in creating topology'}),500 logging.info(f"error in creating service {e}") return make_response(f'error !! {e}' ,400) finally: if context_client: context_client.close() @service.route('/create_service',methods= ['POST']) def create_service (): data = request.json host = data.get('host',None) port = data.get('port',8008) service_name = data.get('name',None) service_type=data.get('type',None) service_bandwidth=data.get('bandwidth',0) service_bi = data.get('bidirectionality',0) src_dev=None src_end=None dst_dev=None dst_end=None if 'source' in data : src_dev = data['source'].get('device') src_end = data['source'].get('endpoint') if 'destination' in data : dst_dev = data['destination'].get('device',None) dst_end = data['destination'].get('endpoint',None) required_fields = { 'name': service_name, 'type': service_type, 'src_dev': src_dev, 'src_end': src_end, 'dst_dev': dst_dev, 'dst_end': dst_end, 'host':host } missing_fields= [key for key,value in required_fields.items() if value is None] if len(missing_fields) >0 : resonse = make_response(f"These fields are required {missing_fields}",400) return resonse else : url = ('http://{}:8008/service/set_service').format(host) required_fields['bandwidth']=service_bandwidth required_fields['bidirectionality']=service_bi required_fields['port']=port service_json = service_builder(required_fields) response = requests.post(url,service_json) return response No newline at end of file
src/tapi/tools.py 0 → 100644 +24 −0 Original line number Diff line number Diff line def service_builder (service_json): service= { "service_id": { "context_id": {"context_uuid": {"uuid": "admin"}}, "service_uuid": {"uuid": service_json["name"]} }, "service_type": 6, "service_status": {"service_status": 1}, "service_endpoint_ids": [ {"device_id": {"device_uuid": {"uuid": service_json['src_dev']}}, "endpoint_uuid": {"uuid": service_json['src_end']}}, {"device_id": {"device_uuid": {"uuid":service_json['dst_dev']}}, "endpoint_uuid": {"uuid": service_json['dst_end']}} ], "service_constraints": [ {"custom": {"constraint_type": "type", "constraint_value": service_json['type']}}, {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": service_json['bandwidth']}}, {"custom": {"constraint_type": "bidirectionality", "constraint_value":service_json['bidirectionality']}} ], "service_config": {"config_rules": []} } return service No newline at end of file