Présentation
Ansible est un outil d'infrastructure en tant que code qui permet à un seul nœud de contrôle de surveiller et de gérer un grand nombre d'hôtes distants (serveurs).
Ansible utilise des playbooks pour définir une variété de tâches à effectuer par les hôtes distants, y compris vérifier si des fichiers et des dossiers existent.
Ce tutoriel explique comment utiliser le stat
module dans Ansible pour vérifier si des fichiers et des dossiers existent sur des hôtes distants.
Prérequis
- Accès à la ligne de commande/fenêtre du terminal
- Ansible installé et configuré (voir nos guides sur l'installation d'Ansible sur Windows et l'installation d'Ansible sur Ubuntu)
Vérifier si un fichier existe dans Ansible
Le moyen le plus simple de vérifier si un fichier existe en utilisant Ansible est avec le stat
module.
Le but de la stat
consiste à récupérer des informations sur les fichiers et les dossiers et à les enregistrer dans un registre. Le module stat utilise la syntaxe suivante :
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
...
Où :
stat:
Déclare que nous utilisons le module stat.path:
Déclare le chemin d'accès au fichier ou au dossier que nous voulons vérifier.register:
Fournit le nom du registre dans lequel le module stat enregistre les détails des fichiers et des dossiers.
L'une des valeurs enregistrées dans le registre est exists
. Combiner cette valeur avec le debug
permet d'afficher un message précisant si un fichier ou un dossier existe :
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists
1. Dans l'exemple de playbook, la première tâche (Vérifier si un fichier existe ) utilise la stat
module pour récupérer des faits sur le test.txt
fichier situé dans /home/example_folder sur l'hôte distant. Il enregistre ces faits dans un registre appelé file_data
.
2. La deuxième tâche (Signaler si un fichier existe ) utilise le debug
module pour afficher un message. Il vérifie les file_data
enregistrer et utilise le exists
valeur comme condition d'affichage d'un message. Si le exists
la valeur est true , le module affiche le message 'Le fichier ou le répertoire existe' .
3. La troisième tâche (Signaler un fichier manquant ) fait la même chose, sauf qu'il affiche le message "Le fichier ou le répertoire n'existe pas" si le exists
la valeur est false .
L'exécution du playbook fournit le résultat suivant :
La sortie nous indique que le fichier n'existe pas, en fait.
Si vous souhaitez également vérifier que le fichier en question est un fichier normal et non un dossier, ajoutez le isreg
valeur au debug
état du module :
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isreg
Vérifier si un répertoire existe dans Ansible
Utiliser Ansible pour vérifier si un répertoire existe revient exactement à vérifier si un fichier existe. La seule différence est que vous utilisez le isdir
valeur pour confirmer le chemin vers le répertoire spécifié :
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isdir
Exécuter des tâches Ansible en fonction de l'existence de fichiers et de dossiers
Il peut arriver que vous souhaitiez exécuter ou ignorer des tâches dans votre playbook en fonction de l'existence de certains fichiers ou dossiers.
Par exemple, si vous avez un playbook conçu pour créer un fichier sur chaque hôte distant, vous souhaitez ignorer les hôtes où le fichier existe déjà pour éviter de créer des doublons.
Pour cela, utilisez les détails du fichier récupérés par le stat
module avec le when
argument pour créer les conditions d'exécution des tâches :
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
- name: Task name 2
file:
path: [path to the file you want to create]
state: touch
when: not register_name.stat.exists
...
1. Dans le playbook ci-dessus, la première tâche (Vérifier si un fichier existe ) utilise la stat
module pour récupérer les détails du test.txt
fichier situé dans example_folder sur l'hôte distant.
2. La deuxième tâche (Créer un fichier s'il n'existe pas déjà ) commence par vérifier le exists
valeur dans le registre. Si la valeur est true , la tâche est ignorée et le playbook se termine. Si la valeur est false , la tâche est exécutée et crée un nouveau fichier appelé test.txt
.