[gen_confs/switchs.py] on récupère la première ligne de la conf depuis le switch

Ignore-this: 28adbb199ef5bd83b58f20ea4320505b

darcs-hash:20090302143657-bd074-c53e93c464eb46cf527e4431c208fda82a5570a0.gz
This commit is contained in:
Antoine Durand-Gasselin 2009-03-02 15:36:57 +01:00
parent eb82b03462
commit 8905c9ca16
2 changed files with 33 additions and 25 deletions

View file

@ -129,16 +129,16 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None):
titre : liste des titres titre : liste des titres
Si none, n'affiche pas de ligne de titre Si none, n'affiche pas de ligne de titre
largeur : liste des largeurs des colonnes, '*' met la plus grande largeur : liste des largeurs des colonnes, '*' met la plus grande
largeur possible. largeur possible.
Si None, réduit aux max chaque colonne Si None, réduit aux max chaque colonne
alignement : liste des alignements : c = centrer alignement : liste des alignements : c = centrer
g = gauche g = gauche
d = droit d = droit
Si None, met c pour chaque colonne Si None, met c pour chaque colonne
format : liste des formats : s = string format : liste des formats : s = string
o = octet o = octet
Si None, s pour chaque colonne Si None, s pour chaque colonne
@ -150,16 +150,16 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None):
nbcols = len(titre) nbcols = len(titre)
else : else :
return u'Aucune donnée' return u'Aucune donnée'
# Formats # Formats
######### #########
if not format : if not format :
format = ['s'] * nbcols format = ['s'] * nbcols
def reformate(data, format): def reformate(data, format):
if format == 's': if format == 's':
return unicode(data) return unicode(data)
elif format == 'o' : elif format == 'o' :
data = float(data) data = float(data)
if data > 1024**3: if data > 1024**3:
@ -170,9 +170,9 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None):
return str(round(data/1024, 1)) + 'ko' return str(round(data/1024, 1)) + 'ko'
else: else:
return str(round(data, 1)) + 'o' return str(round(data, 1)) + 'o'
data = [ [ reformate(ligne[i],format[i]) for i in range(nbcols) ] for ligne in data ] data = [ [ reformate(ligne[i],format[i]) for i in range(nbcols) ] for ligne in data ]
# Largeurs # Largeurs
########## ##########
if not largeur : if not largeur :
@ -183,23 +183,23 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None):
if largeur[i] in ['*',-1] : if largeur[i] in ['*',-1] :
largeur[i] = max(cols - sum([l for l in largeur if l != '*']) - nbcols - 1, 3) largeur[i] = max(cols - sum([l for l in largeur if l != '*']) - nbcols - 1, 3)
break break
# Alignement # Alignement
############ ############
if not alignement : if not alignement :
alignement = ['c'] * nbcols alignement = ['c'] * nbcols
def aligne (data, alignement, largeur) : def aligne (data, alignement, largeur) :
# Longeur sans les chaines de formatage # Longeur sans les chaines de formatage
l = len(re.sub('\x1b\[1;([0-9]|[0-9][0-9])m','',data)) l = len(re.sub('\x1b\[1;([0-9]|[0-9][0-9])m','',data))
# Alignement # Alignement
if l > largeur : if l > largeur :
# découpage d'une chaine trop longue # découpage d'une chaine trop longue
regexp = re.compile('\x1b\[1;([0-9]|[0-9][0-9])m') regexp = re.compile('\x1b\[1;([0-9]|[0-9][0-9])m')
new_data = u'' new_data = u''
new_len = 0 new_len = 0
# On laisse la mise en forme et on coupe les caratères affichés # On laisse la mise en forme et on coupe les caratères affichés
while True : while True :
s = regexp.search(data) s = regexp.search(data)
@ -217,21 +217,21 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None):
data = data[1:] data = data[1:]
if not data : if not data :
return new_data + '*' return new_data + '*'
elif l == largeur : elif l == largeur :
return data return data
elif alignement == 'g' : elif alignement == 'g' :
return u' ' + data + u' '*(largeur-l-1) return u' ' + data + u' '*(largeur-l-1)
elif alignement == 'd' : elif alignement == 'd' :
return u' '*(largeur-l-1) + data + u' ' return u' '*(largeur-l-1) + data + u' '
else : else :
return u' '*((largeur-l)/2) + data + u' '*((largeur-l+1)/2) return u' '*((largeur-l)/2) + data + u' '*((largeur-l+1)/2)
data = [ [ aligne(ligne[i],alignement[i],largeur[i]) for i in range(nbcols) ] for ligne in data ] data = [ [ aligne(ligne[i],alignement[i],largeur[i]) for i in range(nbcols) ] for ligne in data ]
# Le titre # Le titre
########## ##########
if titre : if titre :
@ -245,14 +245,14 @@ def tableau(data, titre=None, largeur=None, alignement=None, format=None):
# Les données # Les données
############# #############
chaine += u'\n'.join([sep_col + sep_col.join([ligne[i] for i in range(nbcols)]) + sep_col for ligne in data]) chaine += u'\n'.join([sep_col + sep_col.join([ligne[i] for i in range(nbcols)]) + sep_col for ligne in data])
return chaine return chaine
def get_screen_size(): def get_screen_size():
"""Retourne la taille de l'écran. """Retourne la taille de l'écran.
Sous la forme d'un tuble (lignes, colonnes)""" Sous la forme d'un tuble (lignes, colonnes)"""
try: try:
from termios import TIOCGWINSZ from termios import TIOCGWINSZ
from struct import pack, unpack from struct import pack, unpack
@ -291,18 +291,18 @@ class anim :
self.iter = iter self.iter = iter
sys.stdout.write(self.txt) sys.stdout.write(self.txt)
sys.stdout.flush() sys.stdout.flush()
def reinit(self) : def reinit(self) :
""" Efface la ligne courrante et """ Efface la ligne courrante et
affiche : truc................. """ affiche : truc................. """
sys.stdout.write(el + self.txt) sys.stdout.write(el + self.txt)
if self.iter : if self.iter :
sys.stdout.write(' '*28) sys.stdout.write(' '*28)
sys.stdout.write(el + self.txt) sys.stdout.write(el + self.txt)
sys.stdout.flush() sys.stdout.flush()
def cycle(self) : def cycle(self) :
""" Efface la ligne courrante et """ Efface la ligne courrante et
affiche : truc..................? affiche : truc..................?
? caratère variant à chaque appel """ ? caratère variant à chaque appel """
sys.stdout.write(el + self.txt) sys.stdout.write(el + self.txt)

View file

@ -14,7 +14,7 @@
Dans tous les cas FAIRE LE SNMP A LA MAIN (script hpttols) Dans tous les cas FAIRE LE SNMP A LA MAIN (script hpttols)
""" """
import string, sys, os, commands, smtplib import string, sys, os, commands, smtplib, tempfile
sys.path.append('/usr/scripts/gestion') sys.path.append('/usr/scripts/gestion')
from hptools import hpswitch, sw_chbre from hptools import hpswitch, sw_chbre
@ -31,7 +31,7 @@ class switch(gen_config) :
# Répertoire ou écire les fichiers de conf # Répertoire ou écire les fichiers de conf
CONF_REP='/tmp/' # avec un / derrière CONF_REP='/tmp/' # avec un / derrière
config = """; Configuration Editor; Created on release #H.08.86 config = """%(switch_config_header)s
hostname "%(switch)s" hostname "%(switch)s"
;-------------------------------------------------------- Snmp ;-------------------------------------------------------- Snmp
@ -253,6 +253,14 @@ exit
# Batiment et numéro du switch # Batiment et numéro du switch
bat = switch[3].lower() bat = switch[3].lower()
sw_num = int(switch[5]) sw_num = int(switch[5])
old_config = NamedTemporaryFile()
res, msg = commands.getstatusoutput("scp bat%s-%i:cfg/startup-config %s" % (bat, sw_num, old_config.name))
if not res:
raise RuntimeError(u"Erreur : impossible de récupérer l'ancienne configuration du switch")
params['switch_config_header'] = old_config.readline()
old_config.close()
# Conf radius # Conf radius
sys.path.append('/usr/scripts/gestion/secrets') sys.path.append('/usr/scripts/gestion/secrets')