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

1
cat > /usr/share/zephir/scripts/test.zephir <<EOF
2
#!/bin/bash
3
echo "Exécution du script \$0 en tant que $(whoami)" > /tmp/zephir
4
EOF
5
chmod +x /usr/share/zephir/scripts/test.zephir
6
service z_stats restart

Création d'un script personnalisé via l'interface Zéphir

Il est possible de déployer un script via Zéphir en utilisant le mécanisme des fichiers personnalisés.

Avec ce mécanisme, le fichier peut être déployé sur un serveur ou un ensemble de serveurs si le fichier est déclaré au niveau d'une variante[2].

Exemple

Déclaration d'un script en tant que fichier divers dans le formulaire "Liste des fichiers personnalisés"
Déclaration d'un script en tant que fichier divers dans le formulaire "Liste des fichiers personnalisés"
Édition des droits et du contenu du script personnalisé
Édition des droits et du contenu du script personnalisé

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.

Exécution d'un script personnalisé dans le formulaire "Actions sur le serveur"
Exécution d'un script personnalisé dans le formulaire "Actions sur le serveur"

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.

1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
3
###########################################################################
4
# Eole NG - 2007
5
# Copyright Pole de Competence Eole (Ministere Education - Academie Dijon)
6
# Licence CeCill cf /root/LicenceEole.txt
7
# eole@ac-dijon.fr
8
#
9
# test_perso.zephir
10
#
11
# exemple de script personnalisé pour le client zephir
12
# ###########################################################################
13
import os, sys
14
from zephir.lib_zephir import *
15
from creole import fonctionseole
16
17
if fonctionseole.init_proc('PERSO') == False:
18
    fonctionseole.zephir("MSG" , "procédure test_perso bloquée par Zéphir", "PERSO")
19
    sys.exit(1)
20
fonctionseole.zephir("INIT" , "script test_perso en cours d'execution", "PERSO")
21
try:
22
    message = sys.argv[1]
23
    fonctionseole.zephir("MSG" , "test_perso lancé avec l'argument %s" % message, "PERSO")
24
except:
25
    fonctionseole.zephir("ERR" , "test_perso lancé sans argument", "PERSO")
26
    exit(1)
27
if is_locked(['reconfigure']):
28
    fonctionseole.zephir("ERR" , "test_perso stoppé : reconfigure en cours", "PERSO")
29
    exit(1)
30
else:
31
    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.