Detabification

darcs-hash:20051005115406-d1718-c783b5e6e80382dd4de74e593beba81e1811487f.gz
This commit is contained in:
bernat 2005-10-05 13:54:06 +02:00
parent 8746085e35
commit a6e0665dff

View file

@ -179,16 +179,16 @@ def format_mac(mac) :
class service :
""" Défini un service à redémarrer """
def __init__(self,nom,args=[],start=[]) :
""" nom du service
liste des arguments
liste d'horaires de démarages """
self.nom=nom
self.args=args
self.start=map(int,start)
""" nom du service
liste des arguments
liste d'horaires de démarages """
self.nom=nom
self.args=args
self.start=map(int,start)
def __str__(self) :
return "%s(%s) à partir du %s" % (self.nom, \
','.join(self.args), \
return "%s(%s) à partir du %s" % (self.nom, \
','.join(self.args), \
' et '.join(map(lambda t:time.strftime(date_format,time.gmtime(t)), self.start)))
class crans_ldap :
@ -228,9 +228,9 @@ class crans_ldap :
def __del__(self) :
# Destruction des locks résiduels
if hasattr(self,'_locks') :
for lock in self._locks :
self.remove_lock(lock)
if hasattr(self,'_locks') :
for lock in self._locks :
self.remove_lock(lock)
def connect(self):
""" Initialisation des connexion vers le serveur LDAP """
@ -353,6 +353,13 @@ class crans_ldap :
try :
self.conn.add_s(lock_dn,modlist)
# Pourquoi des locks à la con restent ?
# On écrit les locks dans un fichier à des fins de debug
try:
open('/usr/scripts/gestion/ldap_locks','a').write("%s\t %s\n"%(modlist[1][1], modlist[2]))
except:
# on ne va pas cracher le script à cause du debug !
pass
except ldap.ALREADY_EXISTS :
# Pas de chance, le lock est déja pris
try :
@ -362,16 +369,16 @@ class crans_ldap :
if l != lockid :
# C'est locké par un autre process que le notre
# il tourne encore ?
if l.split('-')[0] == hostname and os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) :
# Il ne tourne plus
self.remove_lock(res[0]) # delock
return self.lock(item,valeur) # relock
if l.split('-')[0] == hostname and os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) :
# Il ne tourne plus
self.remove_lock(res[0]) # delock
return self.lock(item,valeur) # relock
raise EnvironmentError(u'Objet (%s=%s) locké, patienter.' % (item, valeur), l)
else :
if not hasattr(self,'_locks') :
self._locks = [lock_dn]
else :
self._locks.append(lock_dn)
else :
if not hasattr(self,'_locks') :
self._locks = [lock_dn]
else :
self._locks.append(lock_dn)
def remove_lock(self,lockdn) :
""" Destruction d'un lock
@ -379,11 +386,11 @@ class crans_ldap :
# Mettre des verifs ?
if lockdn!='*' :
self.conn.delete_s(lockdn)
try:
self._locks.remove(lockdn)
except:
# Pas grave si ca foire, le lock n'y est plus
pass
try:
self._locks.remove(lockdn)
except:
# Pas grave si ca foire, le lock n'y est plus
pass
else :
locks = self.list_locks()
for l in locks :
@ -397,78 +404,78 @@ class crans_ldap :
""" Si new = None retourne la liste des services à redémarrer
Si new est fourni et ne commence pas par - ajoute le service à la liste
avec les arguments args (args doit être une liste).
start indique la date (secondes depuis epoch) à partir du moment ou
cette action doit être effectué
start indique la date (secondes depuis epoch) à partir du moment ou
cette action doit être effectué
Si new commence par - supprime le service si son start est plus vieux que maintenant
Si new commence par -- supprime dans condition.
Si new commence par -- supprime dans condition.
"""
if new : new = preattr(new)[1]
if new : new = preattr(new)[1]
# Quels services sont déjà à redémarrer ?
serv = {} # { service : [ arguments ] }
serv_dates = {} # { service : [ dates de restart ] }
services = []
serv_dates = {} # { service : [ dates de restart ] }
services = []
for s in self.conn.search_s(self.base_services,1,'objectClass=service') :
s=s[1]
serv[s['cn'][0]] = s.get('args',[])
serv_dates[s['cn'][0]] = s.get('start',[])
services.append(service(s['cn'][0],s.get('args',[]),s.get('start',[])))
# Retourne la liste des services à redémarrer
if not new : return services
serv_dates[s['cn'][0]] = s.get('start',[])
services.append(service(s['cn'][0],s.get('args',[]),s.get('start',[])))
# Effacement d'un service
if new[0] == '-' :
if new[1] == '-' :
# Double -- on enlève quelque soit la date
remove_dn='cn=%s,%s' % ( new[2:], self.base_services )
else :
# On enlève uniquement si la date est passée
remove_dn='cn=%s,%s' % ( new[1:], self.base_services )
if not serv.has_key(new[1:]) :
# Existe pas => rien à faire
return
keep_date=[]
for date in serv_dates[new[1:]] :
if time.time() < int(date) :
keep_date.append(date)
if keep_date :
self.conn.modify_s(remove_dn,ldap.modlist.modifyModlist({'start' : serv_dates[new[1:]]}, { 'start' : keep_date }))
remove_dn=None
if remove_dn :
# Supression
try : self.conn.delete_s(remove_dn)
except : pass
# Si n'existe pas => Erreur mais le résultat est la.
return
# Retourne la liste des services à redémarrer
if not new : return services
# Effacement d'un service
if new[0] == '-' :
if new[1] == '-' :
# Double -- on enlève quelque soit la date
remove_dn='cn=%s,%s' % ( new[2:], self.base_services )
else :
# On enlève uniquement si la date est passée
remove_dn='cn=%s,%s' % ( new[1:], self.base_services )
if not serv.has_key(new[1:]) :
# Existe pas => rien à faire
return
keep_date=[]
for date in serv_dates[new[1:]] :
if time.time() < int(date) :
keep_date.append(date)
if keep_date :
self.conn.modify_s(remove_dn,ldap.modlist.modifyModlist({'start' : serv_dates[new[1:]]}, { 'start' : keep_date }))
remove_dn=None
if remove_dn :
# Supression
try : self.conn.delete_s(remove_dn)
except : pass
# Si n'existe pas => Erreur mais le résultat est la.
return
serv_dn = 'cn=%s,%s' % ( new, self.base_services )
# Petite fonction à appliquer aux arguments
if type(args) == str : args = [ args ]
if type(args) == str : args = [ args ]
args=map(lambda x:preattr(x)[1] ,args)
if type(start) == int : start = [ start ]
start=map(lambda x:preattr(x)[1] ,start)
if type(start) == int : start = [ start ]
start=map(lambda x:preattr(x)[1] ,start)
if new in serv.keys() :
modlist = []
modlist = []
new_args = []
# Nouveaux arguments ?
# Nouveaux arguments ?
for arg in args :
if arg not in serv[new] :
new_args.append(arg)
if new_args :
modlist += ldap.modlist.modifyModlist({ 'args' : serv[new]}, { 'args' : serv[new] + new_args })
new_date = []
# Nouvelle date ?
for date in start :
if date not in serv_dates[new] :
new_date.append(date)
if new_date :
modlist += ldap.modlist.modifyModlist({'start' : serv_dates[new]}, { 'start' : serv_dates[new] + new_date })
if new_args :
modlist += ldap.modlist.modifyModlist({ 'args' : serv[new]}, { 'args' : serv[new] + new_args })
new_date = []
# Nouvelle date ?
for date in start :
if date not in serv_dates[new] :
new_date.append(date)
if new_date :
modlist += ldap.modlist.modifyModlist({'start' : serv_dates[new]}, { 'start' : serv_dates[new] + new_date })
if modlist :
try :
@ -478,11 +485,11 @@ class crans_ldap :
pass
# else rien à faire
else :
# Entrée non présente -> ajout
# Entrée non présente -> ajout
modlist = ldap.modlist.addModlist({ 'objectClass' : 'service' ,
'cn' : new ,
'args' : args ,
'start' : start } )
'start' : start } )
try :
self.conn.add_s(serv_dn,modlist)
except ldap.ALREADY_EXISTS :
@ -527,8 +534,8 @@ class crans_ldap :
el = '(%s=%s*)' % ( champ, expr)
elif champ == 'macAddress' :
# Formatage adresse mac
try: el = '(macAddress=%s)' % format_mac(expr)
except : pass
try: el = '(macAddress=%s)' % format_mac(expr)
except : pass
elif champ == 'paiement' and expr == 'ok' :
# Paiement donnant droit à une connexion maintenant ?
# il doit avoir payé pour
@ -614,14 +621,14 @@ class crans_ldap :
if not r['machine'] and not r['adherent'] and not r['club'] :
# Pas de réponses
return result
elif len(conds) == 1 :
# Filtre sur un seul champ
# => on retourne tout
for i in filtres :
if not r[i] : continue
for res in r[i] :
result[i].append(globals()[i](res,mode,self.conn))
elif not r['adherent'] and not r['club'] :
elif len(conds) == 1 :
# Filtre sur un seul champ
# => on retourne tout
for i in filtres :
if not r[i] : continue
for res in r[i] :
result[i].append(globals()[i](res,mode,self.conn))
elif not r['adherent'] and not r['club'] :
# Il n'y avait seulement un filtre machine
# => on retourne uniquement les machines trouvées
for m in r['machine'] :
@ -804,23 +811,23 @@ class base_classes_crans(crans_ldap) :
# Verif que les dates sont OK
if new[0] == 'now' :
new[0] = time.strftime(date_format)
debut=0
debut=0
else :
try : debut=int(time.mktime(time.strptime(new[0],date_format)))
except : raise ValueError(u'Date de début blacklist invalide')
if new[1] == 'now' :
if new[1] == 'now' :
new[1] = time.strftime(date_format)
fin=0
elif new[1]!='-' :
fin=0
elif new[1]!='-' :
try : fin=int(time.mktime(time.strptime(new[1],date_format)))
except : raise ValueError(u'Date de fin blacklist invalide')
else :
fin = -1
else :
fin = -1
if debut == fin :
raise ValueError(u'Dates de début et fin identiques')
if debut == fin :
raise ValueError(u'Dates de début et fin identiques')
new_c = ','.join(new)
new_c = preattr(new_c)[1]
@ -832,16 +839,16 @@ class base_classes_crans(crans_ldap) :
if self._data['blacklist'] != liste :
self._data['blacklist']=liste
self.modifs.append('blacklist_' + new[2])
if not hasattr(self,"__blacklist_restart") :
self.__blacklist_restart={}
if not self.__blacklist_restart.has_key(new[2]) :
self.__blacklist_restart[new[2]] = [ debut, fin ]
else :
if debut not in self.__blacklist_restart[new[2]] :
self.__blacklist_restart[new[2]].append(debut)
if fin!=-1 and fin not in self.__blacklist_restart[new[2]] :
self.__blacklist_restart[new[2]].append(fin)
if not hasattr(self,"__blacklist_restart") :
self.__blacklist_restart={}
if not self.__blacklist_restart.has_key(new[2]) :
self.__blacklist_restart[new[2]] = [ debut, fin ]
else :
if debut not in self.__blacklist_restart[new[2]] :
self.__blacklist_restart[new[2]].append(debut)
if fin!=-1 and fin not in self.__blacklist_restart[new[2]] :
self.__blacklist_restart[new[2]].append(fin)
return liste
def restore(self) :
@ -916,13 +923,13 @@ class base_classes_crans(crans_ldap) :
modif = modif.replace("solde", "debit %s Euros" % str(diff) )
else :
modif = modif.replace("solde", "credit %s Euros" % str(-diff) )
if 'droits' in self.modifs:
anciens_droits = self._init_data.get('droits',[])
nouveaux_droits = self._data.get('droits',[])
droits_ajoutes = ''.join( [ '+%s' % decode(d) for d in nouveaux_droits if d not in anciens_droits ] )
droits_enleves = ''.join( [ '-%s' % decode(d) for d in anciens_droits if d not in nouveaux_droits ] )
modif = modif.replace("droits", "droits : " + droits_ajoutes + droits_enleves )
if 'droits' in self.modifs:
anciens_droits = self._init_data.get('droits',[])
nouveaux_droits = self._data.get('droits',[])
droits_ajoutes = ''.join( [ '+%s' % decode(d) for d in nouveaux_droits if d not in anciens_droits ] )
droits_enleves = ''.join( [ '-%s' % decode(d) for d in anciens_droits if d not in nouveaux_droits ] )
modif = modif.replace("droits", "droits : " + droits_ajoutes + droits_enleves )
timestamp = localtime()
hist = "%s, %s" % ( time.strftime(date_format, timestamp), script_utilisateur )
@ -987,9 +994,9 @@ class base_classes_crans(crans_ldap) :
### Génération de la liste de services à redémarrer
# Quasiement tout est traité dans les classes filles.
if hasattr(self,"__blacklist_restart") :
for n,t in self.__blacklist_restart.items() :
self.services_to_restart("blacklist_%s"%n,[],t)
if hasattr(self,"__blacklist_restart") :
for n,t in self.__blacklist_restart.items() :
self.services_to_restart("blacklist_%s"%n,[],t)
# Reinitialisation
self._init_data = self._data.copy()
@ -2173,8 +2180,8 @@ class machine(base_classes_crans) :
def exempt(self,new=None) :
"""
Liste des réseaux vers lesquels on ne compte pas l'upload
Cette liste est transférée dans la base postgres de komaz
Liste des réseaux vers lesquels on ne compte pas l'upload
Cette liste est transférée dans la base postgres de komaz
Pour ajouter un réseau new doit être la chaîne
représentant le réseau à ajouter
Pour modifier new doit être une liste de la forme :
@ -2375,7 +2382,7 @@ class machine(base_classes_crans) :
self.services_to_restart('conf_wifi_ng')
# Reconfiguration clients wifi ?
if self.__typ in ('wifi','borne') and ( 'ipHostNumber' in self.modifs or 'host' in self.modifs or 'macAddress' in self.modifs ) :
if self.__typ in ('wifi','borne') and ( 'ipHostNumber' in self.modifs or 'host' in self.modifs or 'macAddress' in self.modifs ) :
self.services_to_restart('conf_wifi_ng')
# Regénération blackliste nécessaire ?
@ -2389,10 +2396,10 @@ class machine(base_classes_crans) :
self.services_to_restart('autostatus')
self.services_to_restart('mail_modif',['ip=%s' % self.ip()])
# Synchronisation avec la base pgsql pour les exemptions
if 'exempt' in self.modifs or 'ipHostNumber' in self.modifs :
self.services_to_restart('exemptions')
# Synchronisation avec la base pgsql pour les exemptions
if 'exempt' in self.modifs or 'ipHostNumber' in self.modifs :
self.services_to_restart('exemptions')
# Remise à zéro
self.modifs=[]
@ -2500,13 +2507,13 @@ if __name__ == '__main__' :
import sys
if 'lock' in sys.argv :
db = crans_ldap()
print db.list_locks()
for lock in db.list_locks() :
print "%s\t %s" % (lock[1]["lockid"][0],lock[0].split(',')[0])
if 'purgelock' in sys.argv :
db = crans_ldap()
db.remove_lock('*')
if 'menage' in sys.argv :
print "Ménage des machines des adhérents partis..."
db = crans_ldap()