| #!/usr/bin/python3 |
| |
| import requests |
| import json |
| import itertools |
| |
| # |
| # Creates connectivity json |
| # |
| def tapi_input(sip_uuids): |
| create_input = { |
| "tapi-connectivity:input": { |
| "end-point" : [ |
| { |
| "local-id": sip_uuids[0], |
| "service-interface-point": { |
| "service-interface-point-uuid" : sip_uuids[0] |
| } |
| } |
| , |
| { |
| "local-id": sip_uuids[1], |
| "service-interface-point": { |
| "service-interface-point-uuid" : sip_uuids[1] |
| } |
| } |
| ] |
| } |
| } |
| return create_input |
| |
| # |
| # Obtains TAPI context through restconf |
| # |
| def get_context(url_context): |
| resp = requests.get(url_context, auth=('onos', 'rocks')) |
| if resp.status_code != 200: |
| raise Exception('GET {}'.format(resp.status_code)) |
| return resp.json() |
| |
| # |
| # Requests a connectivity service |
| # |
| def request_connection(url_connectivity, context): |
| # All Context SIPs |
| sips = context["tapi-common:context"]["service-interface-point"] |
| |
| # Sorted Photonic Media SIPs. filter is an iterable |
| esips = list(filter(is_dsr_media, sorted(sips, key=lambda sip: sip["name"][0]["value"]))) |
| endpoints = [esips[0], esips[-1]] |
| sip_uuids = [] |
| for sip in endpoints: |
| sip_uuids.append(sip["uuid"]) |
| for uuid in sip_uuids: |
| print(uuid) |
| |
| create_input_json = json.dumps(tapi_input(sip_uuids)) |
| print (create_input_json) |
| headers = {'Content-type': 'application/json'} |
| resp = requests.post(url_connectivity, data=create_input_json, headers=headers, auth=('onos', 'rocks')) |
| if resp.status_code != 200: |
| raise Exception('POST {}'.format(resp.status_code)) |
| return resp |
| |
| # |
| # Filter method used to keep only SIPs that are photonic_media |
| # |
| def is_photonic_media(sip): |
| return sip["layer-protocol-name"]=="PHOTONIC_MEDIA" |
| |
| # |
| # Filter method used to keep only SIPs that are DSR |
| # |
| def is_dsr_media(sip): |
| return sip["layer-protocol-name"]=="DSR" |
| |
| # |
| # Processes the topology to verify the correctness |
| # |
| def process_topology(): |
| # TODO use method to parse topology |
| # Getting the Topology |
| # topology = context["tapi-common:context"]["tapi-topology:topology-context"]["topology"][0] |
| # nodes = topology["node"]; |
| # links = topology["link"]; |
| noop |
| |
| # |
| # Creates a connection first getting the context, parsing for SIPS and then issuing the request. |
| # |
| def create_connection(url_context, url_connectivity): |
| context = get_context(url_context) |
| return request_connection(url_connectivity, context) |
| |
| # |
| # Obtains existing connectivity services |
| # |
| def get_connection(url_connectivity, uuid): |
| if(uuid == ""): |
| json = '{}' |
| else: |
| #TODO use uuid to retrieve given topo |
| print "Not Yet implemented" |
| json = '{}' |
| headers = {'Content-type': 'application/json'} |
| resp = requests.post(url_connectivity, data=json, headers=headers, auth=('onos', 'rocks')) |
| if resp.status_code != 200: |
| raise Exception('POST {}'.format(resp.status_code)) |
| return resp |
| |
| |
| |
| |
| |
| |