A quoi bon passer par une interface web pour lancer des scripts lorsque vous êtes un pro du terminal ?
Et bien entre autres:
Pour déléguer aux utilisateurs métiers l’exécution de certains scripts de manière sécurisée, en limitant les options disponibles afin de prévenir toute mauvaise surprise et en gardant l’historique des exécutions: Exemple: Générer un rapport pour une plage de dates donnée et l’envoyer par mail
Ou pour exécuter facilement des tâches prédéfinies en cas d’urgence (un terminal n’est pas toujours à portée de main, contrairement à un smartphone): Exemple: Connaitre l’état ou redémarrer / arrêter un service linux
Je vous propose de répondre à ces 2 cas d’usage via l’utilisation des tâches paramétrables qui viennent d’être ajoutées dans la dernière release de Ctfreak.
Prérequis
Il nous faut:
Un serveur Unix: Linux, Mac OS X, FreeBSD, … (voir en fin d’article pour adapter à un serveur Windows) accessible via SSH où seront exécutés vos scripts. Nous le nommerons scriptsrv.
Une instance de Ctfreak avec un compte administrateur (la Free Edition suffira si vous adaptez les exemples de cet article en vous limitant à un paramètre par tâche).
Configuration du serveur scriptsrv
Connectez vous à votre instance Ctfreak avec un compte administrateur.
Commencez par ajouter la clef SSH permettant de se connecter au serveur via SSH Credential → New SSH Credential:
Puis ajoutez le serveur en lui même via Nodes → Internal Nodes → New node:
Vérifiez que la clef SSH Key for scriptsrv est bien sélectionnée comme Credential, puis validez pour créer le node scriptsrv.
Ctfreak peut désormais de connecter au serveur avec la clef SSH spécifiée pour y exécuter différentes tâches.
1er cas: Générer un rapport pour une plage de dates donnée et l’envoyer par mail
Pour notre exemple, nous allons partir du principe que vous disposez sur le serveur scriptsrv d’un exécutable generatereport
permettant de générer et d’envoyer par mail un rapport des ventes pour une période, un destinataire et un format donné. Si nous devions lancer cet exécutable directement dans un terminal, cela pourrait donner quelque chose comme:
generatereport --from 2024-03-04 --to 2024-03-10 --recipient nigel@mycompany.zzz --format pdf
Nous allons donc créer dans Ctfreak une tâche qui lors de son exécution génèrera à la volée un formulaire web permettant de renseigner ces 4 paramètres avant de lancer l’exécutable generatereport
.
Création du projet Reporting
Pour commencer, créons un projet dédié aux tâches de reporting.
Allez dans Projects → New Project
Validez pour créer le projet.
Création de la tâche Generate and send sales report
Allez dans Projects → Reporting → New task
Choisissez Bash Script comme type de tâche.
Renseignez comme indiqué les champs Name, Script et Node filter.
Dans le contenu de notre script, les 4 valeurs attendues sont renseignées via des variables d’environnement, toutes préfixées par CTP_
:
#!/bin/bash
generatereport --from $CTP_FROM --to $CTP_TO --recipient $CTP_RECIPIENT --format $CTP_FORMAT
Ces variables correspondent aux paramètres que nous allons créer en cliquant sur le bouton Add parameter.
Commençons par les dates de début et de fin de notre période:
Le type de paramètre Date permet de s’assurer qu’une date valide sera saisie dans notre formulaire d’exécution.
Le champ Default date type permet de prendre la semaine précédente comme période par défaut.
Le champs Name sera utilisé pour définir le nom de la variable d’environnement (
CTP_FROM
dans notre script fait donc référence au paramètre nomméFROM
).Lorsque le champ Label est renseigné, il remplace le champ Name pour faire référence à la variable lors de la génération du formulaire d’exécution.
Lors de l’exécution de la tâche, la date saisie sera convertie au format
YYYY-MM-DD
pour alimenter la variable d’environnement correspondante.
En ce qui concerne les mails des destinataires autorisés à recevoir le rapport, nous limiterons les choix possibles à 2 mails via le type de paramètre Selector:
Pour chaque option, le champs Label lorsqu’il est renseigné se substitue à Value lors de la génération du formulaire d’exécution. Nous aurions pu l’utiliser ici pour afficher Nigel
et John
dans le formulaire au lieu de leurs emails respectifs.
Pour terminer, un dernier paramètre de type Selector permettra de choisir le format du fichier généré (ici PDF ou Excel, mais c’est bien pdf
ou xlsx
qui sera transmis à notre script):
Toutes les informations nécessaires étant renseignées, il ne reste plus qu’à valider pour créer la tâche.
Exécution de la tâche
Allez dans Projects → Reporting → Generate and send sales report → Execute pour faire apparaitre le formulaire d’exécution.
Comme vous pouvez le constater, nos 4 paramètres sont bien pris en compte dans la génération du formulaire.
Ajout d’un utilisateur métier
Notre tâche étant opérationnelle, reste à donner la main à un utilisateur métier afin qu’il puisse l’exécuter.
Allez dans Users → New User
Validez pour créer l’utilisateur.
De base, un utilisateur non-admin n’a accès à rien (mis à part se connecter), il faut donc lui ajouter les droits nécessaires.
Allez dans Projects → Reporting → Access → Edit
Ajouter Jack en lui donnant le rôle Executor.
Jack a désormais accès au projet Reporting, mais uniquement pour exécuter les tâches qu’il contient.
2ème cas: Connaitre l’état ou redémarrer / arrêter un service linux
Création du projet Sysadmin
Créons un projet dédié aux tâches d’administration système.
Allez dans Projects → New Project
Validez pour créer le projet.
Création de la tâche Systemctl
Allez dans Projects → Sysadmin → New task et comme pour notre cas précédent choisissez Bash Script comme type de tâche.
Renseignez comme indiqué les champs Name, Script et Node filter.
Cliquez sur le bouton Add parameter pour ajouter la liste des services concernés (ici Postgresql et Apache)
Ainsi que les commandes pour connaitre l’état, redémarrer ou arrêter le service.
Validez pour créer la tâche.
Exécution de la tâche
Allez dans Projects → Sysadmin → Systemctl → Execute pour faire apparaitre le formulaire d’exécution.
Exécutez la tâche et consultez les logs en cliquant sur l’icône en forme d’œil.
Lancer des scripts Powershell plutôt que Bash
Si votre serveur scriptsrv est sous Windows, il suffit de faire quelques ajustements pour lancer des scripts Powershell plutôt que Bash:
- Activez le serveur SSH interne de Windows.
- Lors de la création du node scriptsrv, définissez la propriété OS Family à
Windows
plutôt queUnix
. - Créez des tâches de type Powershell Script au lieu de Bash Script et écrivez le contenu de vos scripts en Powershell plutôt que Bash.
Le principe d’injection des paramètres sous forme de variables d’environnement reste exactement le même. Si nous adaptions le script de notre premier cas, cela donnerait:
generatereport --from $env:CTP_FROM --to $env:CTP_TO --recipient $env:CTP_RECIPIENT --format $env:CTP_FORMAT
Pour finir
Comme vous l’aurez constaté, le simple fait d’apposer une interface web sur un script offre beaucoup de possibilités.
Commencez par adapter les exemples présentés dans cet article à vos besoins, ils vous permettrons déjà d’offrir une plus grande autonomie à vos utilisateurs.