Modules Ansible

Ce document poursuit l’objectif d’expliquer le concept, le rôle, la manipulation et les codes de retour des modules.

Objectifs de certification

RHCE EX294 (RHEL8)

Si vous poursuivez des objectifs de certification voici ceux qui sont suggérés ici :

  • 2. Maîtrise des composants de base d’Ansible
    • 2.2. Modules
    • 2.3. Variables
    • 2.4. Facts
    • 2.8. Utiliser la documentation fournie pour trouver des informations spécifiques aux modules et commandes Ansible
  • 5. Écriture de scripts pour les tâches d’administration
    • 5.2. Créer des scripts shell simples qui exécutent les commandes Ansible ad hoc
  • 7. Utilisation des modules Ansible

1. Introduction

Les modules Ansible sont des “bouts de codes” écrits principalement en Python (mais tout langage supportant les retours JSON est autorisé) pour modifier l’état d’une propriété d’un hôte. Les modules sont invoqués par l’exécution de tâches soit directement dans la ligne de commande ansible ou dans des livres de jeu avec la commande ansible-playbook.

2. Documentation des modules

Certains d’entre nous trouveront la documentation des modules plus agréable à lire en ligne : https://docs.ansible.com/ansible/latest/modules/modules_by_category.html. Mais on obtient exactement le même résultat hors-ligne, sur la machine de contrôle avec la commande ansible-doc :

Pour lister les modules :

ansible-doc -l

Pour appeler directement la documentation d’un module.

ansible-doc <module>
ansible-doc -s <module>

Veuillez vous informer sur les modules suivants :

  • ansible-doc setup
  • ansible-doc ping
  • ansible-doc lineinfile
  • ansible-doc uri

3. Exécutions de tâches Ad-Hoc

La commande ansible offre la possibilité d’exécuter des modules ansible de manière “ad-hoc”, c’est à dire tâche par tâche sur un groupe d’hôtes, une sorte de livre de jeux à tâche unique. L’intérêt est de pouvoir exécuter la même tâche en parallèle sur un inventaire (constitué d’un certain nombre de cibles) en tout ou en partie.

ansible --help

La commande offre ce résultat sur la sortie :

Usage: ansible <host-pattern> [options]

Define and run a single task 'playbook' against a set of hosts

En général, la commande s’écrit ansible suivie d’un hôte ou d’un groupe d’inventaire suivie -m nom_de_module suivie l’option d’argument -a "clé=valeur clé=valeur clé=valeur", par exemple de manière formelle :

ansible <group_inventaire> -m nom_de_module -a "clé=valeur clé=valeur clé=valeur"

Trois autres exemples fonctionnels :

ansible localhost -m debug -a "msg='Hello World!'"
ansible localhost -m file -a "path=/tmp/test state=touch"
ansible localhost -m file -a "path=/tmp/test state=absent"

Attention, l’inventaire doit exister et doit être nourri des hôtes à gérer !

On trouvera aussi des options utiles de la ligne de commande comme celles-ci :

  • -b, --become active l’élévation de privilèges (sudo)
  • -e qui permet de placer des variables ponctuelles ou un fichier de variables,
  • -o qui offre la sortie standard en une seule ligne,
  • ou encore -l, --limit qui permet de limiter la tâche à certains hôtes seulement de l’inventaire,
  • ou encore -v ou -vvv pour la verbosité,
  • -i précise le chemin du fichier d’inventaire.

Dans les exemples qui précèdent les tâches portent sur l’hôte spécial “localhost” qui n’a pas besoin d’être référencé dans un inventaire.

4. Valeurs de retour de l’exécution des tâches et des modules

Comme constaté, Ansible génère des valeurs de retour à la suite de l’exécution des tâches et des modules.

Valeurs de retour, Return Values

Valeurs de retourSignication de la valeurs de retour 
backup_file (fichier_de_sauvegarde)Pour les modules qui implémentent backup=noyes lors de la manipulation de fichiers, un chemin vers le fichier de sauvegarde créé.
changed (modifié)Un booléen indiquant si la tâche a dû effectuer des modifications. 
failed (échoué)Un booléen qui indique si la tâche a échoué ou non. 
invocationInformations sur la manière dont le module a été invoqué. 
msgUne chaîne avec un message générique relayé à l’utilisateur. 
rcCertains modules exécutent des utilitaires en ligne de commande ou sont conçus pour exécuter des commandes directement (raw, shell, commande, etc), ce champ contient le ‘code de retour’ de ces utilitaires. 
resultsSi cette clé existe, elle indique qu’une boucle était présente pour la tâche et qu’elle contient une liste du module normal’résultat’ par élément. 
skipped (évité)Un booléen qui indique si la tâche a été ignorée ou non. 
stderrCertains modules exécutent des utilitaires en ligne de commande ou sont conçus pour exécuter des commandes directement (raw, shell, commande, etc), ce champ contient la sortie d’erreur de ces utilitaires. 
stderr_linesLorsque stderr est retourné, nous fournissons aussi toujours ce champ qui est une liste de chaînes de caractères, un élément par ligne de l’original. 
stdoutCertains modules exécutent des utilitaires en ligne de commande ou sont conçus pour exécuter directement des commandes (raw, shell, commande, etc). Cette zone contient l’édition normale de ces utilitaires. 
stdout_linesLorsque stdout est retourné, Ansible fournit toujours une liste de chaînes de caractères, chacune contenant un élément par ligne de la sortie originale. 

5. Modules Linux

Les modules Ansible sont donc des “morceaux de code” pour modifier l’état d’une propriété d’un hôte.

On recense ici 240 modules utiles pour l’administration d’un système Linux.

5.1. Paquets logiciels et repos

5.2. Services

5.3. Règles de pare-feu

5.4. Systèmes de fichiers

5.5. Périphériques de stockage

5.6. Contenus de fichiers

5.7. Archives

5.8. Tâches planifiées

5.9. SSH

5.10. SELINUX

5.11. Utilisateurs et groupes

5.12. Administration divers

5.13. Commandes

5.14. Réseau

5.15. Informations

5.16. Modules internes

5.17. Include/Import

5.18. Autres Packagers et gestionnaires de dépendances

5.19. MySQL

5.20. Docker Containers

5.20. LXC/LXD

5.21. LDAP

5.22. Web Servers

5.23. PostgreSQL

5.24. RHSM Red Hat software channels

5.25. Fichiers ini, csv, xml

5.26. Gestion des processus et du noyau

5.27. Surveillance

5.28. XFS / ZFS

5.29. Debian/Ubuntu

5.30. Crypto TLS

6. Modules Réseau

Les modules Ansible pour l’automation du réseau sont désignés par le constructeur de l’OS suivi d’un nom de module :

  • *_facts : récupère des facts
  • *_command : exécute des commandes en mode privilège
  • *_config : exécute des commandes en mode de configuration

Selon le nom des plateformes :

  • Arista EOS = eos_*
  • Cisco IOS/IOS-XE = ios_*
  • Cisco NX-OS = nxos_*
  • Cisco IOS-XR = iosxr_*
  • Juniper Junos = junos_*
  • VyOS = vyos_*

Mais on trouve aussi un grand nombre des modules spécialisés.

7. Modules Windows

8. Modules VMWare

9. Développement de modules

Développement de modules

Exemple de développement d’un module simple.