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