Menage.
Peut etre appelle directement : Usage : %s -c commande1 -c commande2... -s switch1 -s switch2... Envoi les commandes donnes au switchs dont le nom est fourni si aucun switch est founi envoi tous les switchs si aucune commande est founie lit l'entree standart darcs-hash:20050427141332-41617-bd60649ba40e3133b6fcb75434cf9ead17bf94d1.gz
This commit is contained in:
parent
b07d5901cc
commit
8565f7c9da
1 changed files with 75 additions and 99 deletions
170
gestion/hptools.py
Normal file → Executable file
170
gestion/hptools.py
Normal file → Executable file
|
@ -1,4 +1,4 @@
|
|||
# -*- python -*-
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: iso-8859-15 -*-
|
||||
|
||||
"""
|
||||
|
@ -13,9 +13,11 @@ from time import sleep
|
|||
from popen2 import popen3
|
||||
from sys import stderr, path
|
||||
from commands import getstatusoutput
|
||||
from annuaires import chbre_prises, all_switchs, uplink_prises
|
||||
from annuaires import chbre_prises, all_switchs
|
||||
from os.path import exists
|
||||
from os import system
|
||||
|
||||
try :
|
||||
try:
|
||||
from secrets import config_snmp_secrete
|
||||
except :
|
||||
# Si a pas le droit de lire config_snmp_secrete
|
||||
|
@ -162,10 +164,6 @@ class hpswitch :
|
|||
__debug=0
|
||||
__logDest=stderr
|
||||
|
||||
# Quelques paramètres
|
||||
IP_tftp = '138.231.136.7'
|
||||
firmware_file = 'firmware26xx'
|
||||
|
||||
# Variables internes
|
||||
switch = None # nom du switch
|
||||
prise = ''
|
||||
|
@ -179,38 +177,13 @@ class hpswitch :
|
|||
# Config snmp
|
||||
self.get, self.set, self.walk = config_snmp_secrete(snmp,switch)
|
||||
|
||||
def __ssh(self,cmd,timout=15) :
|
||||
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 set_prise(self,prise,action) :
|
||||
"""
|
||||
Effectue l'action action donnée sur la (les) prise(s) donnée(s)
|
||||
|
||||
'prise' peut être un ensembre de prises :
|
||||
ex : '1-3,6' effectuera l'action sur les prises 1,2,3 et 6
|
||||
|
||||
'action' peut être principalement
|
||||
enable/disable
|
||||
speed-duplex [auto-100/auto-10]
|
||||
voir manuel des swtichs pour plus d'actions possibles
|
||||
"""
|
||||
if not prise : prise = self.prise
|
||||
if self.__debug : self.__logDest.write("HP DEBUG : set_prise(prise=%s,action=%s)\n" %( prise,action))
|
||||
return self.__ssh( "interface ethernet %s %s" % (prise,action) )
|
||||
|
||||
def show_stats(self,prise='') :
|
||||
""" Retourne les stats de(s) prise(s) choisie(s)."""
|
||||
if not prise : prise = self.prise
|
||||
if self.__debug : self.__logDest.write("HP DEBUG : show_prise_status(prise=%s)\n" % prise)
|
||||
|
||||
if prise :
|
||||
return self.__ssh("show interfaces ethernet %s" % prise)
|
||||
else :
|
||||
return self.__ssh("show interfaces")
|
||||
|
||||
def show_prise_mac(self,prise='') :
|
||||
""" Retourne le(s) adresse(s) MAC présentes sur la prise."""
|
||||
if not prise : prise = self.prise
|
||||
|
@ -242,72 +215,27 @@ 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" % (file, self.switch, destination))
|
||||
if exists(file):
|
||||
system('scp %s %s:%s' % (file, self.switch, destination))
|
||||
|
||||
def set_prise_mac(self,prise='',mac='') :
|
||||
""" Défini les adresses mac autorisées sur une prise.
|
||||
def update(self,file=None) :
|
||||
""" Upload le fichier de config fourni
|
||||
Fait rebooter le switch """
|
||||
self.__scp('cfg/startup-config',file)
|
||||
|
||||
/!\ format de la mac : xxxxxx-xxxxxx (x hexa)
|
||||
On peut aussi en mettre plusieus séparées par des espaces.
|
||||
Si mac est précédé de -, enlève les adresses (si juste - les vire toutes)
|
||||
def upgrade(self,file=None) :
|
||||
""" Changement de firmware,
|
||||
le firmware est dans le fichier fourni en argument
|
||||
Ne reboote pas le switch """
|
||||
self.__scp('os/primary',file)
|
||||
|
||||
Si mac n'est pas fourni retourne le(s) adresse(s) MAC autorisées sur la prise.
|
||||
Si prise n'est pas fourni retourne la config de sécurité de tous les ports
|
||||
"""
|
||||
if not prise : prise = self.prise
|
||||
if self.__debug : self.__logDest.write("HP DEBUG : set_prise_mac(prise=%s,mac=%s)\n" % (prise,mac))
|
||||
|
||||
if not mac :
|
||||
return self.__sudo("show port-security %s" % prise)
|
||||
|
||||
if mac[0]=='-' :
|
||||
no='no '
|
||||
mac=mac[1:]
|
||||
else :no=''
|
||||
|
||||
return self.__ssh("%sport-security ethernet %s mac-address %s" % (no, prise,mac) )
|
||||
|
||||
def show_interfaces(self,prise='') :
|
||||
""" Retourne la liste des interfaces ainsi que leur état
|
||||
Si prise est spécifié n'affiche que la prise demandée """
|
||||
if not prise : prise = self.prise
|
||||
if self.__debug : self.__logDest.write("HP DEBUG : show_interfaces(prise=%s)\n" % prise)
|
||||
a = self.__ssh("show interfaces brief")
|
||||
if a and prise :
|
||||
a=a.split('\n')
|
||||
try : a='\n'.join(a[:5]+[a[prise+4]],'\n')
|
||||
except : a=0
|
||||
return a
|
||||
|
||||
def update(self) :
|
||||
""" Upload de la config courrante
|
||||
Téléchargment de la nouvelle config
|
||||
Reboot."""
|
||||
if self.__debug : self.__logDest.write("HP DEBUG : update()\n")
|
||||
|
||||
# Sauvegarde
|
||||
self.__ssh("copy running-config tftp %s %s unix" % (self.IP_tftp, self.switch + '.running') )
|
||||
try :
|
||||
print self.__ssh("copy tftp startup-config %s %s unix" % (self.IP_tftp, self.switch+'.conf') )
|
||||
except ConnectionClosed :
|
||||
# C'est normal : le switch reboote
|
||||
pass
|
||||
|
||||
def upgrade(self) :
|
||||
""" Changement de firmware, le firmware est sur la machine
|
||||
ayant le serveur tftfp et a pour nom firmware26xx """
|
||||
if self.__debug : self.__logDest.write("HP DEBUG : upgrate()\n")
|
||||
print self.__ssh("copy tftp flash %s %s" % (self.IP_tftp, self.firmware_file) , 120) # Long timout
|
||||
|
||||
def reboot(self) :
|
||||
""" Reboote le switch """
|
||||
if self.__debug : self.__logDest.write("HP DEBUG : reboot()\n")
|
||||
try :
|
||||
self.__ssh("boot")
|
||||
except ConnectionClosed :
|
||||
# C'est normal : le switch reboote
|
||||
pass
|
||||
|
||||
# Fonction utilisant le SNMP
|
||||
def add_key(self,file=None) :
|
||||
""" 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é
|
||||
|
@ -451,3 +379,51 @@ class sw_chbre(hpswitch) :
|
|||
nom = 'Chambre_%s' % self.chbre.capitalize()
|
||||
if nom != self.nom() :
|
||||
self.nom(nom)
|
||||
|
||||
if __name__ == '__main__' :
|
||||
import sys, getopt
|
||||
|
||||
try :
|
||||
options, arg = getopt.getopt(sys.argv[1:], 'hs:c:', [ 'help' ])
|
||||
except getopt.error, msg :
|
||||
print msg
|
||||
sys.exit(1)
|
||||
|
||||
switchs = []
|
||||
cmds = []
|
||||
for opt, val in options :
|
||||
if opt == '-h' or opt=='--help' :
|
||||
print "Usage : %s -c commande1 -c commande2... -s switch1 -s switch2..."
|
||||
print "Envoi les commandes données au switchs dont le nom est fourni"
|
||||
print "si aucun switch est founi envoi à tous les switchs"
|
||||
print "si aucune commande est founie lit l'entree standart"
|
||||
sys.exit(0)
|
||||
|
||||
elif opt=='-s' :
|
||||
switchs.append(val)
|
||||
|
||||
elif opt=='-c' :
|
||||
cmds.append(val)
|
||||
|
||||
if not switchs : switchs = all_switchs()
|
||||
if not cmds :
|
||||
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
|
||||
|
||||
sleep(2)
|
||||
|
||||
if arg :
|
||||
print "ERREUR, argument invalide"
|
||||
print 'Attention, ne pas oublier les " pour les commandes'
|
||||
sys.exit(2)
|
||||
|
||||
for sw in switchs :
|
||||
print sw
|
||||
s = hpswitch(sw)
|
||||
for cmd in cmds :
|
||||
print s.send_cmd(cmd)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue