[gestion/*.py] Ré-encodage de certains scripts en UTF-8
Ignore-this: dafa22ed56eaf0d816fd089e42672eb5 darcs-hash:20090309212124-0445d-09ac8ae4052b6f333706be1baa1c7f4d94455fd5.gz
This commit is contained in:
parent
7addc503a8
commit
cc31727b60
21 changed files with 1351 additions and 1351 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue