Les rôles (roles en anglais) représentent un ensemble d’actions à déployer sur les serveurs.
Les roles ont une importance capitale dans la factorisation des actions et dans leur réutilisation.
Principe du role
Le but du role est de condenser un ensemble d’actions (ou tasks) au sein d’une même entité. La factorisation de ces tasks permet de simplifier leur invocation, rendre réutilisation et variabilisable. Les roles sont le piliers d’Ansible au sein de la communauté, des contributeurs du monde entier s’efforcent de proposer des rôles stables et fiables afin de servir l’ensemble de sutilisateurs.
Arborescence de fichiers
Le role se traduit par un répertoire dans lequel se trouve l’ensemble des fichiers qui serviront au déploiement. Dans ces fichiers, on trouves des fichiers de tâches (tasks
), des fichiers bruts à copier (files
), des ficheirs variabilisés (templates
), des variables (defaults
et vars
), des actions déclenchées (handlers
). D’autres répertoires exsitent mais n’impactent pas l’utilisation du role et servent principalement au développement de ces roles.
ansible/ └── roles/ └── first-role/ ├── defaults/ │ └── main.yaml ├── vars/ │ └── main.yaml ├── tasks/ │ ├── main.yaml │ └── uninstall.yaml ├── files/ │ └── file-to-copy.sh ├── templates/ │ └── file-to-template.j2 └── handlers/ └── main.yaml
Formats des fichiers
Les fichiers présents dans les répertoires defaults
, vars
, tasks
, handlers
sont des fichiers au format yaml
et se terminent par l’extension .yaml
.
Les fichiers présents dans le répertoire templates
sont écrits au format Jinja2. Concrêtement, ce sont des fichiers classqieu (statiques, configuration, etc…) qui comportent du templating Jinja2 interprété au moment de l’envoi sur la serveur.
Les fichiers présenrs dans le répertoire files
n’ont aucun contrainte. Il sont envoyés sur la machine cible sans être interprété.
Exécution du role depuis un playbook
Le role s’exécute depuis un playbook en tant que role ou que task.
L’appel du role se fait apr le fichier tasks/main.yaml
.
Exécution du role en tant que role :
- hosts: all roles: - first-role
Exécution du role en tant que task :
- hosts: all tasks: - include_role: name: first-role
Hormis l’appel du role, rien ne diffère dans son interprétation. Ces 2 eeamples sont strictements identiques.
Exécution du role à partir d’un autre fichier
On peut appeler un role en ciblant un autre fichier de tasks, par exemple pour la désinstallation du composant représenté par le role en appelant le fichier tasks/uninstall.yaml
.
- hosts: all tasks: - include_role: name: first-role tasks_from: uninstall.yaml
Ce qui permet de conserver le contexte du role avec les defaults
, vars
, handlers
et s’appuyer dessus pour exécuter un autre fichier de tasks. Notamment pratique pour la désinstallation d’un composant dont le chemin d’installation est variabilisé.
Créer un premier role
Créer la structure du role :
mkdir -p roles/httpd/{tasks,defaults} touch roles/httpd/{tasks,defaults}/main.yaml
Créer les variables du role
httpd_package_name: httpd # OR apache2 for debian/ubuntu
Créer le contenu du role :
- name: Install httpd package apt: name: "{{ httpd_package_name }}" state: present
Créer le playbook :
- hosts: all roles: - httpd
Exécuter le role :
ansible-playbook -i inventories/servers install_httpd.yaml
Créer le contenu du role pour la désinstallation :
- name: apt: name: "{{ httpd_package_name }}" state: absent
Créer le playbook pour la désintallation :
- hosts: all tasks: - include_role: name: httpd tasks_from: uninstall.yaml
Exécuter le playbook de désinstallation :
ansible-playbook -i inventories/servers uninstall_httpd.yaml
Et voici un role simple et édifiant créer en quelques minutes.
La galaxy des roles
Il existe un endroit sur Terre où les roles ansible sont centralisés et notées par la communauté opensource : Ansible Galaxy.
On y trouve un florilègres de roles, plus ou moins maintenus, en libre service sur l’étagère. Dans l’idée, il est facile d’utiliser la Galaxy pour : chercher un role, le tester, le valider et l’utiliser pour les projets.
Pour utiliser un role de la galaxy, 2 solutions s’offrent à vous :
- Installer le role et utiliser sa notations complètes au moment de l’appeler dans le playbook :
geerlingguy.apache
- Télécharger le role directement dans votre projet dans votre répertoire
roles/
.
Bilbiographie
- Site officiel Ansible
- Documentation officielle Ansible (officiel)
- Utilisation des roles Ansible (officiel)
Les autres articles autour d’Ansible :