Ansible - les roles, les tags, les profils

Lorsque l’on commence à structurer ses playbooks Ansible, il est important de bien distinguer les rôles, les tags et les profils car les objectifs sont différents et souvent confondus.

TL;DR

Élément Rôle Exemple
role Charge le contenu du dossier roles/<nom>/ roles:
  - role: time
tag Filtre les tâches ou les plays à exécuter ansible-navigator run ... --tags setup_time_rhel9
profile Variable permettant d’adapter le comportement ansible-navigator run ... --extra-vars "profile=prod"
vars_files Charge un fichier YAML de variables vars_files:
  - roles/time/rhel9/defaults/main.yml

Résumé :

  • Le rôle indique quoi exécuter
  • Le tag permet de sélectionner ce que l’on veut lancer
  • Le profil adapte le comportement du playbook
  • Les vars_files permettent de charger des variables spécifiques

Exemple de sous repertoire :

roles/<nom>/
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── tasks
│   ├── main.yml
│   ├── task1.yml
│   └── task2.yml
└── templates
├── conf1.conf.j2
└── conf2.conf.j2

Les rôles

Un rôle détermine ce qui doit être exécuté. Il représente un ensemble de tâches, templates, handlers et variables dédiés à une fonction précise.

Exemple :

roles:
- role: time

Ansible va alors chercher automatiquement le rôle dans :

roles/time/

Puis utiliser :

roles/time/tasks/main.yml
roles/time/defaults/main.yml
roles/time/handlers/main.yml
roles/time/templates/

Les rôles ont tous une arboressence de type :

# tree roles/time/
roles/time/
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── tasks
│   ├── main.yml
│   ├── rhel9.yml
│   └── autre-task.yml
└── templates
└── rhel9-chrony.conf.j2

Les tags

Les tags ont pour seul objectif de filtrer l’exécution des playbooks. Ils ne correspondent à aucun dossier et ne chargent aucun fichier.

Exemple :

tags:
- setup_time_rhel9

Dans cet exemple, seules les tâches ou les plays portant le tag setup_time_rhel9 seront exécutés car ils déterminent ce qui doit être exécuté parmi ce qui est disponible :

# ansible-navigator run play-install-ccs-rhel9.yml --tags setup_time_rhel9

Les profils

Le profil est simplement une variable utilisée pour adapter le comportement du playbook. Il permet d’activer ou de désactiver certaines parties du playbook selon le contexte d’exécution.

Le profil détermine donc dans quel contexte le playbook doit fonctionner.

Exemple :

when: profile == "production"

La valeur est généralement fournie au lancement :

# ansible-navigator run play-install-ccs-rhel9.yml --extra-vars "profile=production"

Les vars_files

Les fichiers de variables peuvent être chargés explicitement.

Dans ce cas, Ansible lit directement ce fichier et met les variables à disposition du playbook. Cela permet de charger des paramètres spécifiques à un système, un environnement ou un profil.

vars_files:
- roles/time/rhel9/defaults/main.yml

Note:

Les profils ne sont pas déclarés dans Ansible lui-même. Ce sont simplement des variables dont la valeur est fournie lors de l’exécution du playbook, par exemple via --extra-vars, l’inventaire ou les paramètres d’un Job Template dans AAP.

Documentation

Ansible

🡅 Partager