Parfois, vous souhaiterez peut-être exécuter des tâches spécifiques au lieu d'exécuter un fichier playbook entier. Cela permet de réduire le temps d'exécution total du playbook, en particulier lorsqu'il s'agit d'un fichier playbook volumineux.
Alors, que sont les balises ?
Les balises dans les playbooks sont des éléments de métadonnées qui sont attachés aux tâches dans un fichier playbook. Ils sont référencés lors de l'exécution de playbooks et vous permettent de cibler sélectivement certaines tâches au moment de l'exécution. Fondamentalement, l'instruction Ansible d'exécuter (ou de ne pas exécuter) des tâches spécifiques dans le fichier playbook.
Habituellement, les tâches ignorées ont été exécutées et il n'est donc pas nécessaire de les exécuter à nouveau. De cette façon, les balises évitent les répétitions et optimisent le temps d'exécution du playbook. Ils sont pratiques lorsque vous souhaitez exécuter certaines tâches à la demande.
Dans ce guide, nous allons nous plonger dans les balises Ansible et montrer comment vous pouvez attacher des balises aux tâches pour déterminer l'exécution du playbook.
Exécuter une tâche spécifique dans un playbook
Prenons un exemple de fichier playbook qui exécute trois tâches comme indiqué. Les balises sont spécifiées à l'aide de l'étiquette de balises à la fin de chaque tâche.
--- - name: Ansible Tags example hosts: localhost gather_facts: False tasks: - name: Hello World tag example debug: msg: "Hello World!" tags: - hello - name: Welcome to Ansible Tags tag example debug: msg: "How are you?" tags: - welcome - name: Enjoy tag example debug: msg: "Enjoy!" tags: - enjoy
Dans ce playbook, nous avons trois balises :bonjour, bienvenue et profitez-en.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --list-tags
Comme mentionné précédemment, vous pouvez utiliser des balises pour contrôler l'exécution des playbooks Ansible. Pour spécifier la tâche à exécuter, utilisez l'indicateur -t ou –tags.
Dans la commande ci-dessous, nous demandons à Ansible d'exécuter uniquement la première tâche qui a été marquée comme bonjour.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --tags hello
Ignorer des balises spécifiques dans un Playbook
Vous pouvez également demander à Ansible d'ignorer des balises spécifiques à l'aide de l'indicateur –skip-tags. Ce faisant, Ansible exécutera le reste des tâches dans le fichier Playbook à l'exception de la tâche fournie.
Dans cet exemple, Ansible ignore la dernière tâche marquée enjoy et exécute le reste des tâches définies dans le playbook.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --skip-tags enjoy
Assurez-vous qu'une tâche s'exécute toujours (ou jamais)
Même lorsque vous utilisez des balises pour déterminer les tâches à exécuter dans un fichier playbook, vous constatez parfois qu'il existe des tâches que vous devez exécuter. Prenons, par exemple, un playbook qui installe Apache sur le serveur Web distant.
Le playbook a 3 tâches. Il met d'abord à jour les listes de packages sur l'hôte distant, installe Apache et le redémarre. Cependant, avant d'installer Apache, il est nécessaire de mettre à jour les listes de packages ou d'actualiser les référentiels.
Étant donné que l'actualisation des référentiels est une condition préalable, nous baliserons cette tâche avec la balise always.
--- - name: install Apache webserver hosts: webserver tasks: - name: Update and upgrade apt packages apt: update_cache: yes tags: - always - name: install Apache on Ubuntu apt: name: apache2 state: latest tags: - install_apache - name: Restart Apache Webserver service: name: apache2 state: restarted tags: - restart_apache
Sans aucune balise, le playbook s'exécute comme prévu.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml
Si nous spécifions d'exécuter une tâche spécifique autre que celle qui est obligatoire (qui dans ce cas est la première tâche), Ansible exécutera également la tâche qui porte la balise "toujours".
Dans cet exemple, nous avons demandé à Ansible de redémarrer Apache qui porte la balise "restart_apache". Cependant, la tâche "mettre à jour le référentiel apt" s'exécute toujours car elle a la balise "toujours".
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml --tags restart_apache
Dans le même ordre d'idées, vous pouvez dire à Ansible de ne jamais exécuter une tâche, et pour cela, nous utilisons la balise "jamais". C'est l'exact opposé de la balise "toujours".
Revenons à notre livre de jeu. Supposons que vous ne souhaitiez pas redémarrer Apache après l'installation. Pour ce faire, passez simplement la balise Never comme indiqué.
- name: Restart Apache Webserver service: name: apache2 state: restarted tags: - restart_apache - never
Cela peut également être balisé comme suit en utilisant les doubles crochets :
tags: [ restart_apache, never ]
Lorsque le playbook est exécuté sans aucune balise, la tâche sera omise.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml
À partir de la sortie, vous pouvez voir que la tâche de redémarrage d'Apache a été ignorée.
REMARQUE :
Une tâche marquée "jamais" s'exécutera quand même lorsqu'elle sera explicitement appelée dans la commande ansible-playbook. Par exemple, la tâche qui redémarre Apache sera toujours exécutée puisqu'elle a été explicitement définie dans la commande.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml --tags restart_apache
Conclusion
Les balises Ansible sont pratiques et offrent la flexibilité nécessaire à l'exécution de playbooks Ansible. Vous pouvez exécuter ou ignorer l'exécution de tâches spécifiques dans un playbook. Cela offre un meilleur contrôle de vos playbooks pendant l'exécution du playbook.
Lire aussi :Comment utiliser Ansible Vault pour sécuriser les données sensibles