[gestion/gen_confs/autostatus] Retrait du kvm + quelques améliorations

Améliorations qui permettront un formattage plus aisé du local.status
sur le wiki.

darcs-hash:20081205122614-bd074-0ea69cbad524fa0b0ba0614386471dc00b41aa32.gz
This commit is contained in:
Antoine Durand-Gasselin 2008-12-05 13:26:14 +01:00
parent 1d6dfd9ccb
commit 92a6feab59

View file

@ -16,10 +16,10 @@ from gen_confs import gen_config
# définition de la classe # définition de la classe
class autostatus(gen_config) : class autostatus(gen_config) :
# CONFIGURATION # # CONFIGURATION #
################# #################
# fichier de l'autostatus # fichier de l'autostatus
CONFFILE = '/etc/autostatus/hosts' CONFFILE = '/etc/autostatus/hosts'
@ -35,6 +35,7 @@ class autostatus(gen_config) :
"radius-test.crans.org", "radius-test.crans.org",
"rhum.crans.org", "rhum.crans.org",
"rhum.adm.crans.org", "rhum.adm.crans.org",
"kvm.adm.crans.org",
# Switch du G # Switch du G
"batg-0.adm.crans.org", "batg-0.adm.crans.org",
@ -52,7 +53,7 @@ class autostatus(gen_config) :
] ]
# matrice du fichier d'autostatus # matrice du fichier d'autostatus
matrice = """# Format : name address depend,list contact description matrice = """# Format : name address depend,list contact description
@ -66,46 +67,40 @@ class autostatus(gen_config) :
# serveurs du crans # # serveurs du crans #
##################### #####################
%%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> %%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> <TR><td colspan=3 class="table"><font size="+1"><B>Serveurs :</font></b></TR>
%%HTML: <TR><td colspan=3 class="table"><font size="+1"><B>Serveurs :</font></b></TR>
%(serveurs)s %(serveurs)s
# ferme # # ferme #
######### #########
%%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> %%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> <TR><td colspan=3 class="table"><font size="+1"><B>La ferme, diffusion de la télé :</font></b></TR>
%%HTML: <TR><td colspan=3 class="table"><font size="+1"><B>La ferme, diffusion de la télé :</font></b></TR>
%(ferme)s %(ferme)s
# switchs # # switchs #
########### ###########
%%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> %%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> <TR><td colspan=3 class="table"><font size="+1"><B>Switchs :</font></b></TR>
%%HTML: <TR><td colspan=3 class="table"><font size="+1"><B>Switchs :</font></b></TR>
%(switchs)s %(switchs)s
# bornes wifi # # bornes wifi #
############### ###############
%%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> %%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> <TR><td colspan=3 class="table"><font size="+1"><B>Bornes wifi :</font></b></TR>
%%HTML: <TR><td colspan=3 class="table"><font size="+1"><B>Bornes wifi :</font></b></TR>
%(bornes)s %(bornes)s
# Sites web et Services # # Sites web et Services #
######################### #########################
%%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> %%HTML: <TR> <TD class=table colSpan=3><p></TD></TR> <TR><td colspan=3 class="table"><font size="+1"><B>Sites web et Services HORS de l'ENS:</font></b></TR> <TR><td colspan=3 class="table"><font size="2">(21:FTP ; 80:HTTP)</TR>
%%HTML: <TR><td colspan=3 class="table"><font size="+1"><B>Sites web et Services HORS de l'ENS:</font></b></TR>
%%HTML: <TR><td colspan=3 class="table"><font size="2">(21:FTP ; 80:HTTP)</TR>
%(exterieur)s %(exterieur)s
""" """
# quelque descriptions de routeurs triés par IP (pour la route vers l'extérieur) # quelque descriptions de routeurs triés par IP (pour la route vers l'extérieur)
infos_routeurs = {} infos_routeurs = {}
infos_routeurs [ '138.231.136.4' ] = ['Komaz', 'Routeur principal du CRANS'] infos_routeurs [ '138.231.136.4' ] = ['Komaz', 'Routeur principal du CRANS']
infos_routeurs [ '138.231.135.5' ] = ['IRTS', 'Routeur de l\'ENS assurant la liaison CRANS<->ENS'] infos_routeurs [ '138.231.135.5' ] = ['IRTS', 'Routeur de l\'ENS assurant la liaison CRANS<->ENS']
@ -118,17 +113,17 @@ class autostatus(gen_config) :
# services extérieurs (triés par clé de dictionnaire) # services extérieurs (triés par clé de dictionnaire)
# format [ nom, ip, port(0=ping), description ] # format [ nom, ip, port(0=ping), description ]
services_exterieurs = {} services_exterieurs = {}
services_exterieurs ['Videolan'] = [ 'Videolan', '88.191.250.2', 21, 'Le serveur FTP de Videolan. (Chatenay-Malabry, France)', 'nobody'] services_exterieurs ['Videolan'] = [ 'Videolan', '88.191.250.2', 21, 'Le serveur FTP de Videolan. (Chatenay-Malabry, France)', 'nobody']
services_exterieurs ['Free'] = [ 'Free', '212.27.60.27', 21, 'Le serveur FTP de free. (France)', 'nobody' ] services_exterieurs ['Free'] = [ 'Free', '212.27.60.27', 21, 'Le serveur FTP de free. (France)', 'nobody' ]
services_exterieurs ['Monde'] = [ 'Monde', '193.51.224.7', 80, 'Est-ce que LeMonde.fr fonctionne ? (France)', 'nobody' ] services_exterieurs ['Monde'] = [ 'Monde', '193.51.224.7', 80, 'Est-ce que LeMonde.fr fonctionne ? (France)', 'nobody' ]
services_exterieurs ['Yahoo!'] = [ 'Yahoo!', '68.142.226.50', 80, 'Est-ce que Yahoo! fonctionne ? (USA)', 'nobody' ] services_exterieurs ['Yahoo!'] = [ 'Yahoo!', '68.142.226.50', 80, 'Est-ce que Yahoo! fonctionne ? (USA)', 'nobody' ]
services_exterieurs ['Google'] = [ 'Google', '216.239.59.99', 80, 'Est-ce que Google fonctionne ? (USA)', 'nobody' ] services_exterieurs ['Google'] = [ 'Google', '216.239.59.99', 80, 'Est-ce que Google fonctionne ? (USA)', 'nobody' ]
# personnes à informer pour l'indiponibilité de certains serveurs # personnes à informer pour l'indiponibilité de certains serveurs
contact = {} contact = {}
# service à redémarer # service à redémarer
restart_cmd = "" restart_cmd = ""
@ -136,7 +131,7 @@ class autostatus(gen_config) :
def __str__ (self) : def __str__ (self) :
return "autostatus" return "autostatus"
def make_config (self, dico ) : def make_config (self, dico ) :
""" """
Transforme le dico en suite lignes de configuration Transforme le dico en suite lignes de configuration
@ -154,12 +149,12 @@ class autostatus(gen_config) :
return self.contact[nom] return self.contact[nom]
else : else :
return 'nobody' return 'nobody'
def _gen (self) : def _gen (self) :
# machines crans # machines crans
################ ################
machines = AssociationCrans().machines() machines = AssociationCrans().machines()
# Quand un serveur est à la fois dans adm et dans autre chose, # Quand un serveur est à la fois dans adm et dans autre chose,
# on garde que le autre chose # on garde que le autre chose
@ -171,20 +166,20 @@ class autostatus(gen_config) :
if n.nom() == nom_adm: if n.nom() == nom_adm:
machines2 = filter(lambda x: x.nom() != nom_adm, machines2) machines2 = filter(lambda x: x.nom() != nom_adm, machines2)
machines = machines2 machines = machines2
# tri des machines par type # tri des machines par type
bornes = {} bornes = {}
switchs = {} switchs = {}
serveurs = {} serveurs = {}
ferme = {} ferme = {}
# tri des machines # tri des machines
for m in machines : for m in machines :
# machine exclue # machine exclue
if m.nom() in self.pasimportant : if m.nom() in self.pasimportant :
continue continue
# les bornes # les bornes
if isinstance(m, BorneWifi): if isinstance(m, BorneWifi):
# C'est une borne # C'est une borne
@ -209,7 +204,7 @@ class autostatus(gen_config) :
index = '1-' + m.nom().split(".")[0] index = '1-' + m.nom().split(".")[0]
else : else :
index = '0-' + m.nom().split(".")[0] index = '0-' + m.nom().split(".")[0]
# on ajoute au dictionnaire # on ajoute au dictionnaire
switchs[ index ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ] switchs[ index ] = [ m.nom().split(".")[0] , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ]
@ -220,7 +215,7 @@ class autostatus(gen_config) :
ferme[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ] ferme[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ]
else : else :
ferme[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Infos non disponibles' ] ferme[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Infos non disponibles' ]
# les serveurs # les serveurs
else : else :
if ".wifi.crans.org" in m.nom() : if ".wifi.crans.org" in m.nom() :
@ -231,33 +226,33 @@ class autostatus(gen_config) :
serveurs[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ] serveurs[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , m.info()[0] ]
else : else :
serveurs[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Infos non disponibles' ] serveurs[ nom ] = [ nom , m.nom() , 'none' , self.mail_contact(m.nom()) , 'Infos non disponibles' ]
# route vers l'extérieur # route vers l'extérieur
######################## ########################
# on récupère la route vers l'extérieur # on récupère la route vers l'extérieur
traceroute = commands.getoutput("/usr/bin/traceroute www.free.fr 2> /dev/null | sed 's/\*//g' | sed 's/ */ /g' | sed 's/^ //g' | sed 's/[(,)]//g' | cut -d ' ' -f 2,3").split("\n") traceroute = commands.getoutput("/usr/bin/traceroute www.free.fr 2> /dev/null | sed 's/\*//g' | sed 's/ */ /g' | sed 's/^ //g' | sed 's/[(,)]//g' | cut -d ' ' -f 2,3").split("\n")
# initialisation des variables # initialisation des variables
in_renater = 0 in_renater = 0
route_to_ext = '' route_to_ext = ''
depends_to_ext = '' depends_to_ext = ''
for routeur in traceroute : for routeur in traceroute :
# on commence à rentrer dans la chaine des routeurs renater # on commence à rentrer dans la chaine des routeurs renater
if 'renater.fr' in routeur : if 'renater.fr' in routeur :
in_renater = 1 in_renater = 1
# on est plus dans les routeurs renater donc on arrête # on est plus dans les routeurs renater donc on arrête
if in_renater and not 'renater.fr' in routeur : if in_renater and not 'renater.fr' in routeur :
continue continue
# ajout du routeur # ajout du routeur
# ip # ip
tmp_ip = routeur.split(' ')[1] tmp_ip = routeur.split(' ')[1]
# nom & desciption # nom & desciption
if routeur.split(' ')[1] in self.infos_routeurs.keys() : if routeur.split(' ')[1] in self.infos_routeurs.keys() :
tmp_name = self.infos_routeurs[tmp_ip][0] tmp_name = self.infos_routeurs[tmp_ip][0]
@ -265,7 +260,7 @@ class autostatus(gen_config) :
else : else :
tmp_name = routeur.split(' ')[0].split('.')[0] tmp_name = routeur.split(' ')[0].split('.')[0]
tmp_desc = 'Pas de description' tmp_desc = 'Pas de description'
# dépendances # dépendances
if not depends_to_ext : if not depends_to_ext :
tmp_depends = 'none' tmp_depends = 'none'
@ -273,7 +268,7 @@ class autostatus(gen_config) :
else : else :
tmp_depends = depends_to_ext tmp_depends = depends_to_ext
depends_to_ext += ',' + tmp_name depends_to_ext += ',' + tmp_name
# on l'ajoute à la route # on l'ajoute à la route
if route_to_ext : if route_to_ext :
route_to_ext += '\n' route_to_ext += '\n'
@ -281,7 +276,7 @@ class autostatus(gen_config) :
# services extérieurs # services extérieurs
##################### #####################
services_exterieurs = {} services_exterieurs = {}
for key in self.services_exterieurs.keys() : for key in self.services_exterieurs.keys() :
s = self.services_exterieurs[key] s = self.services_exterieurs[key]
@ -292,9 +287,9 @@ class autostatus(gen_config) :
# génération du fichier # génération du fichier
####################### #######################
file = self._open_conf(self.CONFFILE, "#") file = self._open_conf(self.CONFFILE, "#")
# génère le dictionnaire pour les modifications # génère le dictionnaire pour les modifications
dico = {} dico = {}
dico['switchs'] = self.make_config(switchs) dico['switchs'] = self.make_config(switchs)
@ -303,9 +298,9 @@ class autostatus(gen_config) :
dico['ferme'] = self.make_config(ferme) dico['ferme'] = self.make_config(ferme)
dico['route'] = route_to_ext.encode('iso-8859-15') dico['route'] = route_to_ext.encode('iso-8859-15')
dico['exterieur'] = self.make_config(services_exterieurs) dico['exterieur'] = self.make_config(services_exterieurs)
# on écrit dans le fichier de configuration # on écrit dans le fichier de configuration
file.write( self.matrice % dico ) file.write( self.matrice % dico )
# on ferme le fichier # on ferme le fichier
file.close() file.close()