Support for ELAN, ETREE, and VNoD Global Service

Change-Id: Iea1ee5b5b9224404a16bc9b88bc082719f75d10f
diff --git a/xos/synchronizer/providers/metronetworkrestprovider.py b/xos/synchronizer/providers/metronetworkrestprovider.py
index 1e00a90..2cb03ab 100644
--- a/xos/synchronizer/providers/metronetworkrestprovider.py
+++ b/xos/synchronizer/providers/metronetworkrestprovider.py
@@ -55,10 +55,171 @@
         else:

             raise Exception("OnosApiError: get_network_ports()")

 

+    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_eline_link(self, networkDevice, evc):

+

+        sid = evc['id']

+        uni1 = evc['SCA_ETH_Flow_Points'][0]

+        hostname = uni1['scaEthFppUniN']['transportPort']['Hostname']

+        port = uni1['scaEthFppUniN']['transportPort']['Port']

+

+        edgePort1 = NetworkEdgePort()

+        edgePort1.element = networkDevice

+        edgePort1.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)

+

+        if 'interfaceCfgIngressBwp' in uni1['scaEthFppUniN']:

+            edgePort1.bwpCfgCbs = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']

+            edgePort1.bwpCfgEbs = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']

+            edgePort1.bwpCfgCir = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']

+            edgePort1.bwpCfgEir = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']

+

+        uni2 = evc['SCA_ETH_Flow_Points'][1]

+        hostname = uni2['scaEthFppUniN']['transportPort']['Hostname']

+        port = uni2['scaEthFppUniN']['transportPort']['Port']

+

+        edgePort2 = NetworkEdgePort()

+        edgePort2.element = networkDevice

+        edgePort2.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)

+

+        if 'interfaceCfgIngressBwp' in uni1['scaEthFppUniN']:

+            edgePort2.bwpCfgCbs = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']

+            edgePort2.bwpCfgEbs = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']

+            edgePort2.bwpCfgCir = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']

+            edgePort2.bwpCfgEir = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']

+

+        edgeToEdgeConnectivity = NetworkEdgeToEdgePointConnection()

+        edgeToEdgeConnectivity.sid = sid

+        edgeToEdgeConnectivity.type = "Point_To_Point"

+        edgeToEdgeConnectivity.uni1 = edgePort1

+        edgeToEdgeConnectivity.uni2 = edgePort2

+        edgeToEdgeConnectivity.operstate = "active"

+        edgeToEdgeConnectivity.adminstate = "enabled"

+

+        return(edgeToEdgeConnectivity)

+

+    def get_network_elan_link(self, networkDevice, evc):

+

+        sid = evc['id']

+        eps = []

+

+        for ep in evc['SCA_ETH_Flow_Points']:

+            hostname = ep['scaEthFppUniN']['transportPort']['Hostname']

+            port = ep['scaEthFppUniN']['transportPort']['Port']

+

+            edgePort = NetworkEdgePort()

+            edgePort.element = networkDevice

+            edgePort.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)

+

+            if 'interfaceCfgIngressBwp' in ep['scaEthFppUniN']:

+                edgePort.bwpCfgCbs = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']

+                edgePort.bwpCfgEbs = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']

+                edgePort.bwpCfgCir = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']

+                edgePort.bwpCfgEir = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']

+

+            eps.append(edgePort)

+

+        multipointToMultipointConnectivity = NetworkMultipointToMultipointConnection()

+        multipointToMultipointConnectivity.sid = sid

+        multipointToMultipointConnectivity.type = "Multipoint_To_Multipoint"

+        multipointToMultipointConnectivity.eps = eps

+        multipointToMultipointConnectivity.operstate = "active"

+        multipointToMultipointConnectivity.adminstate = "enabled"

+

+        return(multipointToMultipointConnectivity)

+

+    def get_network_etree_link(self, networkDevice, evc):

+

+        sid = evc['id']

+        eps = []

+

+        root = evc['SCA_ETH_Flow_Points'][0]

+        hostname = root['scaEthFppUniN']['transportPort']['Hostname']

+        port = root['scaEthFppUniN']['transportPort']['Port']

+

+        edgePort = NetworkEdgePort()

+        edgePort.element = networkDevice

+        edgePort.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)

+

+        if 'interfaceCfgIngressBwp' in root['scaEthFppUniN']:

+            edgePort.bwpCfgCbs = root['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']

+            edgePort.bwpCfgEbs = root['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']

+            edgePort.bwpCfgCir = root['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']

+            edgePort.bwpCfgEir = root['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']

+

+        edgeToMultipointConnectivity = NetworkEdgeToMultipointConnection()

+        edgeToMultipointConnectivity.sid = sid

+        edgeToMultipointConnectivity.type = "Root_Multipoint"

+        edgeToMultipointConnectivity.root = edgePort

+

+        for ep in evc['SCA_ETH_Flow_Points'][1:]:

+            hostname = ep['scaEthFppUniN']['transportPort']['Hostname']

+            port = ep['scaEthFppUniN']['transportPort']['Port']

+

+            edgePort = NetworkEdgePort()

+            edgePort.element = networkDevice

+            edgePort.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)

+

+            if 'interfaceCfgIngressBwp' in ep['scaEthFppUniN']:

+                edgePort.bwpCfgCbs = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']

+                edgePort.bwpCfgEbs = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']

+                edgePort.bwpCfgCir = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']

+                edgePort.bwpCfgEir = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']

+

+            eps.append(edgePort)

+

+        edgeToMultipointConnectivity.eps = eps

+        edgeToMultipointConnectivity.operstate = "active"

+        edgeToMultipointConnectivity.adminstate = "enabled"

+

+        return(edgeToMultipointConnectivity)

+

     def get_network_links(self):

 

         objs = []

 

+        networkDevice = self.networkdevice

         restCtrlUrl = self.networkdevice.restCtrlUrl

         username = self.networkdevice.username

         password = self.networkdevice.password

@@ -68,69 +229,24 @@
 

         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

-

+                    objs.append(self.get_network_eline_link(networkDevice, evc))

+                elif (evcServiceType == "Multipoint_To_Multipoint"):

+                    objs.append(self.get_network_elan_link(networkDevice, evc))

+                elif (evcServiceType == "Root_Multipoint"):

+                    objs.append(self.get_network_etree_link(networkDevice, evc))

+                else:

+                    raise Exception("OnosApiError: get_network_links() - unknown link type")

         else:

             raise Exception("OnosApiError: get_network_links()")

 

-    def create_point_to_point_connectivity(self, obj):

+        return objs

 

-        restCtrlUrl = self.networkdevice.restCtrlUrl

-        username = self.networkdevice.username

-        password = self.networkdevice.password

+    def create_point_to_point_connectivity_json_data(self, obj):

 

-        evcServiceType = obj.type

-        # evcServiceType = "Point_To_Point"

+        p2p_json_data = {}

+        p2p_json_data["evcServiceType"] = "Point_To_Point"

 

         uni1 = obj.uni1

         uni1Id = uni1.pid

@@ -142,6 +258,19 @@
         uni1BwpCfgCir = uni1.bwpCfgCir

         uni1BwpCfgEir = uni1.bwpCfgEir

 

+        uni1_json_data = {}

+        uni1_json_data['scaEthFppUniN'] = {}

+        uni1_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid

+        uni1_json_data['scaEthFppUniN']["transportPort"] = {}

+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}

+

+        uni1_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uni1Hostname

+        uni1_json_data['scaEthFppUniN']["transportPort"]["Port"] = uni1Port

+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uni1BwpCfgCbs

+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uni1BwpCfgEbs

+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uni1BwpCfgCir

+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uni1BwpCfgEir

+

         uni2 = obj.uni2

         uni2Id = uni2.pid

         uni2IdToken = (uni2Id.split('.', 1))[1].split('/', 1)

@@ -152,27 +281,137 @@
         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}}}]

-        }

+        uni2_json_data = {}

+        uni2_json_data['scaEthFppUniN'] = {}

+        uni2_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid

+        uni2_json_data['scaEthFppUniN']["transportPort"] = {}

+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}

+

+        uni2_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uni2Hostname

+        uni2_json_data['scaEthFppUniN']["transportPort"]["Port"] = uni2Port

+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uni2BwpCfgCbs

+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uni2BwpCfgEbs

+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uni2BwpCfgCir

+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uni2BwpCfgEir

+

+        p2p_json_data["SCA_ETH_Flow_Points"] = []

+        p2p_json_data["SCA_ETH_Flow_Points"].append(uni1_json_data)

+        p2p_json_data["SCA_ETH_Flow_Points"].append(uni2_json_data)

+

+        return p2p_json_data

+

+    # nchoi: create elan service json data

+    def create_multipoint_to_multipoint_connectivity_json_data(self, obj):

+

+        mp2mp_json_data = {}

+        mp2mp_json_data["evcServiceType"] = "Multipoint_To_Multipoint"

+        mp2mp_json_data["SCA_ETH_Flow_Points"] = []

+

+        for ep in obj.eps.all():

+            uniId = ep.pid

+            uniIdToken = (uniId.split('.', 1))[1].split('/', 1)

+            uniHostname = uniIdToken[0]

+            uniPort = uniIdToken[1]

+            uniBwpCfgCbs = ep.bwpCfgCbs

+            uniBwpCfgEbs = ep.bwpCfgEbs

+            uniBwpCfgCir = ep.bwpCfgCir

+            uniBwpCfgEir = ep.bwpCfgEir

+

+            uni_json_data = {}

+            uni_json_data['scaEthFppUniN'] = {}

+            uni_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid

+            uni_json_data['scaEthFppUniN']["transportPort"] = {}

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}

+

+            uni_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uniHostname

+            uni_json_data['scaEthFppUniN']["transportPort"]["Port"] = uniPort

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uniBwpCfgCbs

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uniBwpCfgEbs

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uniBwpCfgCir

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uniBwpCfgEir

+

+            mp2mp_json_data["SCA_ETH_Flow_Points"].append(uni_json_data)

+

+        return mp2mp_json_data

+

+    # nchoi: create etree service json data

+    def create_root_multipoint_connectivity_json_data(self, obj):

+

+        r2mp_json_data = {}

+        r2mp_json_data["evcServiceType"] = "Root_Multipoint"

+        r2mp_json_data["SCA_ETH_Flow_Points"] = []

+

+        root = obj.root

+        uniId = root.pid

+        uniIdToken = (uniId.split('.', 1))[1].split('/', 1)

+        uniHostname = uniIdToken[0]

+        uniPort = uniIdToken[1]

+        uniBwpCfgCbs = root.bwpCfgCbs

+        uniBwpCfgEbs = root.bwpCfgEbs

+        uniBwpCfgCir = root.bwpCfgCir

+        uniBwpCfgEir = root.bwpCfgEir

+

+        uni_json_data = {}

+        uni_json_data['scaEthFppUniN'] = {}

+        uni_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid

+        uni_json_data['scaEthFppUniN']["transportPort"] = {}

+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}

+

+        uni_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uniHostname

+        uni_json_data['scaEthFppUniN']["transportPort"]["Port"] = uniPort

+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uniBwpCfgCbs

+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uniBwpCfgEbs

+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uniBwpCfgCir

+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uniBwpCfgEir

+

+        r2mp_json_data["SCA_ETH_Flow_Points"].append(uni_json_data)

+

+        for ep in obj.eps.all():

+            uniId = ep.pid

+            uniIdToken = (uniId.split('.', 1))[1].split('/', 1)

+            uniHostname = uniIdToken[0]

+            uniPort = uniIdToken[1]

+            uniBwpCfgCbs = ep.bwpCfgCbs

+            uniBwpCfgEbs = ep.bwpCfgEbs

+            uniBwpCfgCir = ep.bwpCfgCir

+            uniBwpCfgEir = ep.bwpCfgEir

+

+            uni_json_data = {}

+            uni_json_data['scaEthFppUniN'] = {}

+            uni_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid

+            uni_json_data['scaEthFppUniN']["transportPort"] = {}

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}

+

+            uni_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uniHostname

+            uni_json_data['scaEthFppUniN']["transportPort"]["Port"] = uniPort

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uniBwpCfgCbs

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uniBwpCfgEbs

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uniBwpCfgCir

+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uniBwpCfgEir

+

+            r2mp_json_data["SCA_ETH_Flow_Points"].append(uni_json_data)

+

+        return r2mp_json_data

+

+    def create_network_connectivity(self, obj):

+

+        restCtrlUrl = self.networkdevice.restCtrlUrl

+        username = self.networkdevice.username

+        password = self.networkdevice.password

+

+        evcServiceType = obj.type

+        if (evcServiceType == "Point_To_Point"):

+            network_connectivity_json_data = self.create_point_to_point_connectivity_json_data(obj)

+        elif (evcServiceType == "Multipoint_To_Multipoint"):

+            network_connectivity_json_data = self.create_multipoint_to_multipoint_connectivity_json_data(obj)

+        elif (evcServiceType == "Root_Multipoint"):

+            network_connectivity_json_data = self.create_root_multipoint_connectivity_json_data(obj)

+        else:

+            raise Exception("OnosApiError: get_network_links() - unknown link type")

 

         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))

+                             data=json.dumps(network_connectivity_json_data), headers=headers, auth=HTTPBasicAuth(username, password))

 

         if resp.status_code == 201:

             result = resp.json()

@@ -192,6 +431,7 @@
             obj.adminstate = "invalid"  # what's the meaning?

             obj.operstate = "inactive"

             obj.backend_status = '204 - No network resource'

+

             return False

 

         elif resp.status_code == 500:

@@ -201,9 +441,9 @@
             return False

 

         else:

-            raise Exception("OnosApiError: create_point_to_point_connectivity()")

+            raise Exception("OnosApiError: create_network_connectivity()")

 

-    def delete_point_to_point_connectivity(self, obj):

+    def delete_network_connectivity(self, obj):

 

         restCtrlUrl = self.networkdevice.restCtrlUrl

         username = self.networkdevice.username

@@ -229,4 +469,4 @@
             return False

 

         else:

-            raise Exception("OnosApiError: delete_point_to_point_connectivity()")

+            raise Exception("OnosApiError: delete_network_connectivity()")

diff --git a/xos/synchronizer/providers/metronetworktestprovider.py b/xos/synchronizer/providers/metronetworktestprovider.py
index 3c3f179..3bcbb92 100644
--- a/xos/synchronizer/providers/metronetworktestprovider.py
+++ b/xos/synchronizer/providers/metronetworktestprovider.py
@@ -3,6 +3,7 @@
 
 from xos.logger import Logger, logging
 from services.metronetwork.models import *
+from core.models import Site
 from synchronizers.metronetwork.providers.metronetworkprovider import MetroNetworkProvider
 
 logger = Logger(level=logging.INFO)
@@ -15,40 +16,18 @@
     # Method for retrieving all network ports from the backend system
     def get_network_ports(self):
         #
-        # Our Test Network Consists of three NetworkDevices (which correspond to ONOS instances):
+        # Our Test Network Consists of one NetworkDevice (which correspond to ONOS instance):
         #
-        #                    ONOS1-CORDPOD1
-        #                    ONOS2-MetroNetwork
-        #                    ONOW3-CORDPOD2
+        #  8 Ports
+        #  1 Eline (2 ports)
+        #  1 Etree (3 ports)
+        #  1 Elan (3 ports)
         #
-        #
-        #    Uni-NetworkEdgePort3--
-        #    Uni-NetworkEdgePort11-
-        #    Uni-NetworkEdgePort5--ONOS1-CORDPOD1-NetworkPort6
-        #            NetworkPort4--                     |
-        #                                        NetworkPort1-ONOS2-MetroNetwork
-        #                                        NetworkPort2-
-        #                                             |
-        #    Uni-NetworkEdgePort7--ONOS3-CORDPOD2-NetworkPort10
-        #    Uni-NetworkEdgePort9--
-        #    Uni-NetworkEdgePort12-
-        #        NetworkPort8--
-        #
-        #  Note: NetworkPorts can be endpoints of Interlinks and NetworkPointToPointConnections
-        #              they can be seem as a simple port.
-        #        NetworkEdgePorts are UNIs in the network, so are specicially user facing.
-        #
-        #
-        # InterLinks - Port1 - Port6
-        #              Port2 - Port10
-        #
-        # NetworkPointToPointConnections: Port1 - Port2
-        #                                 Port4 - Port6
-        #                                 Port8 - Port10
-        #
-        # NetworkEdgeToEdgePointConnections: Port3 - Port7
-        #
-        # NetworkMultipointConnection: Port11 - Port5 - Port9 - Port12
+        #  2 Sites - Representing Two R-CORD Pods
+        #  2 Ports, One-per-site
+        #  1 Bandwidth Profile
+        #  2 Service Spokes
+        #  1 VnodGlobalService
 
         objs = []
 
@@ -56,14 +35,9 @@
         if self.networkdevice.id != 'TestMetroNet':
             return objs
 
-        # Ok - in the test class we cheat and create one NetworkDevice with 8 NetworkEdgePorts
+        # Set the parent device id to just be the Test NetworkDevice
         device1 = NetworkDevice()
-        device1.id = 'TestCORDNet'
-        device1.administrativeState = 'enabled'
-        device1.restCtrlUrl = 'testCordPod1.onlab.net:8000'
-        device1.username = 'karaf'
-        device1.password = 'karaf'
-        objs.append(device1)
+        device1.id = self.networkdevice.id
 
         port1 = NetworkEdgePort()
         port1.element = device1
@@ -176,11 +150,6 @@
         for port in allports:
             objs.append(port)
 
-        # Ok - in the test class we cheat and take down the adjunct Fake NetworkDevices Devices
-        device1 = NetworkDevice()
-        device1.id = 'TestCORDNet'
-        objs.append(device1)
-
         return objs
 
     def get_network_links(self):
@@ -189,7 +158,7 @@
 
         # Connectivity object - Point to Point
         cordpod1device = NetworkDevice()
-        cordpod1device.id = 'TestCORDNet'
+        cordpod1device.id = self.networkdevice.id
 
         # Edge to Edge Point Connectivity Objects
         edgetoedgeconnectivity = NetworkEdgeToEdgePointConnection()
@@ -239,6 +208,81 @@
         edge2multipointconnectivity.eps_createbuffer = json.dumps(myjsonstr)
         objs.append(edge2multipointconnectivity)
 
+        # Create Objects for VnodGlobal Sort of Testing
+
+        # Bandwidth Profile
+
+        bwprofile = BandwidthProfile()
+        bwprofile.bwpcfgcbs  = 0
+        bwprofile.bwpcfgcir = 0
+        bwprofile.bwpcfgebs = 0
+        bwprofile.bwpcfgeir = 0
+        bwprofile.name = 'TestBWP'
+        objs.append(bwprofile)
+
+        # Two Sites
+        site1 = Site()
+        site1.name = 'CORDPod1'
+        site1.login_base = 'CordPod1'
+        site1.site_url = 'http://1.2.3.4:8080/VnodLocalApi'
+        objs.append(site1)
+
+        site2 = Site()
+        site2.name = 'CORDPod2'
+        site2.login_base = 'CordPod2'
+        site2.site_url = 'http://10.11.12.13:8080/VnodLocalApi'
+        objs.append(site2)
+
+        # Two Ports - one per Site
+
+        remoteport1 = RemotePort()
+        remoteport1.name = "CORDPOD1:Port1"
+        remoteport1.sitename = 'CordPod1'
+        remoteport1.edgeportname = cordpod1device.id + "." + "of:000000001/1"
+        objs.append(remoteport1)
+
+        remoteport2 = RemotePort()
+        remoteport2.name = "CORDPOD2:Port1"
+        remoteport2.sitename = 'CordPod2'
+        remoteport2.edgeportname = cordpod1device.id + "." + "of:000000001/2"
+        objs.append(remoteport2)
+
+        # One Spoke/Site
+        spoke1 = ServiceSpoke()
+        spoke1.name = 'TestSpoke1'
+        spoke1.remoteportname = "CORDPOD1:Port1"
+        spoke1.remotevnodid = 'CORDPod1:VnodLocal:1'
+        spoke1.operstate = 'inactive'
+        spoke1.adminstate = 'enabled'
+        spoke1.sitename = 'CordPod1'
+        objs.append(spoke1)
+
+        spoke2 = ServiceSpoke()
+        spoke2.name = 'TestSpoke2'
+        spoke2.remoteportname = "CORDPOD2:Port1"
+        spoke2.remotevnodid = 'CORDPod2:VnodLocal:1'
+        spoke2.operstate = 'active'
+        spoke2.adminstate = 'enabled'
+        spoke2.sitename = 'CordPod2'
+        objs.append(spoke2)
+
+        # One VnodGlobal Service
+        vnodglobal = VnodGlobalService()
+        vnodglobal.name = 'VnodGlobalPtToPtTest1'
+        vnodglobal.type = 'eline'
+        vnodglobal.vlanid = '100'
+        vnodglobal.operstate = 'active'
+        vnodglobal.adminstate = 'enabled'
+        vnodglobal.servicehandle = 'testhandle1'
+        vnodglobal.pointtopointsid = 'onos_eline_id'
+        vnodglobal.bwpname = 'TestBWP'
+
+        # Create JSON array for post-save behaviour
+        #
+        spokes = ['TestSpoke1', 'TestSpoke2']
+        myjsonstr = {'spokes': spokes}
+        vnodglobal.spokes_createbuffer = json.dumps(myjsonstr)
+        objs.append(vnodglobal)
 
         return objs