blob: 1e00a90bbba4c3686a468d84f91b80c4ec81d364 [file] [log] [blame]
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()")