[debian/*.py] remove trailing whitespaces

Ignore-this: f62e84c258c847013d307d12acdf489e

darcs-hash:20090309212356-0445d-d8338d06f968f316fcd085446023123be87040f7.gz
This commit is contained in:
Stephane Glondu 2009-03-09 22:23:56 +01:00
parent cc31727b60
commit eae0d21f83
18 changed files with 352 additions and 352 deletions

View file

@ -1,10 +1,10 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""
Fichier de base d'interface avec les switchs manageables.
Donne la classe switch qui permet d'effectuer les opérations
Donne la classe switch qui permet d'effectuer les opérations
élémentaires sur les switchs manageable HP 26xx.
Frédéric PAUGET
@ -52,7 +52,7 @@ import pexpect
class ssh :
""" Ouverture d'une connexion ssh, envoi de commandes et récupération du résultat """
def __init__(self,host) :
""" Ouverture d'une connexion ssh vers le switch choisi """
self.switch = host.split('.')[0] # On garde pas le fqdn
@ -68,14 +68,14 @@ class ssh :
traceback.print_exc()
print "Contenu du buffer :"
print self.ssh.before
def __del__(self) :
"""Ferme la connexion : envoi logout et attend """
self.ssh.sendline("logout")
self.ssh.send("y")
self.ssh.send("y")
self.ssh.close()
def send_cmd(self,cmd,timeout=15):
""" Envoi une commande, attend le prompt et retourne la réponse """
# Envoi de la commande
@ -89,7 +89,7 @@ class ssh :
'%s\(config\)# ' % self.switch,
'quit: Control-C'],
timeout=timeout)
self.__sshout = self.__sshout + self.ssh.before
if index == 0:
# On répond oui
@ -100,7 +100,7 @@ class ssh :
elif index == 2:
# On doit continuer, on envoie espace
self.ssh.send(" ")
return self.__sshout
except pexpect.TIMEOUT:
print "Timeout !"
@ -115,7 +115,7 @@ class snmp :
""" host doit être la machine sur laquelle se connecter
version est la verion du protocole snmp à utiliser : 1, 2c ou 3
le reste des données doit être ou non fourni suivant la version
pour v1 et v2c seule la communauté est prise en compte
pour v3 authentication_protocol, authentication_pass et username sont requis si accès en authNoPriv
si privacy_pass est fourni accès en authPriv
@ -127,7 +127,7 @@ class snmp :
self._machine = cl.search("host=%(host)s" % {'host': host})["machineCrans"][0]
except IndexError:
raise ValueError(u"Cette machine n'est pas un switch du Cr@ns")
# l'engineid du switch n'est que sa mac avec quelques fioritures autour...
mac = self._machine.mac().replace(':', '')
self._engineid = '0000000b0000%(mac)s0' % {'mac': mac[:-1]}
@ -136,25 +136,25 @@ class snmp :
self.options = "-v %s -c '%s' %s " % ( version, community, host )
elif version =='3' :
self.options = "-v 3 -e %s -u %s -a %s -A '%s' -l authNoPriv" % ( self._engineid, username, authentication_protocol, authentication_pass )
if privacy_pass :
if privacy_pass :
self.options += " -x DES -X '%s' -l authPriv" % privacy_pass
self.options += " %s " % host
else :
raise ValueError('Version incorrecte')
def __exec(self,cmd) :
s, r = getstatusoutput(cmd)
if s :
r=r.replace('snmpget: ','')
raise ConversationError(r,cmd)
return r
def get(self,oid) :
""" Retourne le résultat correspondant à l'oid demandé """
return self.__exec('snmpget -O vq %s %s ' % ( self.options, oid ) )
def get_string(self,oid) :
""" Retourne le resultat convertit en String correspondant à l'oid demandé. Fonctionne avec les types de depart String, Integer, Hex-String. Raise ValueError sinon. """
""" Retourne le resultat convertit en String correspondant à l'oid demandé. Fonctionne avec les types de depart String, Integer, Hex-String. Raise ValueError sinon. """
s= self.__exec('snmpget -O v %s %s ' % ( self.options, oid ) )
if s=="\"\"":
return ""
@ -168,16 +168,16 @@ class snmp :
return unicode(var)
else:
raise ValueError('Type inconnu')
def set(self,oid,typ,val) :
""" Change la valeur le l'oid donné.
""" Change la valeur le l'oid donné.
type est le type de la valeur
val est la valeur à écrire
"""
return self.__exec('snmpset -O vq %s %s %s %s' % (self.options, oid, typ, val ) )
def walk(self,base_oid) :
""" Retourne le résultat de snmpwalk
""" Retourne le résultat de snmpwalk
le retour est un dictionnaire { oid : valeur }
"""
lignes = self.__exec('snmpwalk -O q %s %s' % (self.options, base_oid ) ).split('\n')
@ -190,14 +190,14 @@ class snmp :
#############################################################################################
### Gestion des switchs proprement dite
class hpswitch :
""" Classe pour l'administration des switchs HP. """
# Variables internes
__debug=0
__logDest=stderr
# Variables internes
switch = None # nom du switch
prise = ''
@ -207,17 +207,17 @@ class hpswitch :
""" Switch doit être le nom du switch """
if self.__debug : self.__logDest.write("HP DEBUG : __init__(switch=%s)\n" % switch )
self.switch = switch.lower()
# Config snmp
self.get, self.set, self.walk = config_snmp_secrete(snmp,switch)
def send_cmd(self,cmd,timout=15) :
""" Envoi une commande par ssh au switch """
if not self.__conn_ssh :
self.__conn_ssh = ssh(self.switch)
return self.__conn_ssh.send_cmd(cmd,timout)
def show_prise_mac(self,prise='') :
""" Retourne le(s) adresse(s) MAC présentes sur la prise."""
if not prise : prise = self.prise
@ -248,18 +248,18 @@ class hpswitch :
# On a rien trouvé
return None
def __scp(self,destination,fichier) :
if self.__debug :
self.__logDest.write("HP DEBUG : scp(%s,%s,%s)\n" % (fichier, self.switch, destination))
if exists(fichier):
system('scp %s %s:%s' % (fichier, self.switch, destination))
def update(self,file=None) :
""" Upload le fichier de config fourni
Fait rebooter le switch """
self.__scp('cfg/startup-config',file)
def upgrade(self,file=None) :
""" Changement de firmware,
le firmware est dans le fichier fourni en argument
@ -270,18 +270,18 @@ class hpswitch :
""" Ajoute la clef publique ssh aux clefs autorises
par le switch """
self.scp('ssh/mgr_keys',file)
def multicast(self,ip='') :
""" Donne la liste des ports du swich inscrits au flux multicast donné
Si aucun flux donné teste tous les flux multicast possibles.
""" Donne la liste des ports du swich inscrits au flux multicast donné
Si aucun flux donné teste tous les flux multicast possibles.
Retourne un dictionnaire : { adresse du flux : [ ports inscrits ] }
"""
if self.__debug : self.__logDest.write("HP DEBUG : multicast(ip=%s)\n" % ip)
if ip :
if ip :
data = self.walk('STATISTICS-MIB::hpIgmpStatsPortIndex2.%s' % ip)
return { ip : data.values() }
else :
data = self.walk('STATISTICS-MIB::hpIgmpStatsPortIndex2')
result = {}
@ -291,14 +291,14 @@ class hpswitch :
except : continue
result.setdefault(ip,[])
result[ip].append(port)
return result
def nb_prises(self) :
""" Retourne le nombre de prises du switch """
if self.__debug : self.__logDest.write("HP DEBUG : nb_prises()\n")
return int(findall(r'Switch 26([0-9]{2})', self.version())[0])
def version(self) :
""" Retourne la version du firmware du switch """
if self.__debug : self.__logDest.write("HP DEBUG : version()\n")
@ -309,13 +309,13 @@ class hpswitch :
if not prise : prise = self.prise
if self.__debug : self.__logDest.write("HP DEBUG : enable(prise=%s)\n" % prise)
return self.set('IF-MIB::ifAdminStatus.%d' % int(prise), 'i', 1)
def disable(self,prise=0) :
""" Désactive une prise """
if not prise : prise = self.prise
if self.__debug : self.__logDest.write("HP DEBUG : disable(prise=%s)\n" % prise)
return self.set('IF-MIB::ifAdminStatus.%d' % int(prise), 'i', 2)
def __is(self,oid,prise) :
if not prise : prise = self.prise
prise = str(prise)
@ -328,7 +328,7 @@ class hpswitch :
return nb
prise = prise.replace('-','')
return self.get(oid + '.' + prise) == 'up'
def is_enable(self,prise=0) :
""" Retoune True ou False suivant si la prise est activée ou non
Si prise=all retourne le nombre de prises activées sur le switch """
@ -340,7 +340,7 @@ class hpswitch :
Si prise=all retourne le nombre de prises up sur le switch """
if prise != 'all': prise = int(prise)
return self.__is('IF-MIB::ifOperStatus',prise)
def nom(self,nom=None,prise=0) :
""" Retourne ou attribue le nom à la prise fournie """
if not prise : prise = self.prise
@ -349,19 +349,19 @@ class hpswitch :
return self.get(oid)
else :
self.set(oid, 's' , nom)
def eth_mode(self,mode=None,prise=0) :
""" Fixe ou retourne le mode d'une prise
mode est un tuple : (vitesse, duplex) ou simplement "auto"
""" Fixe ou retourne le mode d'une prise
mode est un tuple : (vitesse, duplex) ou simplement "auto"
vitesse est : 10 100 ou 1000
duplex est FD, HD ou auto
"""
if not prise : prise = self.prise
oid = 'CONFIG-MIB::hpSwitchPortFastEtherMode.%d' % int(prise)
if mode == None :
return self.get(oid)
# Conversion du mode
if mode == 'auto' :
code = 5
@ -391,7 +391,7 @@ class hpswitch :
return result
class sw_chbre(hpswitch) :
def __init__(self,chbre) :
# On retrouve la chbre dans l'annuaire
@ -410,20 +410,20 @@ class sw_chbre(hpswitch) :
self.prise10Mb = False
except :
raise ValueError('Chambre %s inconnue' % chbre)
# Config snmp
self.get, self.set, self.walk = config_snmp_secrete(snmp,self.switch)
def reconfigure(self) :
""" Reconfigure la prise (nom et vitesse) """
in10 = self.eth_mode().find('10Mbits') != 1
if self.prise10Mb and not in10 :
self.eth_mode(('10','auto'))
elif not self.prise10Mb and in10 :
self.eth_mode('auto')
nom = 'Chambre_%s' % self.chbre.capitalize()
if nom != self.nom() :
self.nom(nom)
@ -448,13 +448,13 @@ class sw_prise(sw_chbre):
if __name__ == '__main__' :
import sys, getopt, sre
try :
options, arg = getopt.getopt(sys.argv[1:], 'U:hc:', [ 'help', 'snmp' ])
except getopt.error, msg :
print msg
sys.exit(1)
cmds = []
firmware=''
wait=True
@ -466,17 +466,17 @@ if __name__ == '__main__' :
print "L'envoi de firmware ne fait pas rebooter le switch"
print "L'option --snmp ajoute les commandes de reconfiguration snmp"
sys.exit(0)
elif opt=='-c' :
elif opt=='-c' :
cmds.append(val)
elif opt=='-U' :
firmware=val
elif opt=='--snmp' :
cmds.append(reconf_snmp)
cmds.append("write memory")
# Quels switchs ?
switchs=[]
if arg :
@ -484,20 +484,20 @@ if __name__ == '__main__' :
for sw in all_switchs() :
if re.match(sw) :
switchs.append(sw)
if not switchs :
print "Aucun switch trouvé"
print "Note : il faut une _regex_ (!= wilcards au sens du shell)"
sys.exit(3)
if not cmds and not firmware :
cmds=map(str.strip,sys.stdin.readlines())
# Ce que l'on va faire
print "Commandes :\n\t", '\n\t'.join(cmds)
print "\nSwitchs : ", ' '.join(switchs)
print "\nSwitchs : ", ' '.join(switchs)
print
try:
raw_input("Appuyer sur entrée pour continuer")
except EOFError:
@ -511,8 +511,8 @@ if __name__ == '__main__' :
s = hpswitch(sw)
if firmware :
s.upgrade(firmware)
for cmd in cmds :
for cmd in cmds :
print s.send_cmd(cmd)
except :
print 'ERREUR'