Commit 40b5a66f authored by Mohammad Ismaeel's avatar Mohammad Ismaeel
Browse files

set service route Tapi

parent 2565e37d
Loading
Loading
Loading
Loading
+65 −29
Original line number Diff line number Diff line
@@ -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()
@@ -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