[gestion/*.py] Ré-encodage de certains scripts en UTF-8

Ignore-this: dafa22ed56eaf0d816fd089e42672eb5

darcs-hash:20090309212124-0445d-09ac8ae4052b6f333706be1baa1c7f4d94455fd5.gz
This commit is contained in:
Stephane Glondu 2009-03-09 22:21:24 +01:00
parent 7addc503a8
commit cc31727b60
21 changed files with 1351 additions and 1351 deletions

View file

@ -1,13 +1,13 @@
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# -*- coding: utf-8 -*-
"""
Fichier de base d'interface avec les switchs manageables.
Donne la classe switch qui permet d'effectuer les opérations
élémentaires sur les switchs manageable HP 26xx.
Donne la classe switch qui permet d'effectuer les opérations
élémentaires sur les switchs manageable HP 26xx.
Frédéric PAUGET
Frédéric PAUGET
"""
from time import sleep
from popen2 import popen3
@ -28,13 +28,13 @@ try:
from secrets import config_snmp_secrete, reconf_snmp
except:
# Si a pas le droit de lire config_snmp_secrete
# on va tenter de tout faire en snmpv1 et communauté public
# on va tenter de tout faire en snmpv1 et communauté public
def config_snmp_secrete(snmp,switch) :
snmp = snmp(switch,version='1',community='public')
return snmp.get, snmp.set, snmp.walk
#############################################################################################
### Définitions de classes utiles
### Définitions de classes utiles
# Quelques exceptions
class ConnectionTimout(Exception) :
@ -50,7 +50,7 @@ class ConversationError(Exception) :
import pexpect
class ssh :
""" Ouverture d'une connexion ssh, envoi de commandes et récupération du résultat """
""" Ouverture d'une connexion ssh, envoi de commandes et récupération du résultat """
def __init__(self,host) :
@ -77,13 +77,13 @@ class ssh :
self.ssh.close()
def send_cmd(self,cmd,timeout=15):
""" Envoi une commande, attend le prompt et retourne la réponse """
""" Envoi une commande, attend le prompt et retourne la réponse """
# Envoi de la commande
self.ssh.sendline(cmd)
self.__sshout = ''
try:
# Attente de la réponse
# Attente de la réponse
while 1:
index = self.ssh.expect([' \[y/n\]\? ',
'%s\(config\)# ' % self.switch,
@ -92,7 +92,7 @@ class ssh :
self.__sshout = self.__sshout + self.ssh.before
if index == 0:
# On répond oui
# On répond oui
self.ssh.send("y")
elif index == 1:
# On est revenu au prompt
@ -112,13 +112,13 @@ class ssh :
class snmp :
""" Classe de communication SNMP """
def __init__(self,host,version=None,community=None,authentication_protocol=None, authentication_pass=None, username=None, privacy_pass=None) :
""" 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
""" 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
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
"""
self.host = host
self.version = version
@ -150,11 +150,11 @@ class snmp :
return r
def get(self,oid) :
""" Retourne le résultat correspondant à l'oid demandé """
""" 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 ""
@ -170,14 +170,14 @@ class snmp :
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
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')
@ -204,7 +204,7 @@ class hpswitch :
__conn_ssh = None
def __init__(self,switch) :
""" Switch doit être le nom du switch """
""" Switch doit être le nom du switch """
if self.__debug : self.__logDest.write("HP DEBUG : __init__(switch=%s)\n" % switch )
self.switch = switch.lower()
@ -219,20 +219,20 @@ class hpswitch :
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."""
""" Retourne le(s) adresse(s) MAC présentes sur la prise."""
if not prise : prise = self.prise
if self.__debug : self.__logDest.write("HP DEBUG : show_prise_mac(prise=%s)\n" % prise)
try:
data = self.walk('STATISTICS-MIB::hpSwitchPortFdbAddress.%d' % int(prise))
return map(lambda x:findall('".*"',":".join(x.lower().split(' ')))[0][1:-2],data.values())
except ValueError:
# Pas de MAC trouvée
# Pas de MAC trouvée
return []
def where_is_mac(self, mac) :
"""Retrouve la prise correspondant à une adresse MAC donnée"""
"""Retrouve la prise correspondant à une adresse MAC donnée"""
if self.__debug : self.__logDest.write("HP DEBUG : where_is_mac(mac=%s)\n" % mac)
# On va transformer l'adresse MAC cherchée pour la mettre au format 0A 0A 0A 0A 0A 0A
# On va transformer l'adresse MAC cherchée pour la mettre au format 0A 0A 0A 0A 0A 0A
mac = mac.upper()
mac = filter(lambda x: x in "0123456789ABCDEF", mac) # 0A0A0A0A0A0A
mac = "%s %s %s %s %s %s" % (mac[0:2], mac[2:4], mac[4:6],
@ -246,7 +246,7 @@ class hpswitch :
if onemac[1:-2] == mac:
return int(onesnmp.split(".")[1])
# On a rien trouvé
# On a rien trouvé
return None
def __scp(self,destination,fichier) :
@ -272,8 +272,8 @@ class hpswitch :
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 ] }
"""
@ -311,7 +311,7 @@ class hpswitch :
return self.set('IF-MIB::ifAdminStatus.%d' % int(prise), 'i', 1)
def disable(self,prise=0) :
""" Désactive une prise """
""" 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)
@ -323,15 +323,15 @@ class hpswitch :
nb = 0
for oid,etat in self.walk(oid).items() :
if etat == 'up' and int(oid.split('.')[1])<51 :
# Le <51 est ici pour éviter de compter les ports fictifs
# Le <51 est ici pour éviter de compter les ports fictifs
nb += 1
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 """
""" 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 """
if prise != 'all': prise = int(prise)
return self.__is('IF-MIB::ifAdminStatus',prise)
@ -342,7 +342,7 @@ class hpswitch :
return self.__is('IF-MIB::ifOperStatus',prise)
def nom(self,nom=None,prise=0) :
""" Retourne ou attribue le nom à la prise fournie """
""" Retourne ou attribue le nom à la prise fournie """
if not prise : prise = self.prise
oid = 'IF-MIB::ifAlias.%d' % int(prise)
if nom==None :
@ -377,7 +377,7 @@ class hpswitch :
self.set(oid,'i',code)
def vlans(self, prise = None):
"""Récupère les vlans activés sur la prise 'prise'"""
"""Récupère les vlans activés sur la prise 'prise'"""
if not prise:
prise = self.prise
prise = int(prise)
@ -461,7 +461,7 @@ if __name__ == '__main__' :
for opt, val in options :
if opt == '-h' or opt=='--help' :
print "Usage : %s [[-c commande1] -c commande2...] [-U firmware] [--snmp] regex "
print "Envoi les commandes données au switchs matchant la regex"
print "Envoi les commandes données au switchs matchant la regex"
print "si aucune commande est founie lit l'entree standart"
print "L'envoi de firmware ne fait pas rebooter le switch"
print "L'option --snmp ajoute les commandes de reconfiguration snmp"
@ -486,7 +486,7 @@ if __name__ == '__main__' :
switchs.append(sw)
if not switchs :
print "Aucun switch trouvé"
print "Aucun switch trouvé"
print "Note : il faut une _regex_ (!= wilcards au sens du shell)"
sys.exit(3)
@ -499,7 +499,7 @@ if __name__ == '__main__' :
print
try:
raw_input("Appuyer sur entrée pour continuer")
raw_input("Appuyer sur entrée pour continuer")
except EOFError:
# On lisait depuis un pipe
print '\r'+' '*33+'\r'
@ -507,7 +507,7 @@ if __name__ == '__main__' :
for sw in switchs :
print sw
try:
# Au cas ou le switch ne répondrai pas
# Au cas ou le switch ne répondrai pas
s = hpswitch(sw)
if firmware :
s.upgrade(firmware)