Ansible est un outil d’automatisation largement utilisé qui peut gérer des centaines de nœuds en une seule opération. Ansible offre de nombreuses fonctionnalités exceptionnelles, et l’une d’entre elles est sa capacité à gérer une seule ligne au sein d’un fichier sur des nœuds distants en utilisant le module Ansible lineinfile.
Le module Ansible lineinfile effectue diverses actions sur une seule ligne d’un fichier, telles que le remplacement d’une ligne, la mise à jour d’une ligne ou l’ajout d’une ligne particulière.
Dans ce tutoriel, vous allez apprendre ce qu’est le module Ansible lineinfile, comment il fonctionne et comment l’utiliser pour gérer des fichiers texte.
Prérequis
Ce billet sera un tutoriel étape par étape sur le module Ansible lineinfile. Si vous souhaitez suivre, assurez-vous d’avoir les éléments suivants en place :
- Un hôte contrôleur Ansible – Ce tutoriel utilisera Ansible v2.9.24 sur une machine Ubuntu 18.04.5 LTS.
- A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
- Apache doit déjà être installé sur l’ordinateur distant si vous souhaitez suivre exactement le tutoriel.
Modification d’un fichier texte avec le module lineinfile d’Ansible.
Commençons ce tutoriel en exécutant le module lineinfile d’Ansible à l’aide des commandes ad hoc. Les commandes ad hoc sont un moyen rapide de tester ou d’exécuter une seule commande sur un hôte distant.
Connectez-vous à votre contrôleur Ansible et exécutez la commande suivante. Cette commande utilise le module lineinfile (-m
) pour se connecter à la machine web et transmet un argument (-a
) qui est la commande à exécuter.
Dans cet exemple, le module lineinfile met à jour l’entrée localhost en associant l’adresse IP 127.0.0.1
à myapache
dans le fichier /etc/hosts. En associant le 127.0.0.1
à myapache
, vous pouvez accéder à la page de test apache localement sur HTTP://myapache:80
path
indique l’emplacement du fichier.regexp
trouve l’expression régulière, le cas échéant, dans le fichier et met à jour avec127.0.0.1 myapache
spécifié dans le paramètreline
.- -devenir permet d’exécuter la commande en tant qu’utilisateur privilégié.
- Le groupe
web
est le groupe d’inventaire qui est une collection de tous les serveurs. ansible.builtin.lineinfile
ou simplement lineinfile est le nom du module.
Après avoir exécuté la commande, vous devriez voir un message CHANGED qui confirme que la ligne a été mise à jour avec succès sur l’hôte distant.

Connectez-vous au nœud distant en utilisant un client SSH et vérifiez si le fichier /etc/hosts a été mis à jour avec la nouvelle valeur en utilisant la commande cat
.
Comme vous pouvez le voir ci-dessous, l’entrée localhost a été mise à jour avec succès avec 127.0.0.1 myapache
sur la machine distante.

Modification de plusieurs fichiers texte dans un playbook
Travailler avec une commande ad hoc unique pour gérer les lignes sur une machine distante peut être acceptable, mais cela va être difficile si vous avez des lignes dans plusieurs fichiers ou plusieurs lignes dans un fichier à gérer. Au lieu d’utiliser des commandes ad hoc, envisagez d’utiliser le module lineinfile d’Ansible dans le playbook en utilisant la commande ansible-playbook.
Maintenant, apprenons comment utiliser le module lineinfile d’Ansible dans le playbook et modifier quelques lignes.
En supposant que vous êtes déjà connecté à l’hôte du contrôleur Ansible:
1. Créez un répertoire appelé ansible_lineinfile_module_demo dans votre répertoire personnel. Ce répertoire contiendra le playbook que vous utiliserez pour invoquer le module lineinfile.
2. Créez un autre fichier appelé my_playbook.yml dans le répertoire ~/ansible_lineinfile_module_demo et collez-y le contenu suivant du playbook YAML. Ce playbook comporte plusieurs tâches qui utilisent le module Ansible lineinefile
pour gérer les lignes de différents fichiers de configuration pour Apache sur la machine distante.
Le playbook ci-dessous contient les tâches suivantes :
1. Vérifie si ADMIN
est présent dans le fichier /etc/sudoers; si ce n’est pas le cas, la tâche l’ajoute.
2. Assure que le port par défaut d’Apache écoute sur le port 8080 dans le fichier /etc/apache2/ports.conf; s’il trouve une autre ligne de port, le module lineinfile la met à jour avec le port 8080
. De même, dans le fichier /etc/apache2/apache2.conf, il met à jour MaxKeepAliveRequests
à 1000 et KeepAliveTimeout
à 100.
3. Ajoute la ligne avec le texte « Bonjour, ceci est ma page Apache » à la fin de la page index.html
sur le serveur distant sous le répertoire /var/www/html.
Les playbooks Ansible sont écrits en YAML. Pour en savoir plus sur YAML, cliquez ici
3. Maintenant, invoquez le playbook et exécutez les tâches en utilisant la commande ansible-playbook
pour ajouter ou mettre à jour toutes les lignes définies dans le playbook sur l’hôte distant.

Vous pouvez voir ci-dessous que la TÂCHE a un statut de modifié, ce qui signifie que l’hôte distant n’était pas dans l’état approprié et a été modifié pour exécuter la commande. Pour cette TÂCHE qui a un statut OK, cela montre qu’elles ne nécessitent aucun changement.
4. Ensuite, connectez-vous en SSH à l’hôte distant en utilisant votre client SSH préféré.
5. Enfin, vérifiez si toutes les lignes définies dans le my_playbook.yml sont mises à jour ou ajoutées sur l’hôte distant en utilisant la commande cat
.
La capture d’écran ci-dessous confirme que le admin
est déjà ajouté dans le fichier sudoers.

De plus, la capture d’écran ci-dessous confirme que Apache écoute sur le Port 8080
par défaut.

Enfin, vérifiez si MaxKeepAliveRequests
et KeepAliveTimeout
ont été mis à jour à 1000 et 100, respectivement.

MaxKeepAliveRequests
and KeepAliveTimeout
in the config file Conclusion
Le module Ansible lineinfile est un excellent moyen de modifier des fichiers texte sur des hôtes distants. Le module offre une excellente manière d’ajouter, supprimer et modifier des lignes dans des fichiers texte au sein de vos playbooks.
Quels autres cas d’utilisation pensez-vous bénéficier du module Ansible lineinfile?