Si vous devez exécuter des tâches Ansible en fonction de différentes conditions, alors vous êtes au bon endroit. Ansible when
et autres conditionnels vous permet d’évaluer des conditions, telles que basées sur le système d’exploitation, ou si une tâche dépend de la tâche précédente.
Dans ce tutoriel, vous apprendrez comment travailler avec Ansible when
et autres conditionnels afin d’exécuter des tâches sans perturber les choses.
Plongeons-y !
Prérequis
Ce tutoriel comprend des exemples pratiques. Si vous souhaitez suivre, assurez-vous d’avoir ce qui suit en place :
- Un hôte contrôleur Ansible – Ce tutoriel utilise Ansible v2.9.24 hébergé sur une machine Ubuntu 18.04.5 LTS.
- A remote computer to run commands.
- Vous aurez besoin d’un fichier d’inventaire configuré et un ou plusieurs hôtes déjà configurés pour exécuter la commande et les playbooks Ansible. Le tutoriel utilisera un groupe d’inventaire appelé web.
Travailler avec Ansible when
avec plusieurs tâches dans le playbook
Avoir plusieurs tâches dans un playbook peut être fastidieux si elles s’exécutent toutes sans conditions spécifiques. Commençons ce tutoriel en définissant les conditions Ansible when
dans le playbook Ansible avec plusieurs tâches.
1. Ouvrez un terminal sur l’hôte du contrôleur Ansible.
2. Exécutez les commandes ci-dessous pour créer un répertoire et lui donner le nom de votre choix dans votre répertoire personnel, puis accédez à ce répertoire.
Pour cet exemple, le répertoire est nommé ansible_when_condition_demo
. Ce répertoire contiendra le playbook que vous utiliserez pour invoquer la condition when dans la tâche Ansible.
3. Dans votre éditeur de code préféré, créez un fichier YAML dans le répertoire ~/ansible_when_condition_demo. Dans cet exemple, le fichier s’appelle my_playbook.yml. Copiez et collez le contenu du playbook YAML ci-dessous dans le fichier my_playbook.yml.
Dans les deux tâches ci-dessous (Task-1
et Task-2
), les conditions when
vérifient sur quel système d’exploitation chaque hôte distant se trouve. Le résultat est ensuite transmis à la variable de substitution ansible_os_family
sur chaque tâche.
Si la valeur des espaces réservés ansible_os_family
est égale à RedHat
ou à Debian
, alors Ansible exécute l’une des tâches pour installer Apache.
4. Exécutez maintenant la commande ansible-playbook
ci-dessous pour exécuter les tâches définies dans le playbook (my_playbook.yml) sur l’hôte distant, défini dans votre fichier d’inventaire existant.
Sur la capture d’écran ci-dessous, vous pouvez voir que:
- La première TÂCHE a renvoyé un statut OK, ce qui montre que la tâche ne nécessite aucun changement.
- La deuxième TÂCHE a renvoyé le statut skipping. Lorsque la condition n’est pas remplie, la tâche sera ignorée.
- La troisième TÂCHE a renvoyé un statut changed, ce qui indique que l’hôte distant n’était pas dans l’état approprié (c’est-à-dire, Apache n’est pas présent) et a été modifié pour installer Apache.

5. Ouvrez une session SSH sur l’hôte distant, qui était la cible du playbook Ansible, à l’aide de votre client SSH préféré pour vérifier si Apache est installé et en cours d’exécution.
6. Enfin, exécutez la commande service
ci-dessous pour vérifier si Apache est installé (status apache2
) sur l’hôte distant.
Comme vous pouvez le voir ci-dessous, vous avez installé le service Apache sur la machine distante.

Travailler avec when
et des boucles dans Ansible
Vous avez précédemment exécuté des tâches Ansible en fonction d’une condition Ansible when
pour un paramètre particulier tel que ansible_os_family
. Mais peut-être avez-vous besoin de vérifier une condition avec plusieurs paramètres définis dans une liste. Si c’est le cas, essayez d’ajouter une boucle loop
dans une tâche.
Ouvrez le fichier my_playbook.yml que vous avez précédemment créé (étape trois sous « Travailler avec Ansible when
avec plusieurs tâches dans le playbook »). Remplacez le contenu du fichier my_playbook.yml par le code ci-dessous.
La tâche dans le code ci-dessous (Tâche-1
) exécute une boucle
où la condition when
vérifie si la valeur de l’élément est supérieure à cinq et renvoie le résultat.
Exécutez maintenant la commande ci-dessous pour exécuter le playbook comme vous l’avez fait précédemment.
Ci-dessous, vous pouvez voir l’état skip renvoyé lorsque la condition est fausse et l’état changed lorsque la condition est vraie.

when
condition for multiple parameters Travailler avec Ansible when
et les facts
Ansible
Vous souhaitez peut-être ajouter plusieurs conditions pour exécuter une tâche. Si tel est le cas, apprenez à utiliser les facts Ansible dans la condition when
. Les facts Ansible vous permettent d’ajouter une déclaration conditionnelle pour exécuter des tâches basées sur des faits collectés, tels que votre système d’exploitation, les adresses IP, les systèmes de fichiers attachés, et plus encore.
Remplacez le contenu du fichier my_playbook.yml par le code ci-dessous.
Dans le code ci-dessous, les deux tâches (Task-1
et Task-2
) ne s’exécutent que (arrêt du système) lorsque l’une des conditions suivantes est vraie:
- Les valeurs
distribution
etdistribution_major_version
renvoient toutes deux une valeur vraie. - La valeur
os_family
est égale àCentOS
.
Exécutez le playbook comme vous l’avez fait précédemment avec la commande ci-dessous.
Remarquez ci-dessous que les deux tâches affichent l’état skip puisque vous êtes sur Ubuntu. La tâche s’exécute uniquement si vous êtes sur CentOS.

Travailler avec Ansible when
basé sur les valeurs enregistrées
Parfois, vous souhaitez exécuter ou sauter une tâche en fonction du résultat d’une tâche antérieure dans un playbook. Par exemple, vous pourriez vouloir configurer un service après une mise à niveau de tâche précédente. Dans ce cas, utilisez une variable enregistrée. Une variable enregistrée vous permet d’enregistrer le résultat de la tâche précédente en tant que variable et de l’utiliser pour la tâche suivante en tant qu’entrée.
1. Créez un répertoire vide nommé /home/ubuntu/hello.
2. Remplacez le contenu du fichier my_playbook.yml par le code ci-dessous, qui effectue les opérations suivantes :
La première tâche (Tâche-1
) répertorie le contenu (fichiers et sous-répertoires) du répertoire /etc/hosts
en mémoire et enregistre ce résultat dans la variable contents1
via la commande register
.
La deuxième tâche (Tâche-2
) répertorie le contenu (actuellement vide) du répertoire /home/ubuntu/hello en mémoire et enregistre cette liste dans la variable contents2
.
La troisième tâche (Tâche-3
) vérifie et affiche un message « Le répertoire est vide » si le résultat enregistré pour la variable contents1
ou contents2
est vide.
La propriété
stdout
de la variablecontents1
etcontents2
est la sortie shell enregistrée à partir du résultat de l’exécution des commandes de la tâche.
3. Enfin, exécutez le playbook avec la commande ansible-playbook
ci-dessous.
Comme indiqué ci-dessous, étant donné que le résultat enregistré pour la variable contents2
est vide, la troisième tâche renvoie le message Le répertoire est vide.

Ansible when
based on registered values Travailler avec le when
Ansible dans les rôles Ansible
Dans cet exemple final, vous apprendrez comment fonctionne le when
Ansible au sein des rôles Ansible. Les rôles Ansible
vous permettent de réutiliser des configurations standard et de déployer plus rapidement. Lisez la suite pour découvrir comment une tâche invoque les rôles Ansible
uniquement si la condition when
Ansible est vraie.
1. Exécutez les commandes ci-dessous pour créer un répertoire nommé ~/ansible_role_when_demo dans votre répertoire personnel et changez vers ce dossier en tant que répertoire de travail. Le répertoire ~/ansible_role_when_demo contiendra les fichiers de démonstration de cet exemple.
2. Ensuite, exécutez les commandes ci-dessous pour créer un répertoire ~/ansible_role_when_demo/roles et ~/ansible_role_when_demo/roles/java/tasks.
Voici ce que contiendra chaque répertoire :
- Le répertoire ~/ansible_role_when_demo/roles contiendra le rôle que vous devez déployer.
Par défaut, Ansible recherche les rôles dans deux emplacements : dans un répertoire appelé roles/ situé dans le répertoire où réside le playbook, ou dans /etc/ansible/roles. Si vous souhaitez stocker les rôles dans des emplacements différents, déclarez les chemins en utilisant le paramètre
- role:
dans le playbook.
- Le dossier ~/ansible_role_when_demo/roles/java/tasks contiendra un fichier main.yml dont vous aurez besoin pour déployer un rôle.
Maintenant, créez un fichier nommé main.yml dans le répertoire ~/ansible_role_when_demo/roles/java/tasks, puis copiez et collez le code du playbook ci-dessous dans le fichier main.yml.
Le playbook ci-dessous installe Java sur le nœud distant sur lequel il est exécuté avec le module apt.
4. Créez un autre fichier YAML avec un nom de votre choix, et copiez/collez le code ci-dessous. Pour cet exemple, le fichier est nommé ~/ansible_role_when_demo/java-setup.yml.
Le code ci-dessous déploie le rôle Ansible (java
) sur l’utilisateur distant (ubuntu
) qui a un accès administratif uniquement lorsque l’utilisateur distant est sur un OS Debian.
5. Exécutez la commande tree
pour vérifier que tous les dossiers et fichiers requis existent dans le répertoire ~/ansible_role_when_demo.

6. Enfin, exécutez le playbook avec la commande ansible-playbook
ci-dessous. ansible-playbook java-setup.yml
Ci-dessous, la tâche a renvoyé un statut changed, indiquant que Java a été installé avec succès car le nœud distant utilise un système d’exploitation Debian. Exécution du playbook Ansible en utilisant
Ansible when
avec les rôles Ansible

Ansible when
with Ansible roles Conclusion
Dans ce tutoriel, vous avez appris différentes façons d’utiliser when
avec Ansible et d’autres conditionnels. Vous avez également appris comment appliquer des conditions when
avec des tâches de base en tirant parti des facts
d’Ansible et en déployant des roles
Ansible.
Maintenant, comment exploiter ces nouvelles connaissances? Peut-être économiser du temps en configurant plusieurs serveurs avec des modèles Ansible tout en appliquant des conditions when
Ansible?