diff --git a/gestion/gen_confs/autostatus.py b/gestion/gen_confs/autostatus.py
index 244ce502..e1d24588 100755
--- a/gestion/gen_confs/autostatus.py
+++ b/gestion/gen_confs/autostatus.py
@@ -1,77 +1,41 @@
#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
+"""
+Classe de génération du fichier de l'autostatus
+Utilisé par generate.py
+"""
+
+# importation des fonctions et classes
+
import sys, os
sys.path.append('/usr/scripts/gestion')
-from ldap_crans import crans, crans_ldap, strip_accents
+from ldap_crans import crans
+from gen_confs import gen_config
-def autostatus (db) :
+
+# définition de la classe
+
+class autostatus(gen_config) :
+
+ # CONFIGURATION #
+ #################
+
# fichier de l'autostatus
- #file = open('/home/chove/hosts','w')
- file = open('/etc/autostatus/hosts','w')
+ CONFFILE = '/home/chove/hosts'
# machines à ne pas mettre dans l'autostatus
exclude = ["non-configure.wifi.crans.org"]
- # machines crans
- machines = crans().machines()
-
- # tri des machines par type
- bornes = {}
- switchs = {}
- serveurs = {}
-
- # tri des machines
- for m in machines :
-
- # machine exclue
- if m.nom() in exclude :
- print "Exclusion de %s" % m.nom()
- continue
-
- # on ajoute au bon tableau les infos
- if m.canal() :
- # C'est une borne (format : index#~#nom#~#commentaire)
- if m.info() :
- # on regarde si c'est une borne de batiment
- if ( m.info()[0][0:3] == "Au " ) and ( len(m.info()[0]) == 5 ) :
- bornes[ "1-" + m.info()[0][4]+m.info()[0][3] ] = [ m.nom() , m.info()[0] ]
- else :
- bornes[ "2-" +m.info()[0] ] = [ m.nom() , m.info()[0] ]
- else :
- # on met les bornes non définies à la fin (ordre alphabétique)
- bornes[ "3-" + m.nom() ] = [ m.nom() , "Inutilisee" ]
-
- elif 'bat' in m.nom() or 'backbone' in m.nom() :
- # C'est un switch
-
- # on convertit le bat# en bat#-0
- if not "-" in m.nom().split(".")[0] :
- index = m.nom().split(".")[0] + "-0"
- else :
- index = m.nom().split(".")[0]
-
- if m.info() :
- switchs[ index ] = [ m.nom() , m.info()[0] ]
- else :
- switchs[ index ] = [ m.nom() , "Infos non disponiles" ]
-
- else :
- # C'est un serveur
- if m.info() :
- serveurs[ m.nom() ] = [ m.nom() , m.info()[0] ]
- else :
- serveurs[ m.nom() ] = [ m.nom() , "Infos non disponiles" ]
-
- # début du fichier
- file.write( """# NE PAS MODIFIER : fichié généré par /home/chove/autostatus.py
+ # matrice du fichier d'autostatus
+ matrice = """
# Format : name address depend,list contact description
# routeurs vers l'extérieur #
#############################
-%HTML:
Routeurs, dans l'ordre où ils sont entre le crans et l'extérieur : |
+%%HTML: Routeurs, dans l'ordre où ils sont entre le crans et l'extérieur : |
komaz 138.231.136.4 none alerts@crans.org Notre routeur
komaz-ext 138.231.135.6 komaz alerts@crans.org Patte externe de notre routeur.
@@ -88,79 +52,137 @@ OrsayCSSI1 193.51.180.122 komaz,komaz-ext,irts,irts-ext,gateway.zr
OrsayCSSI2 193.51.180.121 komaz,komaz-ext,irts,irts-ext,gateway.zrt,kwai,pioneer,pioneer-ext,RenaterCachan,CachanCSSI1,CachanCSSI2,OrsayCSSI1 alerts@crans.org Routeur RENATER
nriCSSI 193.51.179.41 komaz,komaz-ext,irts,irts-ext,gateway.zrt,kwai,pioneer,pioneer-ext,RenaterCachan,CachanCSSI1,CachanCSSI2,OrsayCSSI1,OrsayCSSI2 alerts@crans.org Routeur RENATER
-""" )
-
- # serveurs du crans
- file.write( """
# serveurs du crans #
#####################
-%HTML: |
-%HTML: Serveurs : |
+%%HTML: |
+%%HTML: Serveurs : |
-""" )
- liste = serveurs.keys()
- liste.sort()
- for i in liste :
- data = serveurs[i]
- if ".wifi.crans.org" in i :
- file.write ( data[0].split(".")[0] + ".wifi " + data[0] + " none nobody " + strip_accents ( data[1] + "\n" ).replace('_',' ') )
- else :
- file.write ( data[0].split(".")[0] + " " + data[0] + " none nobody " + strip_accents ( data[1] + "\n" ).replace('_',' ') )
+%(serveurs)s
- # switchs
- file.write ( """
# switchs #
###########
-%HTML: |
-%HTML: Switchs : |
-""" )
- liste = switchs.keys()
- liste.sort()
- for i in liste :
- data = switchs[i]
- file.write ( data[0].split(".")[0] + " " + data[0] + " none nobody " + strip_accents ( data[1] + "\n" ).replace('_',' ') )
+%%HTML: |
+%%HTML: Switchs : |
+
+%(switchs)s
- # bornes wifi
- file.write ( """
# bornes wifi #
###############
-%HTML: |
-%HTML: Bornes wifi : |
+%%HTML: |
+%%HTML: Bornes wifi : |
-""" )
- liste = bornes.keys()
- liste.sort()
- for i in liste :
- data = bornes[i]
- file.write ( data[0].split(".")[0] + " " + data[0] + " none nobody " + strip_accents ( data[1] + "\n" ).replace('_',' ') )
+%(bornes)s
- # services extérieurs
- file.write ( """
# Sites web et Services #
#########################
-%HTML: |
-%HTML: Sites web et Services HORS de l'ENS: |
-%HTML: (21:FTP ; 80:HTTP ; 119:news ; 5190:port du protocole ICQ) |
+%%HTML: |
+%%HTML: Sites web et Services HORS de l'ENS: |
+%%HTML: (21:FTP ; 80:HTTP ; 119:news ; 5190:port du protocole ICQ) |
Jussieu:21 195.83.118.1 irts,irts-ext,komaz,komaz-ext,gateway.zrt,kwai,pioneer,pioneer-ext,RenaterCachan nobody Le serveur FTP de Jussieu. (France)
Free:21 213.228.0.141 irts,irts-ext,komaz,komaz-ext,gateway.zrt,kwai,pioneer,pioneer-ext,RenaterCachan nobody Le serveur FTP de free. (France)
Voila:80 195.101.94.80 irts,irts-ext,komaz,komaz-ext,gateway.zrt,kwai,pioneer,pioneer-ext,RenaterCachan nobody Est-ce que Voila fonctionne ? (France)
Yahoo!:80 66.94.230.39 irts,irts-ext,komaz,komaz-ext,gateway.zrt,kwai,pioneer,pioneer-ext,RenaterCachan nobody Est-ce que Yahoo! fonctionne ? (USA)
Altavista:80 216.155.200.155 irts,irts-ext,komaz,komaz-ext,gateway.zrt,kwai,pioneer,pioneer-ext,RenaterCachan nobody Est-ce que Altavista fonctionne ? (USA)
-""" )
- file.close()
+"""
+
+ # service à redémarer
+ restart_cmd = ""
+
+ # FIN DE LA CONFIGURATION
+
+ def __str__ (self) :
+ return "autostatus"
- # on commit
- os.popen( "cvs -Q -d '/usr/cvs-rep' commit -l -m 'Changement dans l autotstatus' /etc/autostatus/hosts" )
+ def make_config (self, dico ) :
+ """
+ Transforme le dico en suite lignes de configuration
+ """
+ liste = dico.keys()
+ liste.sort()
+ append = ""
+ for i in liste :
+ append = append + " ".join( dico[i] ) + "\n"
+ return append.encode('iso-8859-15')
+
+ def _gen (self) :
+
+ # machines crans
+ machines = crans().machines()
+
+ # tri des machines par type
+ bornes = {}
+ switchs = {}
+ serveurs = {}
+
+ # tri des machines
+ for m in machines :
+
+ # machine exclue
+ if m.nom() in self.exclude :
+ continue
+
+ # les bornes
+ if m.canal() :
+ # C'est une borne
+ if m.info() :
+ # on regarde si c'est une borne de batiment
+ if ( m.info()[0][0:3] == "Au " ) and ( len(m.info()[0]) == 5 ) :
+ bornes[ "1-" + m.info()[0][4]+m.info()[0][3] ] = [ m.nom().split(".")[0] , m.nom() , 'none' , 'nobody' , m.info()[0] ]
+ else :
+ bornes[ "2-" +m.info()[0] ] = [ m.nom().split(".")[0] , m.nom() , 'none' , 'nobody' , m.info()[0] ]
+ else :
+ # on met les bornes non définies à la fin (ordre alphabétique)
+ bornes[ "3-" + m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , 'nobody' , 'Inutilise' ]
+
+ # les switchs
+ elif 'bat' == m.nom()[0:3] or 'backbone.crans.org' == m.nom() :
+
+ # on convertit le bat# en bat#-0
+ if not "-" in m.nom().split(".")[0] :
+ index = m.nom().split(".")[0] + "-0"
+ else :
+ index = m.nom().split(".")[0]
+
+ # on ajoute au dictionnaire
+ if m.info() :
+ switchs[ index ] = [ m.nom().split(".")[0] , m.nom() , 'none' , 'nobody' , m.info()[0] ]
+ else :
+ switchs[ index ] = [ m.nom().split(".")[0] , m.nom() , 'none' , 'nobody' , 'Infos non disponibles' ]
+
+ # les serveurs
+ else :
+ if m.info() :
+ serveurs[ m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , 'nobody' , m.info()[0] ]
+ else :
+ serveurs[ m.nom() ] = [ m.nom().split(".")[0] , m.nom() , 'none' , 'nobody' , 'Infos non disponibles' ]
+
+ # début du fichier
+ self.file = self._open_conf(self.CONFFILE)
+
+ # génère le dictionnaire pour les modifications
+ dico = {}
+ dico['switchs'] = self.make_config(switchs)
+ dico['bornes'] = self.make_config(bornes)
+ dico['serveurs'] = self.make_config(serveurs)
+
+ # on écrit dans le fichier de configuration
+ self.file.write( self.matrice % dico )
+
+ # on ferme le fichier
+ self.file.close()
+
+ # on commit
+ #os.popen( "cvs -Q -d '/usr/cvs-rep' commit -l -m 'Changement dans l autotstatus' /etc/autostatus/hosts" )
if __name__ == '__main__' :
# base de données
- base = crans_ldap()
+ tmp = autostatus()
# lancement du script
- autostatus ( base )
+ tmp.reconfigure()