#!/usr/bin/env python # -*- coding: utf-8 -*- """ Envoie un mail avec la liste des serveurs qui ne sont pas synchro avec bcfg2. Si appelé sans l'option ``--mail``, affiche le résultat sur stdout. N'affiche que ceux qui datent d'aujourd'hui, hier ou avant-hier (pour ne pas avoir les vieux serveurs qui traînent). """ from __future__ import print_function import sys import time import datetime import subprocess unjour = datetime.timedelta(1) aujourdhui = datetime.date(*time.localtime()[:3]) hier = aujourdhui - unjour avanthier = aujourdhui - unjour*2 def get_dirty(): """Récupère les hosts dirty récents.""" proc = subprocess.Popen(["/usr/sbin/bcfg2-reports", "-d"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) # | sort out, err = proc.communicate() if err: print(err, file=sys.stderr) if proc.returncode != 0: return (False, out) out = [l for l in out.split("\n") if any([date.strftime("%F") in l for date in [aujourdhui, hier, avanthier]])] out.sort() return True, "\n".join(out) if __name__ == "__main__": success, hosts = get_dirty() if not success: print(hosts, file=sys.stderr) exit(1) debug = "--debug" in sys.argv if "--mail" in sys.argv: if hosts != "": sys.path.append("/usr/scripts/") import utils.sendmail utils.sendmail.sendmail("root@crans.org", "roots@crans.org", u"Serveurs non synchronisés avec bcfg2", hosts, more_headers={"X-Mailer" : "bcfg2-reports"}, debug=debug) elif debug: print("Empty content, no mail sent") else: print(hosts, end="")