GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Ansible :vérifier si un fichier existe

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 .


Ubuntu
  1. Gérer les secrets dans vos playbooks Ansible

  2. Comment vérifier la syntaxe sudoers

  3. Comment installer Ansible sur Linux Mint 20

  4. Commande pour afficher un message arbitraire si un fichier particulier existe ?

  5. Comment puis-je vérifier qu'un fichier existe et exécuter une commande sinon?

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment vérifier si un fichier ou un répertoire existe dans Bash

Fichiers d'inventaire et de configuration Ansible

Comment créer et exécuter un fichier Playbook Ansible

Une brève introduction à Ansible Vault

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell