Conf des switchs avec vlan wifi.
darcs-hash:20051007150455-41617-72320e53b423aa25f2a13a91b2161c724861365e.gz
This commit is contained in:
parent
991c627d35
commit
36bfbc1f2a
1 changed files with 133 additions and 84 deletions
|
@ -20,7 +20,7 @@ import string, sys, os, commands, smtplib
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
from hptools import hpswitch, sw_chbre
|
from hptools import hpswitch, sw_chbre
|
||||||
from ldap_crans import crans_ldap
|
from ldap_crans import crans_ldap
|
||||||
from annuaires import chbre_prises, uplink_prises, reverse, bat_manuels
|
from annuaires import chbre_prises, uplink_prises, reverse, bat_manuels, all_switchs
|
||||||
from random import shuffle
|
from random import shuffle
|
||||||
from gen_confs import *
|
from gen_confs import *
|
||||||
from time import localtime
|
from time import localtime
|
||||||
|
@ -31,7 +31,7 @@ class switch(gen_config) :
|
||||||
# Répertoire ou écire les fichiers de conf
|
# Répertoire ou écire les fichiers de conf
|
||||||
CONF_REP='/tmp/' # avec un / derrière
|
CONF_REP='/tmp/' # avec un / derrière
|
||||||
|
|
||||||
config = """; %(modele)s Configuration Editor; Created on release #H.08.53
|
config = """; %(modele)s Configuration Editor; Created on release #H.08.72
|
||||||
|
|
||||||
hostname "%(switch)s"
|
hostname "%(switch)s"
|
||||||
;-------------------------------------------------------- Snmp
|
;-------------------------------------------------------- Snmp
|
||||||
|
@ -60,17 +60,22 @@ logging 138.231.144.7
|
||||||
ip default-gateway 138.231.144.4
|
ip default-gateway 138.231.144.4
|
||||||
vlan 1
|
vlan 1
|
||||||
name "DEFAULT_VLAN"
|
name "DEFAULT_VLAN"
|
||||||
untagged 1-%(nb_prises)d
|
%(prises_default)s
|
||||||
no ip address
|
no ip address
|
||||||
ip igmp
|
ip igmp
|
||||||
no ip igmp querier
|
no ip igmp querier
|
||||||
exit
|
exit
|
||||||
vlan 2
|
vlan 2
|
||||||
name "Serveurs"
|
name "Adm"
|
||||||
|
%(prises_adm)s
|
||||||
ip address %(ip)s 255.255.255.0
|
ip address %(ip)s 255.255.255.0
|
||||||
tagged %(uplinks)s
|
|
||||||
exit
|
exit
|
||||||
;-------------------------------------------------------- Accès d'adminsitration
|
vlan 3
|
||||||
|
name "Wifi"
|
||||||
|
%(prises_wifi)s
|
||||||
|
no ip address
|
||||||
|
exit
|
||||||
|
;------------------------------------------------------- Accès d'adminsitration
|
||||||
no telnet-server
|
no telnet-server
|
||||||
no web-management
|
no web-management
|
||||||
aaa authentication ssh login public-key
|
aaa authentication ssh login public-key
|
||||||
|
@ -79,23 +84,23 @@ ip ssh
|
||||||
ip ssh version 2
|
ip ssh version 2
|
||||||
ip authorized-managers 138.231.144.0 255.255.255.0
|
ip authorized-managers 138.231.144.0 255.255.255.0
|
||||||
ip ssh filetransfer
|
ip ssh filetransfer
|
||||||
;-------------------------------------------------------- Spanning-tree
|
;------------------------------------------------------- Spanning-tree
|
||||||
spanning-tree
|
spanning-tree
|
||||||
; Config des uplinks
|
; Config des uplinks
|
||||||
no spanning-tree %(uplinks)s edge-port
|
no spanning-tree %(uplinks)s edge-port
|
||||||
; Config des prises adhérent
|
; Config des prises adhérent
|
||||||
spanning-tree %(non_uplinks)s point-to-point-mac auto
|
spanning-tree %(non_uplinks)s point-to-point-mac auto
|
||||||
spanning-tree %(non_uplinks)s priority 15
|
spanning-tree %(non_uplinks)s priority 15
|
||||||
;-------------------------------------------------------- Serveurs radius
|
;------------------------------------------------------- Serveurs radius
|
||||||
radius-server dead-time 2
|
radius-server dead-time 2
|
||||||
radius-server key %(radius_key)s
|
radius-server key %(radius_key)s
|
||||||
%(radius-serveurs)s
|
%(radius-serveurs)s
|
||||||
;-------------------------------------------------------- Filtrage mac
|
;------------------------------------------------------- Filtrage mac
|
||||||
aaa port-access mac-based %(non_uplinks)s
|
aaa port-access mac-based %(prises_filtrage_mac)s
|
||||||
aaa port-access mac-based %(non_uplinks)s addr-limit 3
|
aaa port-access mac-based %(prises_filtrage_mac)s addr-limit 3
|
||||||
aaa port-access mac-based %(non_uplinks)s logoff-period 3600
|
aaa port-access mac-based %(prises_filtrage_mac)s logoff-period 3600
|
||||||
aaa port-access mac-based addr-format multi-colon
|
aaa port-access mac-based addr-format multi-colon
|
||||||
;-------------------------------------------------------- Bricoles
|
;------------------------------------------------------- Bricoles
|
||||||
no cdp run
|
no cdp run
|
||||||
no stack
|
no stack
|
||||||
"""
|
"""
|
||||||
|
@ -204,7 +209,7 @@ exit
|
||||||
|
|
||||||
def configure_switch(self,switch) :
|
def configure_switch(self,switch) :
|
||||||
self.aff = anim('\tconfiguration de %s' % switch)
|
self.aff = anim('\tconfiguration de %s' % switch)
|
||||||
try :
|
try:
|
||||||
warn = self.__configure_switch(switch)
|
warn = self.__configure_switch(switch)
|
||||||
self.aff.reinit()
|
self.aff.reinit()
|
||||||
if warn :
|
if warn :
|
||||||
|
@ -221,28 +226,25 @@ exit
|
||||||
|
|
||||||
def __configure_switch(self,switch) :
|
def __configure_switch(self,switch) :
|
||||||
""" Génère le fichier de conf du switch donné """
|
""" Génère le fichier de conf du switch donné """
|
||||||
warn = ''
|
|
||||||
conn = hpswitch(switch)
|
conn = hpswitch(switch)
|
||||||
### Récupération données du switch
|
### Récupération données du switch
|
||||||
# Bat
|
# Batiment et num-Aéro du switch-b
|
||||||
bat = switch[3].lower()
|
bat = switch[3].lower()
|
||||||
|
sw_num = int(switch[5])
|
||||||
|
|
||||||
|
# Conf radius
|
||||||
from secrets import radius_key
|
from secrets import radius_key
|
||||||
shuffle(self.rad_servs)
|
shuffle(self.rad_servs)
|
||||||
rad = self.rad_template * len(self.rad_servs)
|
rad = self.rad_template * len(self.rad_servs)
|
||||||
params = { 'switch' : switch, 'bat' : bat.upper() ,
|
params = { 'switch' : switch, 'bat' : bat.upper() ,
|
||||||
'uplinks' : [] , 'non_uplinks' : [] ,
|
|
||||||
'radius_key' : radius_key ,
|
'radius_key' : radius_key ,
|
||||||
'radius-serveurs' : rad[:-1] % tuple(self.rad_servs)}
|
'radius-serveurs' : rad[:-1] % tuple(self.rad_servs)}
|
||||||
|
|
||||||
# Numéro du switch
|
|
||||||
sw_num = int(switch[5])
|
|
||||||
|
|
||||||
# Nombre de prises et modèle
|
# Nombre de prises et modèle
|
||||||
nb_prises = conn.nb_prises()
|
nb_prises = conn.nb_prises()
|
||||||
modele = conn.version()
|
modele = conn.version()
|
||||||
if not nb_prises or not modele :
|
if not nb_prises or not modele :
|
||||||
raise RuntimeError("Erreur : impossible de déterminer les caractéristiques du switch.")
|
raise RuntimeError("Erreur : impossible de déterminer les caractéristiques du switch.")
|
||||||
params['nb_prises'] = nb_prises
|
|
||||||
params['modele'] = modele.split()[1]
|
params['modele'] = modele.split()[1]
|
||||||
|
|
||||||
# IP
|
# IP
|
||||||
|
@ -254,11 +256,27 @@ exit
|
||||||
# Dictionnaire prise -> chambre
|
# Dictionnaire prise -> chambre
|
||||||
prise_chbres = reverse(bat)
|
prise_chbres = reverse(bat)
|
||||||
|
|
||||||
|
# Prises occupées par des machines du Cr@ns
|
||||||
|
crans_prises={}
|
||||||
|
for m in self.db.search('prise=%s%i*' % (bat.upper(), sw_num))['machine'] :
|
||||||
|
try: crans_prises[m.prise()].append(m)
|
||||||
|
except: crans_prises[m.prise()] = [ m ]
|
||||||
|
|
||||||
self.aff.iter = nb_prises+1
|
self.aff.iter = nb_prises+1
|
||||||
|
|
||||||
|
# Param-Aètres à affecter-b
|
||||||
|
for key in ( 'uplinks', 'non_uplinks', 'prises_filtrage_mac' ) :
|
||||||
|
params[key] = []
|
||||||
|
|
||||||
|
vlans = { 'wifi_tagged' : [] , 'wifi_untagged' : [] ,
|
||||||
|
'adm_tagged' : [] , 'adm_untagged' : [] ,
|
||||||
|
'default_tagged' : [] , 'default_untagged' : [] }
|
||||||
|
|
||||||
|
# G-Aénération de la conf de chaque prise-b
|
||||||
for prise in range(1,nb_prises+1):
|
for prise in range(1,nb_prises+1):
|
||||||
self.aff.cycle()
|
self.aff.cycle()
|
||||||
|
|
||||||
|
# Conf par d-Aéfaut : activée, autonégociation-b
|
||||||
prise_params = { 'prise' : prise , 'speed' : '', 'etat' : '' }
|
prise_params = { 'prise' : prise , 'speed' : '', 'etat' : '' }
|
||||||
annu_prise = '%i%02i' % (sw_num, prise) # prise telle que notée dans l'annuaire
|
annu_prise = '%i%02i' % (sw_num, prise) # prise telle que notée dans l'annuaire
|
||||||
|
|
||||||
|
@ -266,11 +284,49 @@ exit
|
||||||
### Prise d'uplink
|
### Prise d'uplink
|
||||||
prise_params['nom'] = uplink_prises[bat][int(annu_prise)]
|
prise_params['nom'] = uplink_prises[bat][int(annu_prise)]
|
||||||
params['uplinks'].append(prise)
|
params['uplinks'].append(prise)
|
||||||
else :
|
vlans['default_untagged'].append(prise)
|
||||||
### Prise adhérent
|
vlans['adm_tagged'].append(prise)
|
||||||
|
vlans['wifi_tagged'].append(prise)
|
||||||
|
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
||||||
|
continue
|
||||||
|
|
||||||
params['non_uplinks'].append(prise)
|
params['non_uplinks'].append(prise)
|
||||||
|
|
||||||
# Interrogation de l'annuaire
|
if crans_prises.has_key("%s%s" % (bat.upper(), annu_prise)) :
|
||||||
|
### Prise réservée à l'association
|
||||||
|
wifi=0
|
||||||
|
adm=0
|
||||||
|
autres=0
|
||||||
|
for m in crans_prises["%s%s" % (bat.upper(), annu_prise)] :
|
||||||
|
if m.canal() : wifi+=1
|
||||||
|
elif m.Nom().find('.adm.crans.org')!=-1 : adm+=1
|
||||||
|
else : autres+=1
|
||||||
|
if autres==0 and adm==0 :
|
||||||
|
# Vlan wifi uniquement
|
||||||
|
if wifi == 1 :
|
||||||
|
prise_params['nom'] = "Wifi_%s" % m.nom().split(".")[0]
|
||||||
|
else :
|
||||||
|
prise_params['nom'] = "Wifi"
|
||||||
|
vlans['wifi_untagged'].append(prise)
|
||||||
|
elif wifi==0 and autres==0 :
|
||||||
|
# Vlan adm uniquement
|
||||||
|
if amd == 1 :
|
||||||
|
prise_params['nom'] = m.nom().split(".")[0]
|
||||||
|
else :
|
||||||
|
prise_params['nom'] = "Uplink_adm"
|
||||||
|
vlans['adm_untagged'].append(prise)
|
||||||
|
else :
|
||||||
|
# Tous les vlans
|
||||||
|
prise_params['nom'] = "Prise_crans"
|
||||||
|
vlans['default_untagged'].append(prise)
|
||||||
|
vlans['adm_tagged'].append(prise)
|
||||||
|
vlans['wifi_tagged'].append(prise)
|
||||||
|
|
||||||
|
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
||||||
|
continue
|
||||||
|
|
||||||
|
vlans['default_untagged'].append(prise)
|
||||||
|
# A quelle chambre correspond la prise ?
|
||||||
if prise_chbres.has_key(annu_prise) :
|
if prise_chbres.has_key(annu_prise) :
|
||||||
chbres = prise_chbres[annu_prise]
|
chbres = prise_chbres[annu_prise]
|
||||||
elif prise_chbres.has_key(annu_prise+'-') :
|
elif prise_chbres.has_key(annu_prise+'-') :
|
||||||
|
@ -281,10 +337,12 @@ exit
|
||||||
# Prise non référencée dans l'annuaire
|
# Prise non référencée dans l'annuaire
|
||||||
prise_params['nom'] = "Pas_dans_l'annuaire"
|
prise_params['nom'] = "Pas_dans_l'annuaire"
|
||||||
prise_params['etat']='\n disable'
|
prise_params['etat']='\n disable'
|
||||||
chbres = []
|
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
||||||
|
continue
|
||||||
|
|
||||||
|
params['prises_filtrage_mac'].append(prise)
|
||||||
|
|
||||||
## Configuration de la prise adhérent
|
## Configuration de la prise adhérent
|
||||||
if chbres :
|
|
||||||
# Nom
|
# Nom
|
||||||
prise_params['nom'] = 'Chambre'
|
prise_params['nom'] = 'Chambre'
|
||||||
if len(chbres) > 1 : prise_params['nom'] += 's'
|
if len(chbres) > 1 : prise_params['nom'] += 's'
|
||||||
|
@ -292,19 +350,14 @@ exit
|
||||||
prise_params['nom'] += '_%s%s' % (bat.upper(), chbre)
|
prise_params['nom'] += '_%s%s' % (bat.upper(), chbre)
|
||||||
|
|
||||||
# Besoin d'activer la prise ?
|
# Besoin d'activer la prise ?
|
||||||
act = 0
|
prise_params['etat']='\n disable'
|
||||||
for chbre in chbres :
|
for chbre in chbres :
|
||||||
res = self.db.search('chbre=%s%s&paiement=ok' % (bat.upper(), chbre) )
|
res = self.db.search('chbre=%s%s&paiement=ok' % (bat.upper(), chbre) )
|
||||||
for res in res['adherent'] + res['club'] :
|
for res in res['adherent'] + res['club'] :
|
||||||
if 'bloq' not in res.blacklist_actif() :
|
if 'bloq' not in res.blacklist_actif() :
|
||||||
act = 1
|
prise_params['etat']=''
|
||||||
break
|
break
|
||||||
|
|
||||||
if not act :
|
|
||||||
# Peut être une borne wifi ?
|
|
||||||
if not self.db.search('prise=%s%s' % (bat.upper(), annu_prise))['machine'] :
|
|
||||||
prise_params['etat']='\n disable'
|
|
||||||
|
|
||||||
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
params['INTERFACES_CONF'] += self.interface_template % prise_params
|
||||||
|
|
||||||
# Petite verif
|
# Petite verif
|
||||||
|
@ -316,6 +369,7 @@ exit
|
||||||
transforme une liste de prises en une chaine pour le switch
|
transforme une liste de prises en une chaine pour le switch
|
||||||
exemple : 1, 3, 4, 5, 6, 7, 9, 10, 11, 12 => 1,3-7,9-12
|
exemple : 1, 3, 4, 5, 6, 7, 9, 10, 11, 12 => 1,3-7,9-12
|
||||||
"""
|
"""
|
||||||
|
if not liste_prise : return ''
|
||||||
liste_prise.sort()
|
liste_prise.sort()
|
||||||
|
|
||||||
# initialisation
|
# initialisation
|
||||||
|
@ -340,29 +394,29 @@ exit
|
||||||
|
|
||||||
return ','.join(result)
|
return ','.join(result)
|
||||||
|
|
||||||
params['ports_wifi'] = list(params['uplinks'])
|
# Saut de ligne parasite
|
||||||
|
|
||||||
# Borne wifi sur la prise ?
|
|
||||||
for m in self.db.search('host=*.wifi.crans.org&prise=%s%i*' % (bat.upper(), sw_num))['machine'] :
|
|
||||||
params['ports_wifi'].append(int(m.prise()[2:]))
|
|
||||||
|
|
||||||
params['inv_ports_wifi'] = []
|
|
||||||
for prise in range(1,nb_prises+1) :
|
|
||||||
if prise not in params['ports_wifi'] :
|
|
||||||
params['inv_ports_wifi'].append(prise)
|
|
||||||
|
|
||||||
|
|
||||||
# Conversion des listes
|
|
||||||
for key in [ 'ports_wifi', 'inv_ports_wifi', 'uplinks', 'non_uplinks' ] :
|
|
||||||
params[key] = mk_list(params[key])
|
|
||||||
params['INTERFACES_CONF'] = params['INTERFACES_CONF'][:-1]
|
params['INTERFACES_CONF'] = params['INTERFACES_CONF'][:-1]
|
||||||
|
|
||||||
|
# Conversion des listes
|
||||||
|
for key in [ 'prises_filtrage_mac', 'uplinks', 'non_uplinks' ] :
|
||||||
|
params[key] = mk_list(params[key])
|
||||||
|
for key, prises in vlans.items() :
|
||||||
|
vlans[key]=mk_list(prises)
|
||||||
|
|
||||||
|
# Config des vlan
|
||||||
|
for v in ('default', 'adm', 'wifi') :
|
||||||
|
params['prises_%s' % v] = ''
|
||||||
|
for t in ('tagged' , 'untagged') :
|
||||||
|
if vlans['%s_%s' % (v,t)] :
|
||||||
|
params['prises_%s' % v] += '\n %s %s' % (t, vlans['%s_%s' % (v,t)])
|
||||||
|
# Saut de ligne parasite
|
||||||
|
params['prises_%s' % v] = params['prises_%s' % v][4:]
|
||||||
|
|
||||||
|
# Ecriture
|
||||||
fd = self._open_conf(self.CONF_REP + switch + '.conf')
|
fd = self._open_conf(self.CONF_REP + switch + '.conf')
|
||||||
fd.write(self.config % params)
|
fd.write(self.config % params)
|
||||||
fd.close()
|
fd.close()
|
||||||
|
|
||||||
return warn
|
|
||||||
|
|
||||||
if __name__ == '__main__' :
|
if __name__ == '__main__' :
|
||||||
if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 :
|
if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 :
|
||||||
print "%s <switch>" % sys.argv[0].split('/')[-1].split('.')[0]
|
print "%s <switch>" % sys.argv[0].split('/')[-1].split('.')[0]
|
||||||
|
@ -370,12 +424,7 @@ if __name__ == '__main__' :
|
||||||
sys.exit(255)
|
sys.exit(255)
|
||||||
|
|
||||||
if sys.argv[1] == 'all' :
|
if sys.argv[1] == 'all' :
|
||||||
switchs = ( 'batg-6', 'batg-5', 'batg-4', 'batg-2', 'batg-1', 'batg' ,
|
switchs = all_switchs()
|
||||||
'batj-2', 'batj-1', 'batj' ,
|
|
||||||
'bati-2', 'bati-1', 'bati' ,
|
|
||||||
'bath-1', 'bath' ,
|
|
||||||
'batc-2', 'batc-1', 'batc' ,
|
|
||||||
'batb-3', 'batb-2', 'batb-1', 'batb' )
|
|
||||||
else :
|
else :
|
||||||
switchs = tuple(sys.argv[1:])
|
switchs = tuple(sys.argv[1:])
|
||||||
sw = switch(switchs)
|
sw = switch(switchs)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue