diff --git a/gestion/gen_confs/switchs.py b/gestion/gen_confs/switchs.py index bab886a1..bb9300ec 100755 --- a/gestion/gen_confs/switchs.py +++ b/gestion/gen_confs/switchs.py @@ -17,24 +17,20 @@ import string, sys, os, commands, smtplib -import snmp - sys.path.append('/usr/scripts/gestion') +from hptools import hpswitch, sw_chbre from ldap_crans import crans_ldap, ann_scol from annuaires import chbre_prises, uplink_prises, reverse from gen_confs import * from time import localtime -# from qqch import switchs # Liste des switchs -bat_switchs = [ 'b', 'c', 'h', 'i', 'g' ] - -sys.path.append('/CRANS/code') -from hptools import hp +# Liste des switchs +bat_switchs = [ 'b', 'c' , 'h' , 'i' , 'g' , 'j' ] class switch(gen_config) : # Répertoire ou écire les fichiers de conf CONF_REP='/var/tftp_switchs/' # avec un / derrière - config = """; J4899A Configuration Editor; Created on release #H.07.32 + config = """; %(modele)s Configuration Editor; Created on release #H.07.32 hostname "%(switch)s" ;-------------------------------------------------------- Snmp @@ -68,8 +64,8 @@ vlan 1 ip igmp no ip igmp querier exit -%(MAC_FILTER)s ;-------------------------------------------------------- Accès d'adminsitration +no telnet-server no web-management aaa authentication ssh login public-key ip ssh @@ -86,8 +82,6 @@ no spanning-tree %(uplinks)s edge-port spanning-tree %(non_uplinks)s point-to-point-mac auto spanning-tree %(non_uplinks)s priority 15 no cdp run -;-------------------------------------------------------- Avec mot de passe ;) -password manager """ interface_template = """interface %(prise)i%(etat)s @@ -100,8 +94,8 @@ exit def __init__(self,truc): """ truc est soit : - * une liste de chambres => reconfig de ces chambres - * un nom de switch => reconfig de ce swith""" + * une _liste_ de chambres => reconfig de ces chambres + * un _tulpe_ de noms de switch => reconfig de ces swiths""" self.db = crans_ldap() # connexion LDAP if type(truc) == list : # On enlève la chambre "CRA" et "????" @@ -115,8 +109,15 @@ exit return 'switchs' def restart(self) : - # Rien à faire ici - pass + if self.chbre : + # Tout est déja fait + return + ####### Vu qu'il n'y a pas de serveur tftp ici + # on excécute pas le truc en dessous + #for switch in self.switch : + # self.aff = anim('\treboot de %s' % switch) + # sw = hptools.switch(switch) + # sw.update() def gen_conf(self) : if self.chbres : @@ -124,47 +125,36 @@ exit for chbre in self.chbres : self.configure_chbre(chbre) elif self.switch : - self.configure_switch(self.switch) + for switch in self.switch : + self.configure_switch(switch) def configure_chbre(self,chbre) : """ Recontigure la chambre fournie chambre """ - bat = chbre[0].lower() - a = self.db.search('chbre=%s&paiement=%i' % (chbre,ann_scol)) - a = a['adherent'] + a['club'] - if a and 'bloq' not in a[0].blacklist_actif() : - # Il faut activer la prise - anim('\tactivation chbre %s' % chbre) - action = 'enable' - else : - # Il faut désactiver la prise - anim('\tdésactivation chbre %s' % chbre) - action = 'disable' - try : - if bat in bat_switchs : - # Action sur le switch - prise = chbre_prises[bat][chbre[1:].lower()] - sw=hp(bat,int(prise[0])) - if prise[-1]=='-' : - prise=prise[:-1] - sw.set_prise(int(prise[1:4]),'speed-duplex auto-10') - r = sw.set_prise(int(prise[1:4]),action) - sw.close() - if not r : - raise RuntimeError('Erreur de communiquation') + bat = chbre[0].lower() + prise = sw_chbre(chbre) + a = self.db.search('chbre=%s&paiement=%i' % (chbre,ann_scol)) + a = a['adherent'] + a['club'] + sujet = '' + if a and 'bloq' not in a[0].blacklist_actif() : + # Il faut activer la prise + anim('\tactivation chbre %s' % chbre) + if bat in bat_switchs : prise.enable() + else : sujet = "Chambre %s à brancher." % chbre else : - # Mail au bat + # Il faut désactiver la prise + anim('\tdésactivation chbre %s' % chbre) + if bat in bat_switchs : prise.disable() + else : sujet = "Chambre %s à débrancher." % chbre + + if sujet : + # Il faut envoyer un mail To = "clef%s@crans.org" % bat From = To conn=smtplib.SMTP('localhost') txt_mail = "From: Crans scripts <%(From)s>\n" txt_mail+= "To: %(To)s\n" - txt_mail+= "Subject: (CRANS) " - if action == 'disable': - txt_mail+= "Chambre %s à débrancher." % chbre - else: - txt_mail+= "Chambre %s à brancher." % chbre - txt_mail+= '\n\nMerci.' + txt_mail+= "Subject: (CRANS) %s\n\nMerci." % sujet conn.sendmail(From, To , txt_mail % { 'From' : From, 'To' : To }) conn.quit() print OK @@ -197,7 +187,7 @@ exit def __configure_switch(self,switch) : """ Génère le fichier de conf du switch donné """ warn = '' - conn = snmp.hptools(switch) + conn = hpswitch(switch) def add_prise(dict, key, prise) : """ ajoute la prise à la liste de prise du dictionnaire dict dict[key] est ensuite de la forme 1,3-7,9-12 (ajout des prises @@ -234,18 +224,20 @@ exit except : sw_num = 0 - # Nombre de prises + # Nombre de prises et modèle nb_prises = conn.nb_prises() - if not nb_prises : - raise RuntimeError("Erreur : impossible de déterminer le nombre de ports") + modele = conn.version() + if not nb_prises or not modele : + raise RuntimeError("Erreur : impossible de déterminer les caractéristiques du switch.") params['nb_prises'] = nb_prises + params['modele'] = modele.split()[1] # IP params['ip'] = commands.getoutput("host %s" % switch).split()[-1] ### Configuration prises params['INTERFACES_CONF'] = '' - params['MAC_FILTER'] = '' + params['MAC_FILTER'] = '' # Pas pour l'instant # Dictionnaire prise -> chambre prise_chbres = reverse(bat) @@ -271,7 +263,7 @@ exit chbres = prise_chbres[annu_prise] elif prise_chbres.has_key(annu_prise+'-') : # Prise en 10 - prise_params['speed'] = ' speed-duplex auto-10\n' + prise_params['speed'] = '\n speed-duplex auto-10' chbres = prise_chbres[annu_prise+'-'] else : # Prise non référencée dans l'annuaire @@ -311,7 +303,7 @@ exit params['MAC_FILTER'] += self.filtre_mac_template % ( prise, macs ) params['INTERFACES_CONF'] += self.interface_template % prise_params - + # Petites verif if not params.has_key('uplinks') or not params.has_key('non_uplinks') : raise RuntimeError('Switch sans uplink ou sans prise adhérent.') @@ -323,11 +315,11 @@ exit return warn if __name__ == '__main__' : - if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) != 2 : + if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 : print "%s " % sys.argv[0].split('/')[-1].split('.')[0] - print "Génération du fichier de configuration de switch donnée." + print "Génération du fichier de configuration des switchs donnés." sys.exit(255) - sw = switch(sys.argv[1]) + sw = switch(tuple(sys.argv[1:])) sw.debug = 1 sw.reconfigure()