Les rôles ansible
Les rôles permet de simplifier l'écriture de Playbooks ainsi que les rendre plus facile à lire.
Ansible les définies dans une structure.
Un rôle Ansible possède une structure de répertoires définie avec huit répertoires standards principaux. Vous devez inclure au moins un de ces répertoires dans chaque rôle.
Par exemple :
# playbooks
site.yml
webservers.yml
fooservers.yml
roles/
common/
tasks/
handlers/
library/
files/
templates/
vars/
defaults/
meta/
webservers/
tasks/
defaults/
meta/
La création de rôles
La structure des répertoires des rôles est essentielle pour créer un nouveau rôle, nous utiliserons la commande ansible-galaxy
pour créer le squelette de notre rôle automatiquement :
ansible-galaxy init [ROLE NAME]
Structure
test-role
├─── defaults
│ └──────── main.yml
├─── files
├─── handlers
│ └──────── main.yml
├─── meta
│ └──────── main.yml
├─── tasks
│ └──────── main.yml
├─── templates
├─── tests
│ ├──────── inventory
│ └──────── test.yml
└─── vars
│ └──────── main.yml
└─── README.md
Caractéristiques de l'arborescence d'un rôle :
tasks
: contient la liste principale des tâches à exécuter par le rôle.handlers
: contient les handlers ( tâches inactives qui ne sont déclenchées à la demande ), qui peuvent être utilisés par ce rôle ou même en dehors de ce rôle.defaults
: variables par défaut pour le rôle.vars
: d'autres variables pour le rôle.files
: contient des fichiers qui peuvent être déployés via ce rôle.templates
: contient des modèles (jinja2) qui peuvent être déployés via ce rôle.meta
: définit certaines métadonnées pour ce rôle.README
.md: inclut une description générale du fonctionnement de votre rôle.test
: contient notre playbook (on peut cependant déposer notre playbook à la racine du projet ou dans un dossier sous un nom différent).
Exemple d'un playbook :
---
# WEB SERVER
- hosts: web
become: true
vars_files: vars/main.yml
roles:
- web
# DATABASE SERVER
- hosts: db
become: true
vars_files: vars/main.yml
roles:
- database
Ansible Galaxy
Ansible galaxy est une plateforme Web où les utilisateurs peuvent partager leurs rôles Ansible.
Ne pas oublier de documenter le rôles dans le README
Meta donner d'un rôle :
galaxy_info:
role_name:
author:
description:
company:
license:
min_ansible_version:
platforms:
galaxy_tags:
dependencies: []
Les rôles nous permet d'avoir un playbook plus modulable et plus simple à lire.