@ -19,17 +19,62 @@ api_client = Re2oAPIClient(api_hostname, api_username, api_password)
client_hostname = socket . gethostname ( ) . split ( ' . ' , 1 ) [ 0 ]
print ( " get switchs conf " )
all_switchs = api_client . list ( " switchs/ports-config/ " )
all_vlans = api_client . list ( " machines/vlan/ " )
all_roles = api_client . list ( " machines/role/ " )
# Création de l'environnement Jinja
ENV = Environment ( loader = FileSystemLoader ( ' . ' ) )
# Import du fichier template dans une variable "template"
template = ENV . get_template ( " templates/hp _test .tpl" )
template = ENV . get_template ( " templates/hp .tpl" )
# Création du template final avec les valeurs contenues dans le dictionnaire "valeurs" - Ces valeurs sont positionnées dans un objet "temp", qui sera utilisé par le moteur, et que l'on retrouve dans le template.
conf = template . render ( switch = all_switchs [ 2 ] )
print ( all_switchs [ 2 ] )
def preprocess ( switch ) :
def add_to_vlans ( vlans , vlan , port , tagged = True ) :
if not vlan [ ' vlan_id ' ] in vlans :
if not tagged :
vlans [ vlan [ ' vlan_id ' ] ] = { ' ports_untagged ' : [ str ( port [ ' port ' ] ) ] , ' ports_tagged ' : [ ] , ' name ' : vlan [ ' name ' ] }
else :
vlans [ vlan [ ' vlan_id ' ] ] = { ' ports_tagged ' : [ str ( port [ ' port ' ] ) ] , ' ports_untagged ' : [ ] , ' name ' : vlan [ ' name ' ] }
else :
if not tagged :
vlans [ vlan [ ' vlan_id ' ] ] [ ' ports_untagged ' ] . append ( str ( port [ ' port ' ] ) )
else :
vlans [ vlan [ ' vlan_id ' ] ] [ ' ports_tagged ' ] . append ( str ( port [ ' port ' ] ) )
ra_guarded = [ ]
loop_protected = [ ]
vlans = dict ( )
for port in switch [ ' ports ' ] :
if port [ ' get_port_profil ' ] [ ' loop_protect ' ] :
loop_protected . append ( str ( port [ ' port ' ] ) )
if port [ ' get_port_profil ' ] [ ' ra_guard ' ] :
ra_guarded . append ( str ( port [ ' port ' ] ) )
if port [ ' get_port_profil ' ] [ ' vlan_untagged ' ] :
add_to_vlans ( vlans , port [ ' get_port_profil ' ] [ ' vlan_untagged ' ] , port , tagged = False )
if port [ ' get_port_profil ' ] [ ' vlan_tagged ' ] :
for vlan in port [ ' get_port_profil ' ] [ ' vlan_tagged ' ] :
add_to_vlans ( vlans , vlan , port )
arp_protect_vlans = [ vlan [ " vlan_id " ] for vlan in all_vlans if vlan [ " arp_protect " ] ]
dhcp_snooping_vlans = [ vlan [ " vlan_id " ] for vlan in all_vlans if vlan [ " dhcp_snooping " ] ]
dhcpv6_snooping_vlans = [ vlan [ " vlan_id " ] for vlan in all_vlans if vlan [ " dhcpv6_snooping " ] ]
ntp_servers = [ server [ " servers " ] for server in all_roles if server [ " role_type " ] == " ntp-server " ] [ 0 ]
log_servers = [ server [ " servers " ] for server in all_roles if server [ " role_type " ] == " log-server " ] [ 0 ]
return { ' ra_guarded ' : ra_guarded , ' loop_protected ' : loop_protected , ' vlans ' : vlans , ' arp_protect_vlans ' : arp_protect_vlans , ' dhcp_snooping_vlans ' : dhcp_snooping_vlans , ' dhcpv6_snooping_vlans ' : dhcpv6_snooping_vlans , ' ntp_servers ' : ntp_servers , ' log_servers ' : log_servers }
print ( " gen tpl " )
conf = template . render ( switch = all_switchs [ 2 ] , additionals = preprocess ( all_switchs [ 2 ] ) )
for switch in all_switchs :
with open ( " generated/ " + switch [ " short_name " ] + " .conf " , ' w+ ' ) as f :
f . write ( template . render ( switch = switch , additionals = preprocess ( switch ) ) )
print ( conf )