scripts/gestion/gen_confs/__init__.py
Vincent Le Gallic c039058708 Enregistrement des droits d'exécution. Aucune vraie modif.
Darcs n'enregistrait pas les permissions des fichiers.
2013-01-31 05:36:25 +01:00

135 lines
3.7 KiB
Python
Executable file

#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
""" Package pour la génération des fichiers de conf
Copyright (C) Frédéric Pauget
Licence : GPLv2
"""
import sys, os, signal
sys.path.append('/usr/scripts/gestion')
import time, commands
from affich_tools import *
from lock import *
import config
from tempfile import NamedTemporaryFile
class gen_config :
""" Base pour toutes les classes de génération de fichiers de conf """
base = None
debug = 0
_locked = 0
__restore={} # pour restorer la config d'origine en cas d'erreur de génération
def lockname(self):
"""Nom du lock"""
return str(self.__class__)
def lock(self) :
""" Lock le service courant """
if not self._locked :
make_lock(self.lockname(),'')
self._locked = 1
def unlock(self) :
""" Supression du lock """
if self._locked : remove_lock(self.lockname())
def __del__(self) :
# Au cas où...
self.unlock()
def _restore(self) :
""" Affichage d'une erreur et du traceback si debug
Puis restauration des fichers """
print ERREUR
if self.debug :
import traceback
traceback.print_exc()
# Restauration
for nom, f in self.__restore.items() :
os.system('cp -f %s %s' % ( f.name, nom ) )
def _open_conf(self,nom,comment=None) :
""" Créé un fichier
si comment est fourni, insère une entète qui utilisera le caractère
de commentaire fourni
copie l'ancien fichier dans un fichier temporaire pour permettre
la restauration en cas d'échec de la configuration
Retourne le descripteur du fichier """
f = NamedTemporaryFile()
os.system('cp %s %s 2> /dev/null' % ( nom, f.name ) )
self.__restore[nom] = f
fd = open(nom, 'w')
if comment :
e = """***********************************************************
Ce fichier est genere par les scripts de %s
Les donnees proviennent de la base LDAP et de la conf
presente au debut du script.
Generation : %s
Fichier : %s
NE PAS EDITER
***********************************************************""" % \
(__name__, time.strftime('%A %d %B %Y %H:%M'), nom )
e = comment + e.replace('\n', '\n%s' % comment) + '\n'
fd.write(e)
return fd
def gen_conf(self) :
""" Génération des fichiers de conf, retourne False si erreur """
self.lock()
self.anim = anim('\tgénération fichiers')
try :
warn = self._gen()
if warn :
self.anim.reinit()
print WARNING
if self.debug : sys.stderr.write(warn.encode("ISO-8859-15"))
else :
self.anim.reinit()
print OK
self.unlock()
return True
except :
self.anim.reinit()
self._restore()
self.unlock()
return False
def restart(self) :
""" Redémarrage du service concerné """
if not self.restart_cmd : return
self.lock()
self.anim = anim('\trestart')
status, output = commands.getstatusoutput(self.restart_cmd)
if status :
self.anim.reinit()
print ERREUR
if self.debug :
sys.stderr.write(output+'\n')
self.unlock()
return 1
else :
print OK
self.unlock()
def reconfigure(self) :
""" Génère les fichiers puis redémarre le service
si la génération c'est bien passée """
cprint(u'Reconfiguration %s :' % self.__str__(), 'gras')
if self.gen_conf() :
return self.restart()
else : return 1