added support for different topologies
[osm/RO.git] / RO-SDN-arista / osm_rosdn_arista / aristaConfigLet.py
index a0d3c5e..8e34091 100644 (file)
 \r
 \r
 class AristaSDNConfigLet:\r
-    _configLet_SRIOV = """\r
+    _VLAN = "VLAN"\r
+    _VXLAN = "VXLAN"\r
+    _VLAN_MLAG = "VLAN-MLAG"\r
+    _VXLAN_MLAG = "VXLAN-MLAG"\r
+    topology = _VXLAN_MLAG\r
+\r
+    def __init__(self, topology=_VXLAN_MLAG):\r
+        self.topology = topology\r
+\r
+    _basic_int ="""\r
 interface {interface}\r
    !! service: {uuid}\r
    switchport\r
-   switchport mode trunk\r
-   switchport trunk group {service}{vlan_id}\r
+   switchport mode {type}\r
+   switchport {switchport_def}\r
 !\r
 """\r
-\r
-    def _get_sriov(self, uuid, interface, vlan_id, s_type, index):\r
-        return self._configLet_SRIOV.format(uuid=uuid, interface=interface, service=s_type, vlan_id=vlan_id)\r
+    _int_SRIOV = "trunk group {service}{vlan_id}"\r
+    _int_PASSTROUGH = "access vlan {vlan_id}"\r
+\r
+    def _get_interface(self, uuid, interface, vlan_id, s_type, index, i_type):\r
+        if i_type == "trunk":\r
+            switchport_def = self._int_SRIOV.format(service=s_type, vlan_id=vlan_id)\r
+        else:\r
+            switchport_def = self._int_PASSTROUGH.format(vlan_id=vlan_id)\r
+        return self._basic_int.format(uuid=uuid,\r
+                                      interface=interface,\r
+                                      type=i_type,\r
+                                      switchport_def=switchport_def)\r
 \r
     def getElan_sriov(self, uuid, interface, vlan_id, index):\r
-        return self._get_sriov(uuid, interface, vlan_id, "ELAN", index)\r
+        return self._get_interface(uuid, interface, vlan_id, "ELAN", index, "trunk")\r
 \r
     def getEline_sriov(self, uuid, interface, vlan_id, index):\r
-        return self._get_sriov(uuid, interface, vlan_id, "ELINE", index)\r
-\r
-    _configLet_PASSTROUGH = """\r
-interface {interface}\r
-   !! service: {uuid}\r
-   switchport\r
-   switchport mode dot1q-tunnel\r
-   switchport access vlan {vlan_id}\r
-!\r
-"""\r
-\r
-    def _get_passthrough(self, uuid, interface, vlan_id, s_type, index):\r
-        return self._configLet_PASSTROUGH.format(uuid=uuid, interface=interface, vlan_id=vlan_id)\r
+        return self._get_interface(uuid, interface, vlan_id, "ELINE", index, "trunk")\r
 \r
     def getElan_passthrough(self, uuid, interface, vlan_id, index):\r
-        return self._get_passthrough(uuid, interface, vlan_id, "ELAN", index)\r
+        return self._get_interface(uuid, interface, vlan_id, "ELAN", index, "dot1q-tunnel")\r
 \r
     def getEline_passthrough(self, uuid, interface, vlan_id, index):\r
-        return self._get_passthrough(uuid, interface, vlan_id, "ELINE", index)\r
+        return self._get_interface(uuid, interface, vlan_id, "ELINE", index, "dot1q-tunnel")\r
 \r
-    _configLet_VLAN = """\r
+    _basic_vlan ="""\r
 vlan {vlan}\r
    !! service: {service} {vlan} {uuid}\r
    name {service}{vlan}\r
    trunk group {service}{vlan}\r
-   trunk group MLAGPEER\r
-\r
-interface VXLAN1\r
+"""\r
+    _basic_mlag ="""   trunk group MLAGPEER\r
+"""\r
+    _basic_vxlan ="""interface VXLAN1\r
    VXLAN vlan {vlan} vni {vni}\r
-!\r
 """\r
+    _basic_end ="!"\r
+\r
+    _configLet_VLAN = _basic_vlan + _basic_end\r
+    _configLet_VXLAN = _basic_vlan + _basic_vxlan + _basic_end\r
+    _configLet_VLAN_MLAG = _basic_vlan + _basic_mlag + _basic_end\r
+    _configLet_VXLAN_MLAG = _basic_vlan + _basic_mlag + _basic_vxlan + _basic_end\r
 \r
     def _get_vlan(self, uuid, vlan_id, vni_id, s_type):\r
-        return self._configLet_VLAN.format(service=s_type, vlan=vlan_id, uuid=uuid, vni=vni_id)\r
+        if self.topology == self._VLAN:\r
+            return self._configLet_VLAN.format(service=s_type, vlan=vlan_id, uuid=uuid)\r
+        if self.topology == self._VLAN_MLAG:\r
+            return self._configLet_VLAN_MLAG.format(service=s_type, vlan=vlan_id, uuid=uuid)\r
+        if self.topology == self._VXLAN:\r
+            return self._configLet_VXLAN.format(service=s_type, vlan=vlan_id, uuid=uuid, vni=vni_id)\r
+        if self.topology == self._VXLAN_MLAG:\r
+            return self._configLet_VXLAN_MLAG.format(service=s_type, vlan=vlan_id, uuid=uuid, vni=vni_id)\r
 \r
     def getElan_vlan(self, uuid, vlan_id, vni_id):\r
         return self._get_vlan(uuid, vlan_id, vni_id, "ELAN")\r
@@ -97,7 +116,13 @@ router bgp {bgp}
 """\r
 \r
     def _get_bgp(self, uuid, vlan_id, vni_id, loopback0, bgp, s_type):\r
-        return self._configLet_BGP.format(uuid=uuid, bgp=bgp, vlan=vlan_id, loopback=loopback0, vni=vni_id)\r
+        if self.topology == self._VXLAN or self.topology == self._VXLAN_MLAG:\r
+            return self._configLet_BGP.format(uuid=uuid,\r
+                                              bgp=bgp,\r
+                                              vlan=vlan_id,\r
+                                              loopback=loopback0,\r
+                                              vni=vni_id)\r
+\r
 \r
     def getElan_bgp(self, uuid, vlan_id, vni_id, loopback0, bgp):\r
         return self._get_bgp(uuid, vlan_id, vni_id, loopback0, bgp, "ELAN")\r