Playbooks complexes 1

Cet article a été initialement écrit sur le blog-libre aujourd’hui fermé, certains liens dans l’article peuvent donc être morts.


Bon accrochez bien vos slips parce que va falloir être sur le pont et suivre. On a vu dans l’article précédent les playbooks simples. On va complexifier un peu (beaucoup).

Vous allez très vite avoir besoin de faire du Globbing. Quoi ce que c’est que ça ? Le globbing c’est matcher des résultats avec des wildcards. Par exemple si je me met dans /etc/ansible/ et que je fais un rm *.yml, c’est du globbing, je matche tous les fichiers se terminant par .yml et je les supprime.

Utilisation du playbook : ansible-playbook vmwaretools.yml -e host=SRV-WEB
Utilité du playbook : Installer les VMware Tools sur un ESXi (c’est propriétaire berk mais ça sert à un paquet de gens pour faire des tests et en entreprise)
Playbook vmwaretools.yml

---
- name: Install VMware Tools
  hosts: "{{ host }}"
  tasks:
    - name: Update APT package cache and upgrade
      apt: upgrade=yes update_cache=yes cache_valid_time=7200

    - name: Install packages
      apt: name={{ item }} state=present
      with_items:
        - autoconf
        - automake
        - binutils
        - make
        - psmisc
        - cpp

    - name: Install linux-headers
      shell: aptitude -y install linux-headers-$(uname -r)

    - name: Untar the archive
      unarchive: src={{ item }} dest=/tmp
      with_fileglob:
        - files/VMwareTools*.tar.gz

    - name: Launch VMwareTools installation
      shell: "{{ item }}"
      with_items:
        - /tmp/vmware-tools-distrib/vmware-install.pl --default
        - rm -r /tmp/*

Explications : On voit le nouveau module unarchive qui permet de gérer la décompression des archives .tar.gz et zip. On voit surtout le Globbing juste en dessous. L’expression files/VMwareTools*.tar.gz permet de matcher le fichier qui s’appelle VMwareTools-9.0.10-1481436.tar.gz dans mon dossier files. Quel est l’intérêt ? Ce fichier change souvent de nom car on supprime l’ancienne version de ce fichier puis on met une nouvelle version régulièrement. Avec le Globbing, on ne touche pas au playbook, inutile de l’ouvrir ou de le modifier. Dans cet exemple, l’usage que je fais du globbing est limité mais imaginez que vous souhaitez supprimer tous les fichiers *.log ou *.jpeg d’un dossier, vous avez maintenant ce qu’il vous faut.

Remarquez également la tâche Launch VMware Tools installation, vous avez deux actions à effectuer, vous pouvez les considérer comme une liste si ça concerne le même module. Vous évitez donc d’avoir à écrire deux tâches dans votre playbook. Vous avez une seule tâche mais avec une liste d’actions à accomplir et qui concerne le même module.

Utilisation du playbook : ansible-playbook backup_cat.yml -e ‘host=SRV-TEST file=/etc/hostname’
Utilité du playbook : Sauvegarder puis afficher un fichier
Playbook backup_cat.yml

---
- name: Backup the file and open
  hosts: "{{ host }}"
  tasks:
    - name: backup the file
      shell: cp -p {{ file }} {{ file }}_{{ ansible_date_time.date }}.bak

    - name: open the file
      shell: /bin/cat {{ file }}
      register: cat
    - debug: var=cat.stdout_lines

Explications : On utilise deux variables sur notre ligne de commande host et file (attention j’utilise le module shell pas le module copy). Cependant, on utilise également d’autres variables dans le playbook qui sont ansible_date_time.date et cat. Comme on l’a vu dans l’article suivant, on peut afficher les variables d’un poste en lançant ansible SRV-TEST -m setup. Ces variables ne sont pas là pour décorer mais pour vous servir dans vos playbooks, il est obligatoire que vous lanciez cette commande une fois pour vous rendre compte des variables (et donc possibilités) que vous avez à votre disposition. Ici on utilise la variable ansible_date_time et dans cette variable uniquement la variable date ce qui se traduit par ansible_date_time (nom de la variable) point date. Revenons à notre exemple, la commande cp -p {{ file }} {{ file }}_{{ ansible_date_time.date }}.bak va donc donner cp -p /etc/hostname /etc/hostname_2014.10.14.bak.

Passons à register, cela sert ici à enregistrer la sortie de /bin/cat /etc/hostname. Debug nous sert ici à afficher la sortie de cat. On a var=cat.stdout_lines constitué de la variable cat point stdout_lines (pour ceux qui ne savent pas ce que ça veut dire c’est la sortie standard, pour rappel les flux standards sont composés de l’entrée standard stdin, la sortie standard stdout et l’erreur standard stderr).

Ce playbook peut vous sembler inutile. Je sauvegarde le fichier que je souhaite ouvrir puis je l’affiche. Je me sers de ce playbook lors de la première configuration du poste. Je le lance sur certains fichiers de configuration qui ne nécessitent normalement aucune modification (/etc/hostname et /etc/resolv.conf sont des bons exemples). Ainsi j’ai une sauvegarde de ces fichiers forts importants pour le système au cas où il y aurait une modification malheureuse dessus dans le futur mais en même temps je contrôle qu’ils sont corrects.

Ça sera tout pour aujourd’hui la suite demain avec les templates.

Les commentaires sont fermés.