Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Rôle Ansible : ses dossiers et ses variables

Après cette leçon: Je peux ranger une tâche dans un rôle et dire quelle variable l’emporte quand un nom est défini à plusieurs endroits.

Leçon de 55 min10 commandesLab de rôles Ansible : un rôle, des handlers et Vault dans une VM Ubuntu

Un rôle pour deux restaurants universitaires

Un rôle Ansible est un playbook découpé en dossiers fixes, pour être réutilisé et testé seul. Quand une variable est définie à plusieurs endroits, une règle de priorité décide laquelle l’emporte.

Un service informatique veut le même rôle pour le restaurant nord et le restaurant sud, avec des horaires différents. Il faut savoir où mettre chaque valeur pour que la bonne gagne.

À la fin de cette leçon

Remarque

Je peux ranger une tâche dans un rôle et dire quelle variable l’emporte quand un nom est défini à plusieurs endroits.

Mots-clés

MotCe que ça veut direExemple
Rôleun playbook rangé dans des dossiers fixes, réutilisableroles/cantine
Playbookun fichier qui dit quelles tâches jouer sur quels hôtes
defaultsles valeurs du rôle que tout le monde peut changerdefaults/main.yml
varsles valeurs du rôle que le jeu ne change pas facilementvars/main.yml
Prioritéla règle qui dit quelle valeur gagne pour un même nom
Variable supplémentaireune valeur donnée sur la ligne de commande-e service=emporter

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un rôle range un playbook en dossiers fixes

Un long playbook devient vite illisible. Un rôle le découpe : les tâches dans un dossier, les valeurs dans un autre, les fichiers à copier dans un troisième. Chaque dossier a un nom imposé, donc n’importe qui retrouve tout.

L’outil ansible-galaxy fabrique ce squelette sans réseau. Dans ce labo, Ansible gère la machine elle-même, avec une connexion locale.

Créer le dossier du projet

Commande
mkdir -p ~/atelier-ansible

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Aller dans ce dossier

Commande
cd ~/atelier-ansible

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Fabriquer le squelette d’un rôle

Commande
ansible-galaxy role init --init-path roles cantine

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lister ses dossiers

Commande
find roles/cantine -type d | sort

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : ce que contient chaque dossier

DossierCe qu’il contient
tasksles tâches du rôle, dans main.yml
defaultsles valeurs faciles à changer
varsles valeurs plus fortes, que le jeu ne remplace pas
templates et filesles fichiers à fabriquer ou à copier
handlersles tâches qui attendent qu’on les appelle
metaqui a écrit le rôle, et de quoi il dépend

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Pour un même nom, la plus forte gagne

Une variable peut être définie dans defaults, dans le jeu, dans vars du rôle, ou sur la ligne de commande avec -e. Ansible garde une seule valeur par nom.

Du plus faible au plus fort : defaults du rôle, variables du jeu, vars du rôle, puis -e. D’autres niveaux existent. Cette leçon étudie ces quatre-là.

Quatre endroits, un même nom défini plusieurs fois

Code: bash
# roles/cantine/defaults/main.yml : le plus faible
tarif: 4
lieu: Resto U
ouverture: 11h30
service: self

# roles/cantine/vars/main.yml : plus fort que le jeu
ouverture: 11h45

# jouer.yml : le jeu, qui appelle le rôle
- hosts: localhost
  vars:
    lieu: Resto Sud
    ouverture: 12h
  roles:
    - cantine

Écrire les defaults

Commande
printf 'tarif: 4\nlieu: Resto U\nouverture: 11h30\nservice: self\n' > roles/cantine/defaults/main.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire les vars

Commande
printf 'ouverture: 11h45\n' > roles/cantine/vars/main.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire la tâche du rôle

Commande
printf -- '- name: Annoncer la cantine\n  ansible.builtin.debug:\n    msg: "{{ lieu }}, repas à {{ tarif }} euros, ouverture {{ ouverture }}, service {{ service }}"\n' > roles/cantine/tasks/main.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le jeu qui appelle le rôle

Commande
printf -- '- hosts: localhost\n  gather_facts: false\n  vars:\n    lieu: Resto Sud\n    ouverture: 12h\n  roles:\n    - cantine\n' > jouer.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Jouer le rôle et lire le message

Commande
ansible-playbook -i localhost, -c local jouer.yml | grep msg

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : qui gagne pour chaque nom

NomDéfini dansValeur retenue
tarifdefaults seulement4
servicedefaults seulementself
lieudefaults et jeuResto Sud, celle du jeu
ouverturedefaults, jeu et vars11h45, celle de vars

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Donner deux valeurs avec -e

Commande
ansible-playbook -i localhost, -c local jouer.yml -e ouverture=10h -e service=emporter | grep msg

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Erreur fréquente

Attention

Beaucoup de gens rangent toutes les valeurs dans vars, « pour être sûrs ». Résultat : le jeu ne peut plus rien changer, et seul -e passe. Mettez dans defaults ce que l’utilisateur du rôle doit pouvoir régler. Gardez dans vars ce qui ne doit pas bouger.

Pour aller plus loin

Ajoutez une variable dessert dans defaults, puis utilisez-la dans le message de la tâche. Jouez le rôle avec -e dessert=fruit.

Retirez ensuite dessert de defaults et jouez à nouveau. Dites pourquoi Ansible s’arrête, et quel niveau de priorité règle le problème.

À propos de ce labo et de sa source: Lab de rôles Ansible : un rôle, des handlers et Vault dans une VM Ubuntu

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.