from xos.logger import Logger, logging | |
from services.metronetwork.models import * | |
from synchronizers.metronetwork.providers.metronetworkprovider import MetroNetworkProvider | |
import requests, json | |
from requests.auth import HTTPBasicAuth | |
logger = Logger(level=logging.INFO) | |
class MetroNetworkRestProvider(MetroNetworkProvider): | |
def __init__(self, networkdevice, **args): | |
MetroNetworkProvider.__init__(self, networkdevice, **args) | |
def get_network_ports(self): | |
objs = [] | |
restCtrlUrl = self.networkdevice.restCtrlUrl | |
username = self.networkdevice.username | |
password = self.networkdevice.password | |
resp = requests.get("{}/mef-sca-api/SCA_ETH_FPP_UNI_N".format(restCtrlUrl), | |
auth=HTTPBasicAuth(username, password)) | |
if resp.status_code == 200: | |
for uni in resp.json(): | |
hostname = uni['transportPort']['Hostname'] | |
port = uni['transportPort']['Port'] | |
# Default values | |
bwpCfgCbs = 0 | |
bwpCfgEbs = 0 | |
bwpCfgCir = 0 | |
bwpCfgEir = 0 | |
if 'interfaceCfgIngressBwp' in uni: | |
bwpCfgCbs = uni['interfaceCfgIngressBwp']['bwpCfgCbs'] | |
bwpCfgEbs = uni['interfaceCfgIngressBwp']['bwpCfgEbs'] | |
bwpCfgCir = uni['interfaceCfgIngressBwp']['bwpCfgCir'] | |
bwpCfgEir = uni['interfaceCfgIngressBwp']['bwpCfgEir'] | |
uniPort = NetworkEdgePort() | |
uniPort.element = self.networkdevice | |
uniPort.pid = "{}.{}/{}".format(self.networkdevice.id, hostname, port) | |
uniPort.bwpCfgCbs = bwpCfgCbs | |
uniPort.bwpCfgEbs = bwpCfgEbs | |
uniPort.bwpCfgCir = bwpCfgCir | |
uniPort.bwpCfgEir = bwpCfgEir | |
objs.append(uniPort) | |
return objs | |
else: | |
raise Exception("OnosApiError: get_network_ports()") | |
def get_network_links(self): | |
objs = [] | |
restCtrlUrl = self.networkdevice.restCtrlUrl | |
username = self.networkdevice.username | |
password = self.networkdevice.password | |
resp = requests.get("{}/mef-sca-api/SCA_ETH_FDFr_EC/findByState?state=Active".format(restCtrlUrl), | |
auth=HTTPBasicAuth(username, password)) | |
if resp.status_code == 200: | |
for evc in resp.json(): | |
id = evc['id'] | |
evcServiceType = evc['evcServiceType'] | |
if (evcServiceType == "Point_To_Point"): | |
uni1 = evc['SCA_ETH_Flow_Points'][0] | |
hostname = uni1['scaEthFppUniN']['transportPort']['Hostname'] | |
port = uni1['scaEthFppUniN']['transportPort']['Port'] | |
if 'interfaceCfgIngressBwp' in uni1['scaEthFppUniN']: | |
bwpCfgCbs = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs'] | |
bwpCfgEbs = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs'] | |
bwpCfgCir = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir'] | |
bwpCfgEir = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir'] | |
edgePort1 = NetworkEdgePort() | |
edgePort1.element = self.networkdevice | |
edgePort1.pid = "{}.{}/{}".format(self.networkdevice.id, hostname, port) | |
edgePort1.bwpCfgCbs = bwpCfgCbs | |
edgePort1.bwpCfgEbs = bwpCfgEbs | |
edgePort1.bwpCfgCir = bwpCfgCir | |
edgePort1.bwpCfgEir = bwpCfgEir | |
uni2 = evc['SCA_ETH_Flow_Points'][1] | |
hostname = uni2['scaEthFppUniN']['transportPort']['Hostname'] | |
port = uni2['scaEthFppUniN']['transportPort']['Port'] | |
if 'interfaceCfgIngressBwp' in uni1['scaEthFppUniN']: | |
bwpCfgCbs = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs'] | |
bwpCfgEbs = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs'] | |
bwpCfgCir = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir'] | |
bwpCfgEir = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir'] | |
edgePort2 = NetworkEdgePort() | |
edgePort2.element = self.networkdevice | |
edgePort2.pid = "{}.{}/{}".format(self.networkdevice.id, hostname, port) | |
edgePort2.bwpCfgCbs = bwpCfgCbs | |
edgePort2.bwpCfgEbs = bwpCfgEbs | |
edgePort2.bwpCfgCir = bwpCfgCir | |
edgePort2.bwpCfgEir = bwpCfgEir | |
edgeToEdgeConnectivity = NetworkEdgeToEdgePointConnection() | |
edgeToEdgeConnectivity.sid = id | |
edgeToEdgeConnectivity.type = evcServiceType | |
edgeToEdgeConnectivity.uni1 = edgePort1 | |
edgeToEdgeConnectivity.uni2 = edgePort2 | |
edgeToEdgeConnectivity.operstate = "active" | |
edgeToEdgeConnectivity.adminstate = "enabled" | |
objs.append(edgeToEdgeConnectivity) | |
return objs | |
else: | |
raise Exception("OnosApiError: get_network_links()") | |
def create_point_to_point_connectivity(self, obj): | |
restCtrlUrl = self.networkdevice.restCtrlUrl | |
username = self.networkdevice.username | |
password = self.networkdevice.password | |
evcServiceType = obj.type | |
# evcServiceType = "Point_To_Point" | |
uni1 = obj.uni1 | |
uni1Id = uni1.pid | |
uni1IdToken = (uni1Id.split('.', 1))[1].split('/', 1) | |
uni1Hostname = uni1IdToken[0] | |
uni1Port = uni1IdToken[1] | |
uni1BwpCfgCbs = uni1.bwpCfgCbs | |
uni1BwpCfgEbs = uni1.bwpCfgEbs | |
uni1BwpCfgCir = uni1.bwpCfgCir | |
uni1BwpCfgEir = uni1.bwpCfgEir | |
uni2 = obj.uni2 | |
uni2Id = uni2.pid | |
uni2IdToken = (uni2Id.split('.', 1))[1].split('/', 1) | |
uni2Hostname = uni2IdToken[0] | |
uni2Port = uni2IdToken[1] | |
uni2BwpCfgCbs = uni2.bwpCfgCbs | |
uni2BwpCfgEbs = uni2.bwpCfgEbs | |
uni2BwpCfgCir = uni2.bwpCfgCir | |
uni2BwpCfgEir = uni2.bwpCfgEir | |
data = { | |
"evcServiceType": evcServiceType, | |
"SCA_ETH_Flow_Points": [ | |
{ | |
"scaEthFppUniN": {"transportPort": {"Hostname": uni1Hostname, "Port": uni1Port}, | |
"interfaceCfgIngressBwp": {"bwpCfgCbs": uni1BwpCfgCbs, | |
"bwpCfgEbs": uni1BwpCfgEbs, | |
"bwpCfgCir": uni1BwpCfgCir, | |
"bwpCfgEir": uni1BwpCfgEir}}}, | |
{ | |
"scaEthFppUniN": {"transportPort": {"Hostname": uni2Hostname, "Port": uni2Port}, | |
"interfaceCfgIngressBwp": {"bwpCfgCbs": uni2BwpCfgCbs, | |
"bwpCfgEbs": uni2BwpCfgEbs, | |
"bwpCfgCir": uni2BwpCfgCir, | |
"bwpCfgEir": uni2BwpCfgEir}}}] | |
} | |
headers = {'Content-Type': 'application/json'} | |
resp = requests.post('{}/mef-sca-api/SCA_ETH_FDFr_EC'.format(restCtrlUrl), | |
data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(username, password)) | |
if resp.status_code == 201: | |
result = resp.json() | |
message = result['message'] | |
msg_token = message.split() | |
for i, token in enumerate(msg_token): | |
if token == 'id': | |
service_id = msg_token[i + 1] | |
obj.sid = service_id | |
obj.adminstate = "enabled" | |
obj.operstate = "active" | |
return True | |
elif resp.status_code == 204: | |
obj.adminstate = "invalid" # what's the meaning? | |
obj.operstate = "inactive" | |
obj.backend_status = '204 - No network resource' | |
return False | |
elif resp.status_code == 500: | |
obj.adminstate = "enabled" | |
obj.operstate = "inactive" | |
obj.backend_status = '500 - Internal Server Error' | |
return False | |
else: | |
raise Exception("OnosApiError: create_point_to_point_connectivity()") | |
def delete_point_to_point_connectivity(self, obj): | |
restCtrlUrl = self.networkdevice.restCtrlUrl | |
username = self.networkdevice.username | |
password = self.networkdevice.password | |
evcId = obj.sid | |
resp = requests.delete("{}/mef-sca-api/SCA_ETH_FDFr_EC/{}".format(restCtrlUrl, evcId), | |
auth=HTTPBasicAuth(username, password)) | |
if resp.status_code == 200: | |
obj.adminstate = 'disabled' | |
obj.operstate = 'inactive' | |
return True | |
elif resp.status_code == 204: | |
obj.adminstate = "invalid" # what's the meaning? | |
obj.backend_status = '204 - No such network resource: {}'.format(evcId) | |
return False | |
elif resp.status_code == 500: | |
obj.adminstate = "disabled" | |
obj.backend_status = '500 - Internal Server Error' | |
return False | |
else: | |
raise Exception("OnosApiError: delete_point_to_point_connectivity()") |