@ -9,7 +9,7 @@ from jinja2 import Environment, FileSystemLoader
import requests
import base64
import json
import datetime
import sys
config = ConfigParser ( )
@ -32,7 +32,6 @@ ENV = Environment(loader=FileSystemLoader('.'))
# 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.
class Switch :
@ -53,7 +52,7 @@ class Switch:
def preprocess_hp ( self ) :
""" Prérempli certains valeurs renvoyées directement à jinja, pour plus de simplicité """
def add_to_vlans ( vlans , vlan , port , tagged = True ) :
if not vlan [ ' vlan_id ' ] in vlans :
if not tagged :
@ -69,10 +68,10 @@ class Switch:
vlans = dict ( )
for port in self . switch [ ' ports ' ] :
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 ' ] :
if port [ ' get_port_profil e ' ] [ ' vlan_untagged ' ] :
add_to_vlans ( vlans , port [ ' get_port_profil e ' ] [ ' vlan_untagged ' ] , port , tagged = False )
if port [ ' get_port_profil e ' ] [ ' vlan_tagged ' ] :
for vlan in port [ ' get_port_profil e ' ] [ ' vlan_tagged ' ] :
add_to_vlans ( vlans , vlan , port )
#Trie les ip par vlan, et les ajoute ainsi que les subnet
@ -91,8 +90,8 @@ class Switch:
dhcpv6_snooping_vlans = [ vlan [ " vlan_id " ] for vlan in self . all_vlans if vlan [ " dhcpv6_snooping " ] ]
igmp_vlans = [ vlan [ " vlan_id " ] for vlan in self . all_vlans if vlan [ " igmp " ] ]
mld_vlans = [ vlan [ " vlan_id " ] for vlan in self . all_vlans if vlan [ " mld " ] ]
ra_guarded = [ str ( port [ ' port ' ] ) for port in self . switch [ ' ports ' ] if port [ ' get_port_profil ' ] [ ' ra_guard ' ] ]
loop_protected = [ str ( port [ ' port ' ] ) for port in self . switch [ ' ports ' ] if port [ ' get_port_profil ' ] [ ' loop_protect ' ] ]
ra_guarded = [ str ( port [ ' port ' ] ) for port in self . switch [ ' ports ' ] if port [ ' get_port_profil e ' ] [ ' ra_guard ' ] ]
loop_protected = [ str ( port [ ' port ' ] ) for port in self . switch [ ' ports ' ] if port [ ' get_port_profil e ' ] [ ' loop_protect ' ] ]
self . additionals = { ' 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 , ' igmp_vlans ' : igmp_vlans , ' mld_vlans ' : mld_vlans }
@ -100,7 +99,7 @@ class Switch:
def gen_conf_hp ( self ) :
""" Génère la config pour ce switch hp """
self . preprocess_hp ( )
self . conf = self . hp_tpl . render ( switch = self . switch , settings = self . settings , additionals = self . additionals )
self . conf = self . hp_tpl . render ( switch = self . switch , settings = self . settings , additionals = self . additionals , date_gen = datetime . datetime . now ( ) )
def check_and_get_login ( self ) :
""" Récupère les login/mdp du switch, renvoie false si ils sont indisponibles """
@ -113,9 +112,9 @@ class Switch:
def login_hp ( self ) :
""" Login into rest interface of this switch """
url_login = " http:// " + self . switch [ " ipv4 " ] + " /rest/v3/login-sessions "
payload_login = {
" userName " : self . creds_dict [ " id " ] ,
" userName " : self . creds_dict [ " id " ] ,
" password " : self . creds_dict [ " pass " ]
}
get_cookie = requests . post ( url_login , data = json . dumps ( payload_login ) )
@ -202,5 +201,5 @@ for service in api_client.list("services/regen/"):
try :
sw . apply_conf ( )
except :
error = True
error = True
api_client . patch ( service [ ' api_url ' ] , data = { ' need_regen ' : error } )