diff --git a/Bundler/monit.xml b/Bundler/monit.xml index 1af4031..40ffb6f 100644 --- a/Bundler/monit.xml +++ b/Bundler/monit.xml @@ -4,6 +4,9 @@ + + + diff --git a/Python/etc/crans/wgetrc_monit b/Python/etc/crans/wgetrc_monit new file mode 100644 index 0000000..bb4237d --- /dev/null +++ b/Python/etc/crans/wgetrc_monit @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +info["owner"] = "root" +info["group"] = "root" +info["perms"] = 0600 + +include("secrets") + +header("Config de wget pour récupérer le status des serveurs") + +print """quiet=1 +timeout=10 +http-user=monit""" +print "http-password=" + secrets_new.get('monit_password') + diff --git a/Python/etc/cron.d/monit b/Python/etc/cron.d/monit index ec22aad..cccb552 100644 --- a/Python/etc/cron.d/monit +++ b/Python/etc/cron.d/monit @@ -4,37 +4,40 @@ info["owner"] = "root" info["group"] = "root" info["perms"] = 0644 -@# Fichier gere par BCfg2 (plugin Python) -@# -@# A ne modifier que sur bcfg2 +header() include('ip') -if has('wheezy'): - monit_p = '/usr/bin/monit' -else: - monit_p = '/usr/sbin/monit' - def has_shared_scripts(client): + """Est-ce que `client` a /usr/scripts en nfs ?""" return ('external' not in client.groups) and ( ('nfs' in client.groups) or ('crans-nfs' in client.groups)) +cron_tpl_nfs = "* * * * * root " + \ +"%(monit_path)s status > %(status_path)s/%(host)s 2> /dev/null" + +# On reproduit le même comportement en non-nfs: pas de màj du fichier de +# status si injoinable +cron_tpl_nonfs = "* * * * * root " + \ +"( /usr/bin/wget --config=/etc/crans/wgetrc_monit " +\ +"http://%(host)s.adm.crans.org:2812/_status -O /tmp/%(host)s.status && " +\ +"mv /tmp/%(host)s.status %(status_path)s/%(host)s )" + +data = { + 'host': hostname, + 'status_path': '/usr/scripts/var/monit/status', + 'monit_path': '/usr/bin/monit', +} + +# Si ce serveur possède un nfs, on génère le cron qui écrit dedans +if has_shared_scripts(metadata): + comment("Copie de `monit status` sur le nfs") + print cron_tpl_nfs % data + +# Pour les autres serveurs, c'est le serveur autostatus qui récupère if has('autostatus'): comment("Seveurs ne possedant pas de nfs :") for client in metadata.query.all(): if not has_shared_scripts(client): - print "* * * * * root ( /bin/nc -w 10 %s 4242 || true ) > /usr/scripts/var/monit/status/%s 2> /dev/null" % (client.hostname, client.hostname.split('.', 1)[0]) - -if not has_shared_scripts(metadata): - comment("Pas de nfs: attente de connexion depuis le serveur d'autostatus") - print '* * * * * root ( /bin/nc -w 60 -l -p 4242 -s %s -c "%s status" || true ) 2> /dev/null' % (admip(), monit_p) -else: - @# Copie de `monit status` sur le nfs - print "* * * * * root %s status > /usr/scripts/var/monit/status/`hostname` 2> /dev/null" % monit_p - - @# Montage de /usr/scripts pour que monit puisse écrire son status - @*/5 * * * * root if ! [ -d /usr/scripts/var/monit/status ] ; then if ! /bin/mount | grep /usr/scripts > /dev/null ; then /bin/mount /usr/scripts ; else echo "Erreur d'acces a /usr/scripts/var/monit/status" ; fi ; fi - -@# Redémarrage de monit s'il ne tourne pas -print """*/5 * * * * root if [ -n "$( %s status 2>&1 > /dev/null)" ]; then /etc/init.d/monit restart > /dev/null 2> /dev/null; fi""" % monit_p - + data['host'] = client.hostname.split('.', 1)[0] + print cron_tpl_nonfs % data