Création et exécution de scripts personnalisés
L'ajout d'un script personnalisé est très encadré, les conditions suivantes doivent être respectées :
- le script personnalisé doit être placé dans le répertoire
/usr/share/zephir/scripts/
- le script personnalisé doit obligatoirement posséder l'extension
.zephir
- le script personnalisé doit être exécutable
Le client Zéphir s'exécute en tant qu'utilisateur uucp
. Afin d'obtenir des droits supplémentaires, les scripts personnalisés sont exécutés avec sudo[1].
Pour qu'un nouveau fichier personnalisé soit pris en compte par sudo, il faut re-démarrer le service z_stats
.
Cela peut s'effectuer via l'interface web de Zéphir ou directement sur le serveur client à l'aide de la commande : systemctl restart z_stats
Création d'un script personnalisé sur le serveur client
Il est possible de créer un fichier personnalisé en l'éditant directement sur le serveur cible.
Cela est pratique pour tester la fonctionnalité ou si le script concerne ne concerne qu'un seul serveur.
Exemple
cat > /usr/share/zephir/scripts/test.zephir <<EOF
echo "Exécution du script \$0 en tant que $(whoami)" > /tmp/zephir
EOF
chmod +x /usr/share/zephir/scripts/test.zephir
service z_stats restart
Création d'un script personnalisé via l'interface Zéphir
Exemple
Attention
Pour que le fichier personnalisé soit pris en compte par sudo, il faut que le service z_stats
ait été redémarré sur le serveur client.
Exécution d'un script personnalisé
Il est possible de demander l'exécution d'un script personnalisé sur le client.
Les informations à fournir sont le nom du script sans l'extension .zephir
et ses éventuels paramètres.
Création d'un script python avancé
Le script suivant ne fait rien de particulier mais peut servir de base pour utiliser les mécanismes de log et de remontée d'état.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
###########################################################################
# Eole NG - 2007
# Copyright Pole de Competence Eole (Ministere Education - Academie Dijon)
# Licence CeCill cf /root/LicenceEole.txt
# eole@ac-dijon.fr
#
# test_perso.zephir
#
# exemple de script personnalisé pour le client zephir
# ###########################################################################
import os, sys
from zephir.lib_zephir import *
from creole import fonctionseole
if fonctionseole.init_proc('PERSO') == False:
fonctionseole.zephir("MSG" , "procédure test_perso bloquée par Zéphir", "PERSO")
sys.exit(1)
fonctionseole.zephir("INIT" , "script test_perso en cours d'execution", "PERSO")
try:
message = sys.argv[1]
fonctionseole.zephir("MSG" , "test_perso lancé avec l'argument %s" % message, "PERSO")
except:
fonctionseole.zephir("ERR" , "test_perso lancé sans argument", "PERSO")
exit(1)
if is_locked(['reconfigure']):
fonctionseole.zephir("ERR" , "test_perso stoppé : reconfigure en cours", "PERSO")
exit(1)
else:
fonctionseole.zephir("FIN" , "test_perso : OK", "PERSO")
L'appel à la fonction init_proc('PERSO')
permet de vérifier et de bloquer l'exécution de la procédure depuis l'application Zéphir. L'interdiction peut être faite depuis l'action interdiction de fonctions
dans les actions du serveur.
Nous avons ajouté une catégorie PERSO
qui peut être utilisée dans des scripts additionnels si besoin. La fonction Zéphir du module fonctionseole
permet de faire remonter des informations au serveur Zéphir par l'intermédiaire de fichiers journaux. L'appel est fait sous la forme suivante :
fonctionseole.zephir(<etat>, <message>, <type>)
<etat>
indique au serveur Zéphir la finalité du message :-
INIT
pour indiquer le début d'une action ; -
MSG
pour un message d'information ; -
ERR
pour indiquer que l'action s'est mal terminée (suivant la valeur du champ type, le serveur peut passer en alerte dans Zéphir) ; -
FIN
pour indiquer que l'action s'est terminée correctement.
-
<message>
est le message à afficher dans les logs du serveur ;<type>
est un libellé qui permet au serveur Zéphir de classer les jounaux dans différentes catégories (par exempleMAJ
,RECONFIGURE
, ...).Pour les scripts personnalisés, il est recommandé d'utiliser le type
PERSO
.
Ces journaux sont envoyés en temps réel au serveur Zéphir (en cas d'erreur de connexion, ils sont stockés et réexpédiés après un retour à la normale). Ils sont également envoyés dans le fichier syslog
sur la machine cliente avec le préfixe zephir
.
Par exemple : Apr 15 15:41:15 horus zephir: INSTANCE => FIN : Instanciation terminée
.