DEV Community

Cover image for Un formulaire web pour lancer vos scripts bash et powershell
Jean-Yves Pellé
Jean-Yves Pellé

Posted on • Updated on • Originally published at pelle.link

Un formulaire web pour lancer vos scripts bash et powershell

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:
    Générer et envoyer un rapport des ventes
    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):
    Etat d'un service
    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 CredentialNew SSH Credential:

Ajout de la clef SSH

Puis ajoutez le serveur en lui même via NodesInternal NodesNew node:

Ajout du serveur

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
Enter fullscreen mode Exit fullscreen mode

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 ProjectsNew Project

Création du projet

Validez pour créer le projet.

Création de la tâche Generate and send sales report

Allez dans ProjectsReportingNew task

Sélection du type de tâche

Choisissez Bash Script comme type de tâche.

Nouveau script bash

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
Enter fullscreen mode Exit fullscreen mode

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:

Dates de début et de fin

  • 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:

Destinataire

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):

Format

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 ProjectsReportingGenerate and send sales reportExecute pour faire apparaitre le formulaire d'exécution.

Générer et envoyer un rapport des ventes

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 UsersNew User

Création d'un utilisateur

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 ProjectsReportingAccessEdit

Ajouter Jack en lui donnant le rôle Executor.

Accès au projet

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 ProjectsNew Project

Création du projet

Validez pour créer le projet.

Création de la tâche Systemctl

Allez dans ProjectsSysadminNew task et comme pour notre cas précédent choisissez Bash Script comme type de tâche.

Nouveau script bash

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)

Service

Ainsi que les commandes pour connaitre l’état, redémarrer ou arrêter le service.

Commande

Validez pour créer la tâche.

Exécution de la tâche

Allez dans ProjectsSysadminSystemctlExecute pour faire apparaitre le formulaire d'exécution.

Etat d'un service

Exécutez la tâche et consultez les logs en cliquant sur l’icône en forme d’œil.

Logs

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 que Unix.
  • 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
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)