Stat et Register, indispensables pour commencer avec ansible

Print Friendly, PDF & Email

Le cours ansible en ligne avance petit à petit car j’ai réalisé un peu plus de 115 vidéos tutoriels pour le moment ( et c’est pas fini 😉 ). Cette formation est disponible en totalité pour les membres vip pour le moment. Mais ces vidéos deviennent disponible publiquement au fur et à mesure des mois et des semaines. Devenir membre permet de soutenir la chaine xavki.

La dernière vidéo publiée s’adresse plutôt aux débutants avec 2 éléments utiles au quotidien dans vos développements ansible : le register et le module stat. J’ai trouvé cela intéressant de les associer car on le fait cela souvent dans la pratique.

Le module stat de ansible

Idéal pour commencer, ce module ansible permet de vérifier notamment l’existence ou non de fichiers ou de répertoires. Mais pas seulement, le module stat s’apparente aux données accessibles via la commande stat sous linux.

Ainsi une commande stat fournie les principales informations fournies par les inodes. On pourrait résumer cela aux metadatas de votre filesystem.

oki@doki ~/playground/centreserver $ ▶ stat deploy.sh
File: deploy.sh
Size: 3710 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 11274196 Links: 1
Access: (0755/-rwxr-xr-x) Uid: (1001/ oki) Gid: (1001)
Access: 2021-03-09 15:49:37.803546224 +0100
Modify: 2021-02-09 18:29:07.371956532 +0100
Change: 2021-02-09 18:29:07.371956532 +0100
Birth: -

Je vous propose donc de créer un fichier avec ansible et lancer dessus le mode stat en deuxième task.

  - name: création d'un fichier
    file:
      path: /tmp/xavki.txt
      state: touch
      owner: xavki

puis lançons le module stat :

  - name: check avec stat
    stat:
      path: /tmp/xavki.txt

Les paramètres de ce module ansible sont :

  • path : chemin du fichier ou répertoire
  • follow : suivre les liens symboliques
  • get_checksum : récupérer la checksum
  • checksum_algorithm : type de checksum (md5, etc)
  • get_mime: récupération du type de données
Découvrez  [Ansible] : commençons simplement : copie de fichiers, modification/écriture avec copy et lineinfile

Mais une fois que l’on a fait cela on ne dispose pas encore des données collectées par le module. Pour cela nous avons besoin d’utiliser le register.

Le register, un ami pour vos modules

Si on devait résumer le register, on pourrait dire qu’il s’agit d’un créateur de variables. Il permet de récupérer les outputs/sorties des modules. En effet de nombreux modules permettent de récupérer des informations lorsqu’ils sont exécutés. Par exemple, le module ec2 de aws va permettre de récupérer toutes les métadatas de l’instance créée.

Pour le module stat de ansible, il va récupérer les informations du fichier ou du répertoire en question.

Pour l’utiliser c’est très simple, il suffit de rajouter register et le nom de la variable créée qui contiendra le contenu de la sortie. Attention à l’indentation avec ansible, il s’agit de mettre le register au même niveau que le nom du module.

Ainsi nous pourrions avoir une succession de tâches suivantes :

  tasks:
  - name: création d'un fichier
    file:
      path: /tmp/xavki.txt
      state: touch
      owner: root
    when: xavki_file is defined
  - name: check avec stat
    stat:
      path: /tmp/xavki.txt
    register: __fichier_xavki
  - name: debug
    debug:
      var: __fichier_xavki

La première pour la création du fichier.

La seconde pour passer un stat sur le fichier xavki.txt avec le register (création de la variable __fichier_xavki).

Et enfin pour visualiser le contenu de la variable obtenue, nous utilisons le module debug.

Bonne pratique : j’ai pour habitude de préfixer ce type de variables par un double underscore. Cela me permet d’une part de les identifier plus rapidement et d’autres part d’utiliser plus rapidement l’autocomplétion (par exemple dans vscode).

Dans le cas de stat, vous pouvez ensuite parcourir le contenu de cette variable ansible. Ainsi pour utiliser la valeur de stat et de la clef “exists” voici comment faire :

Découvrez  [Ansible] : comment installer un client et un serveur ntp ?

__fichier_xavki.stat.exists

Maintenant nous sommes donc en mesure de vérifier l’existence d’un fichier ou d’un répertoire et de conditionner la tache suivante à cela.

  - name: création répertoire xavki
    file:
      path: /tmp/xavki
      state: directory
    when: __fichier_xavki.stat.exists and xavki_file is defined

Mais je vous invite à vérifier le contenu de l’output en totalité et vous verrez que nous disposons des mêmes éléments que si nous avions lancé la commande linux.

Retrouvez les tutoriels ansible ici et abonnez-vous si vous souhaitez ne pas manquer les prochains articles ou vidéos.