Possibilit de mettre des dates de restart.
darcs-hash:20051001225453-41617-f1ffb18f1035dd0c69cd16fd594380cf945c749b.gz
This commit is contained in:
parent
c5cbab958c
commit
201e09064a
1 changed files with 77 additions and 18 deletions
|
@ -176,6 +176,21 @@ def format_mac(mac) :
|
||||||
##################################################################################
|
##################################################################################
|
||||||
### Définition des classes
|
### Définition des classes
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
def __str__(self) :
|
||||||
|
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 :
|
class crans_ldap :
|
||||||
"""
|
"""
|
||||||
Classe de connexion à la base LDAP du crans.
|
Classe de connexion à la base LDAP du crans.
|
||||||
|
@ -378,42 +393,84 @@ class crans_ldap :
|
||||||
""" Liste les locks """
|
""" Liste les locks """
|
||||||
return self.conn.search_s(self.base_lock,1,'objectClass=lock')
|
return self.conn.search_s(self.base_lock,1,'objectClass=lock')
|
||||||
|
|
||||||
def services_to_restart(self,new=None,args=[]) :
|
def services_to_restart(self,new=None,args=[],start=0) :
|
||||||
""" Si new = None retourne la liste des services à redémarrer
|
""" Si new = None retourne la liste des services à redémarrer
|
||||||
Si new est founi et ne comence pas par - ajoute le service à la liste
|
Si new est fourni et ne commence pas par - ajoute le service à la liste
|
||||||
avec les arguments args (args doit être une liste).
|
avec les arguments args (args doit être une liste).
|
||||||
Si new est founi et ne comence par - supprime le service de la liste
|
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.
|
||||||
"""
|
"""
|
||||||
if new : new = preattr(new)[1]
|
if new : new = preattr(new)[1]
|
||||||
if new and new[0] == '-' :
|
|
||||||
serv_dn = 'cn=%s,%s' % ( new[1:], self.base_services )
|
|
||||||
try : self.conn.delete_s(serv_dn)
|
|
||||||
except : pass
|
|
||||||
# Si n'existe pas => Erreur mais le résultat est la.
|
|
||||||
return
|
|
||||||
|
|
||||||
# Quels services sont déjà à redémarrer ?
|
# Quels services sont déjà à redémarrer ?
|
||||||
serv = {} # { service : [ arguments ] }
|
serv = {} # { service : [ arguments ] }
|
||||||
|
serv_dates = {} # { service : [ dates de restart ] }
|
||||||
|
services = []
|
||||||
for s in self.conn.search_s(self.base_services,1,'objectClass=service') :
|
for s in self.conn.search_s(self.base_services,1,'objectClass=service') :
|
||||||
s=s[1]
|
s=s[1]
|
||||||
serv[s['cn'][0]] = s.get('args',[])
|
serv[s['cn'][0]] = s.get('args',[])
|
||||||
|
serv_dates[s['cn'][0]] = s.get('start',[])
|
||||||
if not new : return serv
|
services.append(service(s['cn'][0],s.get('args',[]),s.get('start',[])))
|
||||||
|
|
||||||
|
# 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 )
|
serv_dn = 'cn=%s,%s' % ( new, self.base_services )
|
||||||
|
|
||||||
# Petite fonction à appliquer aux arguments
|
# Petite fonction à appliquer aux arguments
|
||||||
def tr(arg) :
|
if type(args) == str : args = [ args ]
|
||||||
return preattr(arg)[1]
|
args=map(lambda x:preattr(x)[1] ,args)
|
||||||
args=map(tr,args)
|
if type(start) == int : start = [ start ]
|
||||||
|
start=map(lambda x:preattr(x)[1] ,start)
|
||||||
|
|
||||||
if new in serv.keys() :
|
if new in serv.keys() :
|
||||||
|
modlist = []
|
||||||
|
|
||||||
new_args = []
|
new_args = []
|
||||||
|
# Nouveaux arguments ?
|
||||||
for arg in args :
|
for arg in args :
|
||||||
if arg not in serv[new] :
|
if arg not in serv[new] :
|
||||||
new_args.append(arg)
|
new_args.append(arg)
|
||||||
if new_args :
|
if new_args :
|
||||||
modlist = ldap.modlist.modifyModlist({ 'args' : serv[new] }, { 'args' : serv[new] + 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 :
|
try :
|
||||||
self.conn.modify_s(serv_dn,modlist)
|
self.conn.modify_s(serv_dn,modlist)
|
||||||
except ldap.TYPE_OR_VALUE_EXISTS :
|
except ldap.TYPE_OR_VALUE_EXISTS :
|
||||||
|
@ -421,9 +478,11 @@ class crans_ldap :
|
||||||
pass
|
pass
|
||||||
# else rien à faire
|
# else rien à faire
|
||||||
else :
|
else :
|
||||||
|
# Entrée non présente -> ajout
|
||||||
modlist = ldap.modlist.addModlist({ 'objectClass' : 'service' ,
|
modlist = ldap.modlist.addModlist({ 'objectClass' : 'service' ,
|
||||||
'cn' : new ,
|
'cn' : new ,
|
||||||
'args' : args } )
|
'args' : args ,
|
||||||
|
'start' : start } )
|
||||||
try :
|
try :
|
||||||
self.conn.add_s(serv_dn,modlist)
|
self.conn.add_s(serv_dn,modlist)
|
||||||
except ldap.ALREADY_EXISTS :
|
except ldap.ALREADY_EXISTS :
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue