Loading search data...

Ansible assert un module qui peut rendre bien des services

logo ansible

Lors de l’exécution d’un playbook Ansible il peut parfois être nécessaire de réaliser des contrôles de conformité avant d’exécuter d’autres actions. Par exemple, avant de lancer un upgrade des packages sur une machine, il faut vérifier qu’il y ait suffisamment de place sur la machine. C’est là qu’intervient le module assert. Trop souvent limité à la vérification de variables dans les rôles assert peut aussi être utilisé pour réaliser des contrôles plus poussés au démarrage des playbooks.

Utilisation du module assert

Inutile de lancer un playbook complet pour le voir échouer à cause d’un bête manque de place sur un filesystem non ?

Il est tout à fait possible de lancer des contrôles sur la machine sans utiliser le module command. Je vais prendre comme exemple un check de l’espace disque du filesystem root :

---
- name: Playbook de test
  hosts: all
  become: true
  gather_facts: true
  vars:
    max_rate_occupation_disk: 0.8
  tasks:
    - name: Check / usage
    ansible.builtin.assert:
        that:
        - item.size_available > item.size_total|float * (1 - max_rate_occupation_disk/100)
    when: item.mount == "/"
    with_items:
        - "{{ ansible_mounts }}"

Une boucle with_items couplée à une condition vwhen permet de limiter le champ de test au seul filesystem root. Ici j’utilise les facts ansible qui contient toutes sortes d’informations dont les filesystems. Bien sur, il ne faut pas avoir désactivé la collecte de ces facts au démarrage du playbook !

Une autre solution pour limiter la collecte des facts au strict minimum est le désactiver et faire appel ensuite appel au module setup en limitant la collecte avec le paramètre gather_subset :

---
- name: Playbook de test
  hosts: all
  become: true
  gather_facts: false
  tasks:
    - name: collect facts
        ansbile.builtin.setup:
            gather_subset: !all,!min
    - name: Check / usage
        ansible.builtin.assert:
            that:
            - item.size_available > item.size_total|float * (1 - my_disk_slash_space_max/100)
        when: item.mount == "/"
        with_items:
            - "{{ ansible_mounts }}"

Point important, pour éviter de recourir systématiquement au module commande, je vous conseille d’utiliser les custom_facts que je vous ai exposé dans un précédent billet. En effet, il est possible d’utiliser un langage plus évolué que du bash pour les créer. On peut tout imaginer !


Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur   Ko-Fi  . Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne nous coûte plus cher, via   ce lien  . Vous pouvez aussi partager le lien sur twitter ou linkedin via les boutons ci-dessous. Je vous remercie de votre soutien


Mots clés :

devops ansible tutorials infra as code formation ansible

Autres Articles


Commentaires: