envoi de mails pour :

- la modification des droits d'un adhrent
  - la modification du firewall concernant une machine
  - la modification d'un serveur
la fonction utilise pour envoyer des mails est dans mail.py
pour le firewall je ne sait pas quoi gnrer comme execption si j'arrive pas
 envoyerr de mail, donc ca part  la trappe si komaz n'arrive pas  crire
le mail

darcs-hash:20050221194135-4ec08-9ef761d782311a90d0d6caa495b6862ada6634b9.gz
This commit is contained in:
chove 2005-02-21 20:41:35 +01:00
parent 91f6ae68cc
commit e1d596eed7
4 changed files with 95 additions and 58 deletions

View file

@ -218,18 +218,23 @@ class droits(crans_ldap,gen_config) :
import traceback import traceback
traceback.print_exc() traceback.print_exc()
self.anim = anim('\tenvoi de mails à roots') self.anim = anim('\tenvoi d\'un mail à roots')
try : try :
self.mail(self.uids) from mail import mail_details
adherents = []
for uid in self.uids :
adherents += self.search('uid=%s' % uid)['adherent']
mail_details(adherents, Subject = 'Modification des droits d\'un adherent')
self.anim.reinit() self.anim.reinit()
print OK print OK
except : except :
self.services_to_restart('droits',self.uids)
self.anim.reinit() self.anim.reinit()
print ERREUR print ERREUR
if self.debug : if self.debug :
import traceback import traceback
traceback.print_exc() traceback.print_exc()
elif gethostname().split(".")[0] == 'nectaris': elif gethostname().split(".")[0] == 'nectaris':
self.anim = anim('\tconfiguration master.passwd') self.anim = anim('\tconfiguration master.passwd')
try: try:
@ -243,31 +248,6 @@ class droits(crans_ldap,gen_config) :
import traceback import traceback
traceback.print_exc() traceback.print_exc()
def mail (self, uids) :
""" Envoi un mail à roots pour dire que certains droits ont changé """
# base du mail
From = "roots@crans.org"
To = "roots@crans.org"
base_txt_mail = """From: %(From)s
To: %(To)s
Subject: Modifications des droits d'un adhérent
%(Texte)s"""
# boucle pour chaque adhérent modifié
for uid in uids :
try :
adh = self.search('uid=%s' % uid)['adherent']
if len(adh):
adh = adh[0]
conn=smtplib.SMTP(smtpserv)
conn.sendmail(From, To , base_txt_mail % { 'From' : From, 'To' : To, 'Texte' : adher_details(adh).encode('iso8859-15') })
conn.quit()
except :
self.services_to_restart('droits',[uid])
if __name__ == '__main__' : if __name__ == '__main__' :
if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 : if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 :
print "%s <switch>" % sys.argv[0].split('/')[-1].split('.')[0] print "%s <switch>" % sys.argv[0].split('/')[-1].split('.')[0]

View file

@ -496,7 +496,19 @@ class firewall_komaz :
for tache in to_do : for tache in to_do :
self.__exception_catcher(tache) self.__exception_catcher(tache)
# envoi d'un mail à roots
try :
from mail import mail_details
machines = []
db = crans_ldap()
for ip in ip_list :
machines += db.search('ipHostNumber=%s' % ip)['machine']
mail_details(machines, Subject = 'Modification du firewall de komaz concernant une machine')
#mail_details(machines, To = 'quenelle', Subject = 'Modification du firewall du CR@NS', no_ascii = True)
except :
pass
def mac_ip_maj(self,ip_list) : def mac_ip_maj(self,ip_list) :
""" Mise à jour de la correspondance MAC-IP pour les ip fournies """ """ Mise à jour de la correspondance MAC-IP pour les ip fournies """
## Que faut-il faire ? ## Que faut-il faire ?

View file

@ -275,34 +275,26 @@ if hostname == 'zamok':
traceback.print_exc() traceback.print_exc()
if 'mail_modification_machine' in to_do.keys() : if 'mail_modification_machine' in to_do.keys() :
from whos import machine_details
if auto : db.services_to_restart('-mail_modification_machine') cprint('Modification d\'une machine : envoi d\'un mail à roots@crans.org','gras')
cprint('Modification d\'une machine : envoie d\'un mail à roots@crans.org','gras')
for ip in to_do['mail_modification_machine'] :
anim('\t' + ip)
try :
From = "roots@crans.org"
To = "roots@crans.org"
base_txt_mail = """From: %(From)s
To: %(To)s
Subject: Modifications sur une machine du CR@NS
%(Texte)s""" try :
machine = db.search('ipHostNumber=%s' % ip)['machine'] from mail import mail_details
if len(machine):
machine = machine[0] # liste des machines
conn=smtplib.SMTP(smtpserv) machines = []
conn.sendmail(From, To , base_txt_mail % { 'From' : From, 'To' : To, 'Texte' : machine_details(machine).encode('iso8859-15') }) for ip in to_do['mail_modification_machine'] :
conn.quit() anim('\t' + ip)
print OK machines += db.search('ipHostNumber=%s' % ip)['machine']
else:
print "Machine qui n'existe plus" # envoi du mail
except Exception, c: mail_details(machines, Subject = 'Modification d\'une machine de l\'association')
print ERREUR
if auto : db.services_to_restart('mail_modification_machine',[ip]) if auto : db.services_to_restart('-mail_modification_machine')
if debug : print OK
import traceback
traceback.print_exc() except :
print ERREUR
if 'autostatus' in to_do.keys() : if 'autostatus' in to_do.keys() :
if auto : db.services_to_restart('-autostatus') if auto : db.services_to_restart('-autostatus')

53
gestion/mail.py Executable file
View file

@ -0,0 +1,53 @@
#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
# Licence : GPLv2
import sys, smtplib
sys.path.append('/usr/scripts/gestion')
from ldap_crans import smtpserv
from whos import machine_details, club_details, adher_details
from ldap_crans import adherent, club, machine
def mail_details (Objets, Subject = "Modifications dans la base LDAP", To = ['chove@crans.org'], From = 'roots@crans.org', no_ascii = False ) :
"""
Envoie un mail à toutes les personnes des 'To', avec les informations
détaillées des objets contenus dans 'Objets' (instances de la classe
adherent, machine ou club)
Si no_ascii est à True, on vire la couleur
"""
if not len(Objets) :
return True
base_txt_mail = """From: %(From)s
To: %(To)s
Subject: %(Subject)s
%(Text)s"""
details = []
for i in Objets :
if i.__class__ == machine :
details.append(machine_details(i))
elif i.__class__ == adherent :
details.append(adher_details(i))
elif i.__class__ == club :
details.append(club_details(i))
else :
ok = False
texte = '\n\n- - - - = = = = # # # # # # = = = = - - - -\n\n'.join(details)
if no_ascii :
import sre
texte = sre.sub('\x1b\[1;([0-9]|[0-9][0-9])m','',texte)
mail_complet = base_txt_mail % { 'From' : From, 'To' : ','.join(To), 'Subject' : Subject, 'Text' : texte.encode('iso8859-15') }
conn=smtplib.SMTP(smtpserv)
conn.sendmail(From, To , mail_complet)
conn.quit()