Extreme sysadmin

Publié le par Peck

Cet article est maintenant sur http://linux-attitude.fr/post/Extreme-sysadmin

Niveau
:
Résumé :  Test::Harness


Régulièrement vous avez des problèmes sur vos machines. C'est normal, ça arrive à tout le monde. La plupart du temps on corrige le problème et c'est fini. Nooooonnnnn ... C'est mal !

Il ne faut pas corriger le problème. Il faut
  • S'assurer que le problème n'a pas d'impact
  • Faire un script qui vérifie que le problème est présent
  • Corriger le problème
  • S'assurer que le script renvoie ok
  • Compléter le script par des commentaires
En détail :
  • 1- Bon si vous n'avez pas le point 1 (ça s'explique très bien par le manque de moyens et plus rarement par le manque de temps) inversez les étapes 2 et 3, on fera avec.
  • 2- C'est lourd ce que vous me proposez là ! Oui, mais non, c'est un travail qui se prépare, vous devez déjà avoir un système de vérification disponible, et donc votre script sera très court. Par exemple :
[ -x /usr/bin/perl ] && echo ok
  • 3- OK, c'est votre boulot
  • 3.5- Itérez sur 2 si ça ne fonctionne toujours pas.
  • 4- Simple, ça prouve que vous avez bien écrit votre script et que vous avez corrigé le problème.
  • 5- Vu que vous avez corrigé le problème, ajoutez un commentaire sur le pourquoi du comment, voire un check supplémentaire qui détectera la prochaine arrivée du problème.


Ainsi lors du prochain incident, la procédure commencera par
  • Lancer le test
  • 0- Si ce test est ok on continue, sinon on lit les commentaire et c'est fini


Mieux, vous pouvez lancer les tests régulièrement et ainsi prévenir les problèmes.


Bon, il vous faut un infrastructure de test, faisons simple (autotest.pl) :
#!/usr/bin/perl
use Test::Harness qw(&runtests $verbose $switches);

# on stockera nos tests ici
$BASE="/usr/local/tests";

$switches = "";
$verbose=1;

# on lance tous les tests qu'on y trouve
chdir($BASE);
opendir(DIR, $BASE) || die "Directory doesn't exist: $!";
@files = grep { /^[^.]/ && -x "$BASE/$_" } readdir(DIR);
closedir(DIR);
print join(",",@files)."n";
runtests(@files);


Et un script d'exemple a mettre dans /usr/local/test sous le nom que vous voulez :
#!/bin/sh

# nombre de tests dans ce fichier
echo "1..2"

if [ "`dpkg-query -W apt 2>/dev/null | grep apt`" != "" ]
then
    echo "ok - apt present"
else
    echo "not ok - problème"
    echo "# il faut apt pour que cette machine fonctionne"
fi

echo "ok - 2e test toujours ok"


Et mettez le en cron, ça ne vous coûtera pas grand chose, de façon à ce qu'il vous envoie un mail lorsqu'il y a un problèlme (autotest.cron) :
#!/bin/sh
if /usr/local/bin/autotest.pl > /tmp/test.result
then
    echo -n
else
    cat /tmp/test.result
    rm /tmp/test.result
fi

D'où la crontab
MAILTO=moi@chez.moi
00 07 * * * /usr/local/bin/autotest.cron

Publié dans admin

Commenter cet article