Commit 102ab724 authored by Mohammad Ismaeel's avatar Mohammad Ismaeel
Browse files

set Services as list

parent be27d0cb
Loading
Loading
Loading
Loading
+74 −47
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ from context.client.ContextClient import ContextClient
from device.client.DeviceClient import DeviceClient
from service.client.ServiceClient import ServiceClient
from slice.client.SliceClient import SliceClient
from tapi.tools import service_builder
from tapi.tools import services_builder

service = Blueprint('service', __name__ ,url_prefix="/service")

@@ -42,40 +42,62 @@ slice_client = SliceClient()
def set_service () : 
    
    service_json = request.json
    service = ParseDict(service_json, Service())
    _services= service_json.get('services',[])
    _add_services= get_descriptors_add_services(_services) 
    services_ids= []
    try : 
        for service in _add_services: 
            try : 
                service_client.connect()
                service_id = service_client.CreateService(service)
        if service_id : 
            service_client.UpdateService(service)
        return make_response('Service Was Created Successfully !!' ,200)
                
            except Exception as e : 
                logging.info(f"error in creating service {e}") 
                return make_response(f'error !! {e}' ,400)  
        for service in _services : 
           
            
            try : 
                service = ParseDict(service, Service())
                service_id = service_client.UpdateService(service)
                if isinstance(service_id, ServiceId):
                    service_uuid = service_id.service_uuid.uuid    
                    service_id=service_uuid
                    services_ids.append(service_id)
            except Exception as e : 
                logging.info(f"error in updating service {e}") 
                return make_response(f'Updating Service !! {e}' ,400)
    finally :         
        if service_client: 
            service_client.close()
    if len(services_ids)>0 : 
        return make_response(f"Services {services_ids} was created Successfully !!", 200) 
    else:
        return make_response("No services were created.", 400)    
            
@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)
    _services=[]
    if 'services' in data  :
        for service in data['services']:
            host = service.get('host',None)
            port = service.get('port',8008)
            service_name = service.get('name',None)
            service_type=service.get('type',None)
            service_bandwidth=service.get('bandwidth',0)
            service_bi = service.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)
            if 'source' in service :
                src_dev = service['source'].get('device')
                src_end = service['source'].get('endpoint')
            if 'destination' in service :
                dst_dev = service['destination'].get('device',None)
                dst_end = service['destination'].get('endpoint',None)
                
            required_fields = {
            'name': service_name,
@@ -90,14 +112,19 @@ def create_service ():
            if len(missing_fields) >0 : 
                resonse = make_response(f"These fields are required {missing_fields}",400)
                return resonse
    
            else : 
        headers = {"Content-Type": "application/json"}
        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)
                _services.append(required_fields)
                
            
    if len(_services)> 0 : 
        
        headers = {"Content-Type": "application/json"}
        url = ('http://{}:8008/service/set_service').format(host) 
       
        service_json = services_builder(_services)
        
        response = requests.post(url,json=service_json,headers=headers)
        
+11 −2
Original line number Diff line number Diff line

        
        

def service_builder (service_json): 
    service=  {
            "service_id": {
@@ -22,3 +23,11 @@ def service_builder (service_json):
            "service_config": {"config_rules": []}
        }
    return service



def services_builder (services): 
    built_services= {'services':[]}
    for service in services:
        built_services['services'].append(service_builder(service))
    return built_services    
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ from common.tools.descriptor.Loader import DescriptorLoader, compose_notificatio
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.descriptor.Tools import get_descriptors_add_services
from context.client.ContextClient import ContextClient
from device.client.DeviceClient import DeviceClient
from service.client.ServiceClient import ServiceClient