

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Développer des modules EC2Rescue pour les instances Linux Amazon EC2
<a name="ec2rl_moduledev"></a>

Les modules sont écrits en YAML, une norme de sérialisation des données. Le fichier YAML d’un module se compose d’un document unique, qui représente le module et ses attributs.

## Ajouter des attributs de module
<a name="ec2rl-adding-modules"></a>

Le tableau suivant répertorie les attributs de module disponibles.


| Attribut | Description | 
| --- | --- | 
| name | Nom du module. La longueur du nom doit être inférieure ou égale à 18 caractères. | 
| Version | Numéro de version du module. | 
| title | Titre court et descriptif du module. La longueur de cette valeur doit être inférieure ou égale à 50 caractères. | 
| helptext |  Description étendue du module. La longueur de chaque ligne doit être inférieure ou égale à 75 caractères. Si le module consomme des arguments, obligatoires ou facultatifs, incluez-les dans la valeur helptext. Exemples : <pre>helptext: !!str |<br />  Collect output from ps for system analysis<br />  Consumes --times= for number of times to repeat<br />  Consumes --period= for time period between repetition</pre> | 
| placement | Étape dans laquelle le module doit être exécuté. Valeurs prises en charge : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| langage | Langage dans lequel le code du module est écrit. Valeurs prises en charge : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  Le code Python doit être compatible avec Python 2.7.9\$1 et Python 3.2\$1.   | 
| remediation |  Indique si le module prend en charge la correction. Les valeurs prises en charge sont `True` ou `False`. Le module utilise par défaut `False` si aucune valeur n’est indiquée. Il s’agit donc d’un attribut facultatif pour les modules qui ne prennent pas en charge la correction.  | 
| content | Intégralité du code de script. | 
| contrainte | Nom de l’objet contenant les valeurs de contrainte. | 
| domaine | Descripteur de la façon dont le module est regroupé ou classé. L’ensemble de modules inclus utilise les domaines suivants :  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| class | Descripteur du type de tâche effectué par le module. L’ensemble de modules inclus utilise les classes suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | Liste des distributions Linux que ce module prend en charge. L’ensemble de modules inclus utilise les distributions suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| obligatoire | Arguments obligatoires que le module consomme à partir des options de la CLI. | 
| facultatif | Arguments facultatifs que le module peut utiliser. | 
| logiciel | Exécutables logiciels utilisés dans le module. Cet attribut a pour but de spécifier un logiciel qui n’est pas installé par défaut. La logique EC2 Rescue for Linux garantit que ces programmes sont présents et exécutables avant d'exécuter le module. | 
| package | Package logiciel source pour un exécutable. Cet attribut a pour but de fournir des détails étendus sur le package avec le logiciel, y compris une URL pour le téléchargement ou pour obtenir de plus amples informations. | 
| sudo | Indique si l’accès racine est obligatoire pour exécuter le module.  Vous n’avez pas besoin d’implémenter des vérifications sudo dans le script du module. Si la valeur est vraie, la logique EC2 Rescue for Linux n'exécute le module que lorsque l'utilisateur exécutant dispose d'un accès root. | 
| perfimpact | Indique si le module peut avoir un impact important sur les performances qui affecte l’environnement dans lequel il est exécuté. Si la valeur est true et que l’argument `--perfimpact=true` n’est pas présent, le module est ignoré. | 
| parallelexclusive | Spécifie un programme qui requiert une exclusivité mutuelle. Par exemple, tous les modules qui spécifient « bpf » sont exécutés en série. | 

## Ajouter des variables d’environnement
<a name="ec2rl_adding_envvars"></a>

Le tableau suivant répertorie les variables d’environnement disponibles.


| Variable d’environnement | Description | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | Chemin vers ec2rl.py. Ce chemin peut être utilisé pour localiser le répertoire lib et utiliser les modules Python fournis. | 
|  `EC2RL_WORKDIR`  |  Répertoire tmp principal pour l’outil de diagnostic. Valeur par défaut: `/var/tmp/ec2rl`. | 
|  `EC2RL_RUNDIR`  |  Répertoire dans lequel toutes les sorties sont stockées. Valeur par défaut: `/var/tmp/ec2rl/<date&timestamp>`.  | 
|  `EC2RL_GATHEREDDIR`  |  Répertoire racine dans lequel placer les données collectées sur le module. Valeur par défaut:`/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/`.  | 
|  `EC2RL_NET_DRIVER`  |  Pilote utilisé pour la première interface réseau non virtuelle, triée par ordre alphabétique, de l’instance. Exemples : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_SUDO`  |  True si EC2 Rescue for Linux est exécuté en tant que root ; sinon, faux.  | 
|  `EC2RL_VIRT_TYPE`  |  Type de virtualisation, tel que fourni par les métadonnées d’instance. Exemples : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  Liste énumérée des interfaces du système. La valeur est une chaîne contenant des noms, tels que `eth0`, `eth1`, etc. Elle est générée via `functions.bash` et est disponible uniquement pour les modules dont elle provient.  | 

## Utiliser la syntaxe YAML
<a name="ec2rl_yamlsyntax"></a>

Tenez compte des points suivants lorsque vous créez vos fichiers YAML de module :
+ Le triple trait d’union (`---`) indique le début explicite d’un document.
+ La balise `!ec2rlcore.module.Module` indique à l’analyseur YAML le constructeur à appeler lors de la création de l’objet à partir du flux de données. Vous trouverez le constructeur dans le fichier `module.py`.
+ La balise `!!str` indique à l’analyseur YAML de ne pas tenter de déterminer le type des données, et d’interpréter plutôt le contenu comme un littéral de chaîne.
+ Le caractère pipe (`|`) indique à l’analyseur YAML que la valeur est une scalaire littérale. Dans ce cas, l’analyseur inclut tous les espaces. C’est important pour les modules car les caractères de mise en retrait et de saut de ligne sont conservés.
+ La mise en retrait standard YAML correspond à deux espaces, comme illustré dans les deux exemples suivants. Veillez à conserver la mise en retrait standard (par exemple, quatre espaces pour Python) pour votre script, puis mettez en retrait l’intégralité du contenu à l’aide de deux espaces dans le fichier du module.

## Exemples de modules
<a name="ec2rl_example"></a>

Example un (`mod.d/ps.yaml`):

```
--- !ec2rlcore.module.Module
# Module document. Translates directly into an almost-complete Module object
name: !!str ps
path: !!str
version: !!str 1.0
title: !!str Collect output from ps for system analysis
helptext: !!str |
  Collect output from ps for system analysis
  Requires --times= for number of times to repeat
  Requires --period= for time period between repetition
placement: !!str run
package: 
  - !!str
language: !!str bash
content: !!str |
  #!/bin/bash
  error_trap()
  {
      printf "%0.s=" {1..80}
      echo -e "\nERROR:	"$BASH_COMMAND" exited with an error on line ${BASH_LINENO[0]}"
      exit 0
  }
  trap error_trap ERR

  # read-in shared function
  source functions.bash
  echo "I will collect ps output from this $EC2RL_DISTRO box for $times times every $period seconds."
  for i in $(seq 1 $times); do
      ps auxww
      sleep $period
  done
constraint:
  requires_ec2: !!str False
  domain: !!str performance
  class: !!str collect
  distro: !!str alami ubuntu rhel suse
  required: !!str period times
  optional: !!str
  software: !!str
  sudo: !!str False
  perfimpact: !!str False
  parallelexclusive: !!str
```