Ansible - 5.1 Les principaux modules Ansible : command, service, fichiers

Un module Ansible réalise une tâche précise sur une machine, comme exécuter une commande, démarrer un service ou modifier un fichier. Cette leçon présente les grandes familles de modules, puis détaille trois exemples concrets. Elle explique aussi l'idempotence, un principe clé pour écrire des playbooks fiables.

Les grandes familles de modules

Ansible propose des centaines de modules, regroupés par domaine. La vidéo en cite plusieurs familles, à partir des tâches courantes d'administration.

Chaque famille répond à un besoin précis. Il suffit de connaître le module adapté à la tâche à réaliser.

Il existe aussi des modules pour Windows. Ils permettent de créer un site web, d'installer un logiciel à l'aide d'un programme d'installation MSI, de modifier le registre et de gérer les services. La vidéo cite également le module de copie, qui transfère un fichier d'une source vers une destination.

  • Système : utilisateurs, groupes, services, montages et pare-feu.
  • Fichiers : copie, archivage, recherche, modification d'une ligne ou d'un contenu, ACL.
  • Bases de données : création et suppression de bases MySQL ou PostgreSQL.
  • Cloud : instances, réseau, sécurité et conteneurs chez Amazon, Azure, Google, OpenStack et d'autres.
  • Windows : copie de fichiers, commandes, services, installation de logiciels et registre.

Exécuter une commande avec le module command

Le module command exécute une commande sur la machine distante. On écrit le nom du module, suivi de la commande. Dans l'exemple, la commande date affiche la date sur la cible.

Le module command prend la commande en forme libre. Le paramètre chdir change de répertoire avant l'exécution. Le paramètre creates ne lance la commande que si le fichier ou le dossier indiqué n'existe pas.

- name: Afficher la date
  command: date

Gérer un service avec le module service

Le module service démarre, arrête ou redémarre un service. Le paramètre name indique le service visé, et le paramètre state indique l'état attendu.

Si le service est déjà démarré, Ansible ne fait rien. Une opération idempotente donne le même résultat à chaque exécution, ce qui rend les playbooks sûrs à relancer.

Dans un playbook, plusieurs services peuvent être démarrés dans un ordre précis. La vidéo démarre d'abord la base de données, puis les autres services. Le paramètre state accepte started pour démarrer, stopped pour arrêter et restarted pour redémarrer.

- name: Démarrer le service
  service:
    name: <nom-du-service>
    state: started

Modifier une ligne avec le module lineinfile

Le module lineinfile cherche une ligne dans un fichier. Si elle existe, il la remplace. Sinon, il l'ajoute.

Sans ce comportement, un script qui ajoute une entrée à chaque exécution créerait des doublons. Avec lineinfile, relancer le playbook garantit une seule entrée.

La vidéo donne l'exemple de l'ajout d'un nouveau serveur dans un fichier de configuration. Un script simple ajouterait une entrée à chaque exécution. Avec lineinfile, il n'y a qu'une seule entrée, même si le playbook est relancé plusieurs fois.

En résumé

Un module accomplit une tâche précise. Command exécute une commande, service gère l'état d'un service et lineinfile modifie une ligne dans un fichier. Grâce à l'idempotence, un playbook peut être relancé sans effet indésirable.

Points clés

  • Un module Ansible réalise une tâche précise sur une machine.
  • Le module command exécute une commande en forme libre.
  • Le module service démarre, arrête ou redémarre un service selon le paramètre state.
  • Le module lineinfile remplace une ligne existante ou ajoute une ligne manquante.
  • L'idempotence garantit le même résultat à chaque exécution du playbook.

Questions fréquentes

Faut-il une clé de paramètre pour écrire la commande du module command ?

Non. Le module command prend la commande en forme libre, directement après son nom.

Qu'est-ce que l'idempotence ?

C'est la propriété d'une opération qui donne le même résultat, même lorsqu'elle est exécutée plusieurs fois.

Pourquoi lineinfile évite-t-il les doublons ?

Il vérifie si la ligne existe avant d'agir. Elle est remplacée ou ajoutée, mais jamais dupliquée.