Ajout de scripts personnalisés

Les scripts personnalisés doivent obligatoirement avoir l'extension .zephir et être placés sur le serveur client dans le répertoire : /usr/share/zephir/scripts/.

Truc & astuce

Pour placer le script au bon endroit, vous pouvez utiliser le mécanisme de variante.

Exemple

Ce script peut être inséré dans les fichiers divers d'un serveur avec pour destination : /usr/share/zephir/scripts/test_perso.zephir.

Il 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 python3

# -*- 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 exemple MAJ, 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.

Remarque

Le client Zéphir lance les scripts en tant qu'utilisateur uucp. Si des droits plus élevés sont nécessaires, il est possible d'utiliser la commande sudo_script pour lancer un script avec des droits root :

from zephir.lib_zephir import sudo_script

sudo_script('mon_script.zephir')

Dans le cas d'ajout d'un nouveau script, il faut redémarrer le service z_stats pour que le script soit pris en compte par sudoers.