Les erreurs inattendues lors de l’exécution des playbooks Ansible peuvent perturber des processus critiques.
Ces interruptions peuvent entraîner des délais coûteux et des frustrations pour les équipes techniques.
Découvrez comment gérer efficacement les erreurs avec Ansible grâce à des techniques comme ignore_errors et force_handlers, pour une exécution fluide.
Devenez un expert d'Ansible et simplifiez vos tâches d'administration.
Gestion des erreurs Ansible
Gérer les erreurs en Ansible consiste à mettre en place des mécanismes pour anticiper, détecter et traiter les éventuelles anomalies ou problèmes qui peuvent survenir lors de l’exécution des playbooks ou des tâches. Cela inclut la gestion des erreurs de syntaxe, les échecs d’exécution des modules, les erreurs de connectivité réseau, ou toute autre situation imprévue.
Types d'erreurs: ignore_errors
Il y a trois types de gestions des erreurs en ansible :
Ignorer les erreurs : ignore_errors : Lorsque nous utilisons ignore_errors dans une tâche Ansible, cela signifie que Ansible continuera l’exécution du playbook même si cette tâche échoue. Cela est utile dans certains cas où l’échec de la tâche n’est pas critique pour la suite du playbook ou lorsque nous prévoyons de gérer l’erreur d’une autre manière. Voici un exemple d’utilisation :
- name: Exemple de tâche avec ignore_errors
command: /chemin/vers/une_commande
ignore_errors: yes
Forcer l’exécution des handlers : force_handlers : Les handlers dans Ansible sont des actions déclenchées en réponse à des événements spécifiques comme le changement d’état de certains services ou la modification de fichiers de configuration. Par défaut, les handlers ne sont exécutés que si une tâche dans le même play a provoqué un changement (state changed). En utilisant force_handlers: yes, nous pouvons forcer l’exécution des handlers indépendamment de l’état de changement, ce qui peut être nécessaire dans certains cas pour garantir que des actions conséquentes sont toujours exécutées.
Définir les états failed/changed : failed_when : Avec failed_when , nous pouvons spécifier des conditions sous lesquelles une tâche doit être considérée comme ayant échoué, même si Ansible ne le détecte pas automatiquement. Par exemple, nous pouvons définir des conditions basées sur le retour d’une commande ou sur des vérifications de fichiers pour déterminer si une tâche a réussi ou échoué. Voici un exemple :
- name: Exemple de tâche avec failed_when
command: /chemin/vers/une_commande
failed_when: "'Error' in result.stderr or result.rc != 0"
changed_when : changed_when est utilisé pour indiquer à Ansible quand considérer qu’une tâche a entraîné un changement d’état. Parfois, une commande peut retourner une valeur non nulle même si aucune modification réelle n’a été apportée. En spécifiant une condition avec changed_when, nous pouvons contrôler quand Ansible doit marquer la tâche comme ayant provoqué un changement. Voici un exemple :
- name: Exemple de tâche avec changed_when
command: /chemin/vers/une_commande
changed_when: result.stdout != "Expected output"
Voici un visuel pour bien résumant ces gestions :
Pratiquons cette notion avec un exemple de playbook suivant :
---
- hosts: servers
tasks:
- name: Ignore failed commands
command: /bin/false
ignore_errors: yes
- name: Restart apache
service:
name: apache2
state: restarted
ignore_errors: true
Il y a deux taches dans ce playbook :
La première tâche ( Ignore failed commands ) utilise ignore_errors: yes pour ignorer l’échec de la commande /bin/false . Cela peut être utile lors du test de tâches ou de la gestion d’erreurs non critiques.
La deuxième tâche (Restart apache) montre comment ignore_errors est utilisé avec le module service pour redémarrer Apache. Toutefois, dans cet exemple, ignore_errors n’est pas nécessaire ici car le module service ne renverrait généralement pas d’erreurs qui nécessiteraient d’être ignorées.
En exécutant ce playbook, nous aurons des résultats comme ceci :
Comme nous pouvons remarquer sur le visuel, l’erreur était détectée et ignorée après pour exécuter la tâche
Rôle des blocs Ansible
Les blocs en Ansible sont des regroupements logiques de tâches qui permettent de :
- Gérer les erreurs de manière similaire à la gestion des exceptions dans de nombreux langages de programmation.
- Appliquer des directives héritées au niveau du bloc pour un contrôle cohérent et ciblé de l’exécution des tâches.
Voici un exemple de blocs :
tasks:
- name: Install, configure, and start Apache
block:
- name: Install httpd and memcached
ansible.builtin.yum:
name:
- httpd
- memcached
state: present
- name: Apply the foo config template
ansible.builtin.template:
src: templates/src.j2
dest: /etc/foo.conf
when: ansible_facts['distribution'] == 'CentOS'
become: true
become_user: root
ignore_errors: yes
Ce bloc de tâches Ansible installe et configure Apache (httpd) et memcached, puis applique un modèle de configuration spécifique (foo.conf) sous certaines conditions et avec des privilèges élevés, tout en gérant les erreurs potentielles de manière à maintenir la robustesse du playbook.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment gérer les erreurs en Ansible?
Quand utiliser ignore_errors en Ansible?
Quel est le rôle des blocs en Ansible?
Comment utiliser force_handlers en Ansible?
Comment définir failed_when dans un playbook Ansible?
Conclusion
En maîtrisant ces techniques de gestion des erreurs en Ansible, vous renforcez la robustesse de vos playbooks. Quelle stratégie appliquez-vous pour gérer les erreurs dans vos projets Ansible?