From 13e162fcd6b35ee813ad1047840cc53991768190 Mon Sep 17 00:00:00 2001 From: pauget Date: Sun, 5 Dec 2004 02:12:12 +0100 Subject: [PATCH] Fontion d'upgrade des switchs. Amlioration base du systme de connexion ssh darcs-hash:20041205011212-41617-14e3db86fdd511a9e96c57f37bf877b0c4e99fb3.gz --- gestion/hptools.py | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/gestion/hptools.py b/gestion/hptools.py index 7672fb51..1afa5db5 100644 --- a/gestion/hptools.py +++ b/gestion/hptools.py @@ -50,6 +50,8 @@ class ssh : def __init__(self,host) : """ Ouverture d'une connexion ssh vers le switch choisi """ self.switch = host + self.log=open('/tmp/test_ssh','w') + if self.__debug : self.__logDest.write("SSH DEBUG : __init__(host=%s)\n" % host) self.__host = host self.__retour, self.__input, self.__err = popen3("/usr/bin/ssh -tt %s" % host) @@ -60,7 +62,6 @@ class ssh : r.start() e = threading.Thread(target=self.__read_err,args=(threading.currentThread(),)) e.start() - self.log=open('/tmp/test_ssh','w') # On passe l'intro, passe manager et en environnement de configuration self.send_cmd('\nenable\nconfigure') @@ -101,7 +102,6 @@ class ssh : if self.__debug : self.__logDest.write("SSH DEBUG : __send_cmd(%s)\n" % cmd.strip() ) self.__ssh_out = '' # oubli de ce qu'il y a avant - self.log.write('*****\n') self.log.flush() # Envoi de la commande @@ -110,30 +110,35 @@ class ssh : # Premier retour count=0 + t = '' while 1: + sleep(1) + out = self.__ssh_out # On a récupéré un prompt ? - try : - print "|%s|" % self.__ssh_out[-45:-38] - if self.__ssh_out[-45:-38] == ' [y/n]?' : + while_break = 0 + for n in range(1,200) : + try : t = out[-n-7:-n] + except : continue + if t == ' [y/n]?' : self.__input.write('y') self.__input.flush() sleep(1) - continue - elif self.__ssh_out[-46:-36].lower() == '(config)# ' : + elif t == 'onfig)#' : if self.__debug : self.__logDest.write("SSH DEBUG : __send_cmd -> OK\n") - break - elif self.__ssh_out[-70:-7] == '-- MORE --, next page: Space, next line: Enter, quit: Control-C' : + while_break=1 + elif t == 'ntrol-C' : # Faut appuyer sur une touche if self.__debug : self.__logDest.write("SSH DEBUG : __send_cmd -> MORE\n") self.__input.write(' ') self.__input.flush() sleep(1) + else : continue - except: pass - + break + + if while_break : break # Rien de bien, le switch es un peu lent, on attend - if self.__debug : self.__logDest.write("SSH DEBUG : __send_cmd -> WAIT\n") - sleep(1) + if self.__debug : self.__logDest.write("SSH DEBUG : __send_cmd -> WAIT (%s) \n" % t) count += 1 if count > timeout : # Il y a un problème @@ -205,6 +210,7 @@ class hpswitch : # Quelques paramètres IP_tftp = '138.231.136.7' + firmware_file = 'firmware26xx' # Variables internes switch = None # nom du switch @@ -219,11 +225,11 @@ class hpswitch : # Config snmp self.get, self.set, self.walk = config_snmp_secrete(snmp,switch) - def __ssh(self,cmd) : + def __ssh(self,cmd,timout=15) : if not self.__conn_ssh : self.__conn_ssh = ssh(self.switch) - return self.__conn_ssh.send_cmd(cmd) + return self.__conn_ssh.send_cmd(cmd,timout) def set_prise(self,prise,action) : """ @@ -335,8 +341,8 @@ class hpswitch : 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 : update()\n") - self.__ssh("copy tftp flash %s firmware26xx" % self.IP_tftp,70) + if self.__debug : self.__logDest.write("HP DEBUG : upgrate()\n") + self.__ssh("copy tftp flash %s %s" % (self.IP_tftp, self.firmware_file) , 120) # Long timout def reboot(self) : """ Reboote le switch """