added support for different topologies
[osm/RO.git] / RO-SDN-arista / osm_rosdn_arista / aristaConfigLet.py
1 # -*- coding: utf-8 -*-
2 ##
3 # Copyright 2019 Atos - CoE Telco NFV Team
4 # All Rights Reserved.
5 #
6 # Contributors: Oscar Luis Peral, Atos
7 #
8 # Licensed under the Apache License, Version 2.0 (the "License"); you may
9 # not use this file except in compliance with the License. You may obtain
10 # a copy of the License at
11 #
12 # http://www.apache.org/licenses/LICENSE-2.0
13 #
14 # Unless required by applicable law or agreed to in writing, software
15 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
17 # License for the specific language governing permissions and limitations
18 # under the License.
19 #
20 # For those usages not covered by the Apache License, Version 2.0 please
21 # contact with: <oscarluis.peral@atos.net>
22 #
23 # Neither the name of Atos nor the names of its
24 # contributors may be used to endorse or promote products derived from
25 # this software without specific prior written permission.
26 #
27 # This work has been performed in the context of Arista Telefonica OSM PoC.
28 ##
29
30
31 class AristaSDNConfigLet:
32 _VLAN = "VLAN"
33 _VXLAN = "VXLAN"
34 _VLAN_MLAG = "VLAN-MLAG"
35 _VXLAN_MLAG = "VXLAN-MLAG"
36 topology = _VXLAN_MLAG
37
38 def __init__(self, topology=_VXLAN_MLAG):
39 self.topology = topology
40
41 _basic_int ="""
42 interface {interface}
43 !! service: {uuid}
44 switchport
45 switchport mode {type}
46 switchport {switchport_def}
47 !
48 """
49 _int_SRIOV = "trunk group {service}{vlan_id}"
50 _int_PASSTROUGH = "access vlan {vlan_id}"
51
52 def _get_interface(self, uuid, interface, vlan_id, s_type, index, i_type):
53 if i_type == "trunk":
54 switchport_def = self._int_SRIOV.format(service=s_type, vlan_id=vlan_id)
55 else:
56 switchport_def = self._int_PASSTROUGH.format(vlan_id=vlan_id)
57 return self._basic_int.format(uuid=uuid,
58 interface=interface,
59 type=i_type,
60 switchport_def=switchport_def)
61
62 def getElan_sriov(self, uuid, interface, vlan_id, index):
63 return self._get_interface(uuid, interface, vlan_id, "ELAN", index, "trunk")
64
65 def getEline_sriov(self, uuid, interface, vlan_id, index):
66 return self._get_interface(uuid, interface, vlan_id, "ELINE", index, "trunk")
67
68 def getElan_passthrough(self, uuid, interface, vlan_id, index):
69 return self._get_interface(uuid, interface, vlan_id, "ELAN", index, "dot1q-tunnel")
70
71 def getEline_passthrough(self, uuid, interface, vlan_id, index):
72 return self._get_interface(uuid, interface, vlan_id, "ELINE", index, "dot1q-tunnel")
73
74 _basic_vlan ="""
75 vlan {vlan}
76 !! service: {service} {vlan} {uuid}
77 name {service}{vlan}
78 trunk group {service}{vlan}
79 """
80 _basic_mlag =""" trunk group MLAGPEER
81 """
82 _basic_vxlan ="""interface VXLAN1
83 VXLAN vlan {vlan} vni {vni}
84 """
85 _basic_end ="!"
86
87 _configLet_VLAN = _basic_vlan + _basic_end
88 _configLet_VXLAN = _basic_vlan + _basic_vxlan + _basic_end
89 _configLet_VLAN_MLAG = _basic_vlan + _basic_mlag + _basic_end
90 _configLet_VXLAN_MLAG = _basic_vlan + _basic_mlag + _basic_vxlan + _basic_end
91
92 def _get_vlan(self, uuid, vlan_id, vni_id, s_type):
93 if self.topology == self._VLAN:
94 return self._configLet_VLAN.format(service=s_type, vlan=vlan_id, uuid=uuid)
95 if self.topology == self._VLAN_MLAG:
96 return self._configLet_VLAN_MLAG.format(service=s_type, vlan=vlan_id, uuid=uuid)
97 if self.topology == self._VXLAN:
98 return self._configLet_VXLAN.format(service=s_type, vlan=vlan_id, uuid=uuid, vni=vni_id)
99 if self.topology == self._VXLAN_MLAG:
100 return self._configLet_VXLAN_MLAG.format(service=s_type, vlan=vlan_id, uuid=uuid, vni=vni_id)
101
102 def getElan_vlan(self, uuid, vlan_id, vni_id):
103 return self._get_vlan(uuid, vlan_id, vni_id, "ELAN")
104
105 def getEline_vlan(self, uuid, vlan_id, vni_id):
106 return self._get_vlan(uuid, vlan_id, vni_id, "ELINE")
107
108 _configLet_BGP = """
109 router bgp {bgp}
110 vlan {vlan}
111 !! service: {uuid}
112 rd {loopback}:{vni}
113 route-target both {vni}:{vni}
114 redistribute learned
115 !
116 """
117
118 def _get_bgp(self, uuid, vlan_id, vni_id, loopback0, bgp, s_type):
119 if self.topology == self._VXLAN or self.topology == self._VXLAN_MLAG:
120 return self._configLet_BGP.format(uuid=uuid,
121 bgp=bgp,
122 vlan=vlan_id,
123 loopback=loopback0,
124 vni=vni_id)
125
126
127 def getElan_bgp(self, uuid, vlan_id, vni_id, loopback0, bgp):
128 return self._get_bgp(uuid, vlan_id, vni_id, loopback0, bgp, "ELAN")
129
130 def getEline_bgp(self, uuid, vlan_id, vni_id, loopback0, bgp):
131 return self._get_bgp(uuid, vlan_id, vni_id, loopback0, bgp, "ELINE")