Un formulaire web pour lancer vos scripts bash et powershell

17 mars 2024
bash ctfreak devops powershell sysadmin

A quoi bon passer par une interface web pour lancer des scripts lorsque vous êtes un pro du terminal ?

Et bien entre autres:

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:

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

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

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

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:

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.