# Création de Task "Shell Script"

Le menu **Muppy / Tasks / Tasks** permet d'accéder à l'ensemble des Tasks connues par Muppy.

![Liste des Tasks Muppy](/files/wOPQnC7fxklVQoiuvJtG)

### Formulaire de Création

Cliquez sur le bouton Create pour ouvrir le formulaire de création suivant.

<figure><img src="/files/E8xepo7Bp00uZdkBztvr" alt=""><figcaption><p>Shell Script Task creation</p></figcaption></figure>

1. Le nom de la Task est le nom du fichier script qui sera généré (*<mark style="background-color:yellow;">Il doit respecter les contraintes des noms de fichier Linux</mark>*).
2. Si le script est une callback particulière, vous devez sélectionner sa **Catégorie**, sinon vous ne pourrez pas la sélectionner.
3. Ici vous déclarez les paramètres (nom, type, description)

#### Définition des Paramètres

Le fait de les définir permet aux Tasks Script shell d'avoir la même ergonomie dans les Tasks Runs que les Internal Tasks.

Les paramètres déclarés:

* seront saisie dans les **Task Runs**
* doivent correspondre aux paramètres attendues pour les callbacks

### Onglet script

Utilisez l'onglet Script pour saisir les commandes qui seront exécutées.

Le script est saisi sous forme d'une template Jinja2.&#x20;

<figure><img src="/files/dSeaKPnWl7vLvx4BqMy2" alt=""><figcaption><p>Script tab</p></figcaption></figure>

#### Utilisation des paramètres dans les Scripts

Les paramètres de la Task sont injectés dans le **context** Jinja2 dans un objet (python dict)  nommé **params**.

Dans l'exemple ci-dessus, le paramètre **a\_name** déclaré au niveau de la **Task** est récupéré dans le script par la template **{{ params.a\_name }}**

### **Définition du username qui exécute le script**

Par défaut (si **Script username** est vide), le user qui éxécute le script est le Control User du host.

Vous pouvez forcer un user name particulier: eg. **traefik.**

Il est également possible d'extraire le username des paramètres en saisissant une template dont le **context** contient directement les paramètres. {*{ param\_name..... }}*

#### Exemple

L'exemple suivant montre une Task callback de catégorie **Pack8s Resource Activator** chargée de supprimer une ligne dans le crontab du Owner d'un Server LXC lorsque le Server LXC est activé dans le cas d'un Switchover ou Failover.

<figure><img src="/files/Lzgnj1W74NjH6viqHaV2" alt=""><figcaption><p>Task definition with category and parameter</p></figcaption></figure>

**A noter:**

* La **Category :** Ici il s'agit d'une callback **Pack8s Resource Activator.** Elle doit être renseignée pour que la Task soit disponible à la sélection dans le formulaire de la Resource dans le Meta Cluster.
* Le paramètre **resource\_obj** est imposer par la **Category**. L'utilisateur doit le créer par copie d'une Callback existante. Toutes les tasks avec cette **Category** auront ce paramètre.

<figure><img src="/files/4lHOWcQN5LdpkzkFYnql" alt=""><figcaption><p>Callback script example with username extracted from params</p></figcaption></figure>

**Definition du username par extraction des paramètres:**

* Dans cette exemple, au moment de l'exécution, le user qui execute le script est extrait du paramètre **resource\_obj** avec la template **{{ resource\_obj.dev\_server\_id.username }}** qui récupère le user owner du LXC Srver associé associé à la resource.

Voici le code de la Task hello\_user ci-dessus:


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.muppy.io/guides/muppy-core/tasks-et-fact-collectors/creation-de-task-shell-script.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
