Blog Alphorm Logo de blog informatique spécialisé en technologie et solutions IT
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Comprendre les rôles Ansible et leur utilisation
Agrandisseur de policeAa
Blog AlphormBlog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Search
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Suivez-nous
© Alphorm 2024 - Tous droits réservés
DevOps

Comprendre les rôles Ansible et leur utilisation

L'Équipe Alphorm Par L'Équipe Alphorm 16 novembre 2024
Partager
Partager

La gestion des configurations d’infrastructure peut devenir complexe et difficile à maintenir.

Cela entraîne des erreurs fréquentes, une duplication des tâches et une perte de temps considérable.

Les rôles Ansible offrent une structure claire et réutilisable pour simplifier et améliorer l’efficacité de la gestion des configurations.

Table de matière
Qu'est-ce qu'un rôle Ansible ?Structure des rôles AnsibleStockage des rôles avec roles_pathUtilisation efficace des rôles AnsibleExécution pratique des rôles AnsibleFAQConclusion

Formation Ansible : Le Guide Complet du Débutant

Devenez un expert d'Ansible et simplifiez vos tâches d'administration.

Découvrir cette formation

Qu'est-ce qu'un rôle Ansible ?

Dans ce chapitre, nous allons apprendre ensemble les rôles. Ce sont des regroupements structurés de tâches qui forment des composants réutilisables. Ils permettent de regrouper et d’ordonner des actions, de gérer des templates pour les inventaires, et d’attribuer des variables de manière organisée.

Structure des rôles Ansible

Un rôle est la subdivision structurée des diverses sections d’un playbook. Chaque partie est organisée de manière spécifique à travers un ensemble de répertoires et de fichiers.

La structure des rôles en Ansible est généralement organisée comme suit :

Structure standard des rôles Ansible

tasks / : Contient les fichiers YAML décrivant les tâches à exécuter.

handlers / : Contient les gestionnaires d’événements (handlers) appelés par les tâches lorsqu’un changement est nécessaire.

library / : Optionnel. Contient les modules personnalisés utilisés par le rôle.

files / : Optionnel. Contient les fichiers statiques à copier sur les hôtes gérés.

templates / : Contient les fichiers de templates Jinja2 qui peuvent être utilisés pour générer des configurations sur les hôtes gérés.

vars / : Contient les variables spécifiques au rôle qui peuvent être utilisées dans les tâches et les templates.

defaults / : Contient les valeurs par défaut des variables utilisées dans le rôle, qui peuvent être surchargées par l’utilisateur.

meta / : Contient les informations métadonnées sur le rôle, telles que les dépendances avec d’autres rôles.

Cette structure permet de séparer clairement les différentes parties fonctionnelles d’un rôle Ansible, facilitant ainsi la réutilisation, la gestion et la maintenance des configurations d’infrastructure.

Stockage des rôles avec roles_path

Le stockage et la recherche des rôles en Ansible se font principalement à travers le paramétrage des chemins (roles_path). Voici comment cela fonctionne :

Recherche des rôles : Ansible recherche les rôles dans les répertoires spécifiés par roles_path. Par défaut, Ansible recherche dans le répertoire roles / à partir du répertoire où nous exécutons Ansible (./ roles /). Nous pouvons également spécifier d’autres répertoires où Ansible devrait rechercher les rôles en configurant roles_path dans le fichier de configuration Ansible (ansible.cfg).

Stockage des rôles : Nous pouvons stocker nos rôles dans les répertoires spécifiés par roles_path . Typiquement, les rôles sont organisés sous forme de sous-répertoires nommés par le nom du rôle (par exemple, roles/<nom_du_role>/). À l’intérieur de ces répertoires, nous retrouverons la structure standard des rôles d’Ansible (tasks, handlers, vars, etc.) pour chaque rôle.

Par exemple, si nous avons un rôle nommé common , nous pourrions l’organiser ainsi :

				
					
 roles/
common/
tasks/
handlers/
...

				
			

Lorsque nous spécifions roles_path dans notre configuration Ansible, cela indique à Ansible où chercher ces rôles lors de l’exécution des playbooks. Cela facilite la réutilisation et la gestion centralisée des rôles dans vos environnements Ansible.

Voici un visuel récapitulatif de la recherche et stockage des rôles :

Schéma de la gestion des rôles Ansible

Utilisation efficace des rôles Ansible

Utilisation classique et statique dans une pièce (playbook) : Avant l’introduction des directives import_role et include_role, les rôles étaient principalement utilisés de manière statique dans les playbooks. Voici un exemple de cette ancienne méthode :

				
					
 ---
- hosts: webservers
roles:
- common
- web

				
			

Dans cet exemple, les rôles common et web sont directement inclus dans le playbook. Cette méthode est simple et efficace pour les scénarios où les rôles sont toujours nécessaires et exécutés dans un ordre fixe.

Nouvelle Utilisation des Rôles : Avec l’introduction des directives import_role et include_role, Ansible offre désormais plus de flexibilité et de dynamisme dans la gestion des rôles. Ces directives permettent d’importer ou d’inclure des rôles de manière conditionnelle et dynamique.

  • Import Rôle :La directiveimport_roleest utilisée pour importer des rôles statiquement au moment du traitement du playbook. L’importation se fait avant l’exécution du playbook, ce qui signifie que les tâches du rôle sont chargées comme si elles faisaient partie du playbook d’origine.
				
					
 ---
- hosts: webservers
tasks:
- name: Import common role
import_role:
name: common
- name: Import web role
import_role:
name: web

				
			
  • Include Role :La directive include_role est utilisée pour inclure des rôles dynamiquement au moment de l’exécution. Cela permet de conditionner l’inclusion des rôles en fonction des variables ou des résultats des tâches précédentes.
				
					
 ---
- hosts: webservers
tasks:
- name: Include common role
include_role:
name: common
- name: Conditionally include web role
include_role:
name: web
when: webserver_needed

				
			

La nouvelle méthode utilisant import_role et include_role offre une meilleure modularité et la possibilité de conditionner l’exécution des rôles, ce qui permet de créer des playbooks plus complexes et adaptatifs.

Critère
Include rôle
Import rôle
Moment d’inclusion
Dynamique (au moment de l’exécution)
Statique (au moment de la lecture du playbook)
Capacité à utiliser des variables dynamiques
Oui
Non
Structure de code
Moins strict, car inclus dynamiquement
Plus strict, doit être connu à l’avance
Performances
Moins performant (inclusion au moment de l’exécution)
Plus performant (préparé au moment de la lecture)
Utilisation
Utilisé lorsque le rôle doit être conditionnel ou basé sur des variables dynamiques
Utilisé pour des rôles fixes et connus à l’avance

Exécution d’un rôle de façon multiple dans Ansible : Ansible permet d’exécuter un rôle plusieurs fois dans un même playbook grâce à la directive allow_duplicates. Cela peut être utile lorsque nous souhaitons appliquer le même rôle avec des configurations ou des contextes différents.

Un exmple :

				
					
 ---
- hosts: webservers
roles:
- foo
- foo
# roles/foo/meta/main.yml
---
allow_duplicates: true

				
			

Dans cet exemple, le rôle foo est appelé deux fois. Par défaut, Ansible ne permet pas l’exécution multiple d’un même rôle dans un même playbook pour éviter les redondances non voulues. Pour contourner cette restriction, nous devons utiliser la directive allow_duplicates dans la méta-données du rôle.

L’objectif principal des dépendances de rôles est de garantir que certains rôles sont exécutés avant celui en cours, assurant ainsi que toutes les conditions préalables sont remplies. Cela permet d’automatiser le processus de préparation de l’environnement nécessaire pour chaque rôle.

Exécution pratique des rôles Ansible

Dans cette section, nous allons créer un nœud géré dans la console AWS. Voici nos trois nœuds dans la console, et nous avons nommé le troisième nœud que nous avons instancié  » noeudGredhat  » :

Tableau de noeuds Ansible actifs et leurs états

Maintenant nous avons mis en place nos trois nœuds, copions la clé publique du nœud de contrôle vers le troisième nœud ( noeudGredhat ) afin de pouvoir s’y connecter depuis le nœud de contrôle. Pour ce faire, accédez au dossier . ssh sur le nœud de contrôle et lisez le contenu de la clé publique id_ed25519.pub . Copier ensuite ce contenu dans le fichier authorized_keys de notre troisième nœud. Voici la clé publique du nœud de contrôle :

Exemple de gestion des clés SSH dans un terminal

Copions cette clé dans le fichier authorized_keys du troisième nœud comme ceci :

Écran de Nano éditant les clés SSH

Une fois la clé copiée, nous allons tester la connexion depuis le nœud de contrôle vers ce nœud en utilisant la commande suivante : ssh ec2-user@15.188.59.150 . Ici, ec2-user est le nom de l’utilisateur sur la machine cible (Troisième nœud ), et 15.188.59.150 est son adresse IP publique.

Connexion SSH vers un serveur EC2 avec terminal

Bravo, connexion au troisième nœud par la connexion ssh est réussite. Nous pouvons clairement observer que le nom et l’adresse IP du terminal ont été remplacés par ceux du troisième nœud.

Parfait, ajoutons maintenant ce nœud dans l’inventaire du nœud de contrôle pour le manipuler avec ansible.

Fichier inventaire Ansible avec groupes

Très bien …………………. Nous avons maintenant ajouté le troisième nœud à notre inventaire, portant le total à deux nœuds à gérer. Nous avons spécifié ansible_user=ec2-user car l’utilisateur par défaut était ubuntu, ce qui est différent de notre nouveau système qui est Red Hat.

Passons désormais au vif du sujet de ce chapitre, nous allons créer un playbook pour installer et mettre à jour Apache sur nos nœuds gérés. Voici la structure des rôles que nous allons mettre en place pour cette tâche :

Arborescence des rôles Ansible pour Apache

Le fichier roles-playbook.yml est utilisé pour définir les rôles des tâches, tandis que le dossier tasks contient les tâches d’installation et de configuration. Ensuite, le dossier vars contient les variables spécifiques à chaque système d’exploitation. Passons maintenant au développement des fichiers de tâches avec leur contenu respectif :

Pour tasks/main.yml

				
					
 tasks/main.yml
---
- include_vars:  "{{ansible_os_family}}.yml"
- import_tasks: install.yml
- import_tasks: configure.yml
- import_tasks: service.yml

				
			

Dans ce fichier, nous avons importé toutes fichier contenant les taches du playbook.

Pour le fichier tasks/install.yml

				
					
 tasks/install.yml
---
- name: install package with yum
yum:
name: "{{package_name}}"
state: "{{package_version}}"

				
			

install.yml : c’est le fichier qui contient la tâche d’installation d’Apache sur une machine basée sur Red Hat.

Pour le fichier configuration, voici son contenu : tasks/configure.yml

				
					
 ---
- name: copy apache configuration file
copy:
src: "{{package_name}}.config"
dest: "{{config_dest_file}}"

				
			

Nous utilisons le module copy : Ceci est le module Ansible utilisé pour copier des fichiers depuis le contrôleur Ansible vers les hôtes cibles.

src: « {{package_name}}.config » : Cette ligne spécifie le chemin du fichier source à copier. Le nom du fichier source est construit dynamiquement en utilisant la variable {{package_name}} suivie de l’extension.config. La variable package_name doit être définie ailleurs dans les variables.

dest: « {{config_dest_file}} » : Cette ligne spécifie le chemin de destination où le fichier sera copié sur l’hôte cible. La variable {{config_dest_file}} doit également être définie ailleurs dans le playbook ou les variables.

Pour les services, voici le contenu di fichier : tasks/service.yml

				
					
 ---
- name: Enable apache
service:
name: "{{package_name}}"
enabled: yes
state: restarted

				
			

Cette tache redémarre juste apache dans les nœuds gérés.

Passons maintenant aux variables. Étant donné que nous avons deux systèmes d’exploitation différents sur nos nœuds gérés, nous allons développer deux jeux de variables pour chacun de ces systèmes. Voici le contenu des variables pour le nœud basé sur Debian (Ubuntu) : vars/Debian.yml

				
					
 ---
package_name: apache2
package_version: latest
config_dest_file: /etc/apache2/apache2.conf

				
			

package_name: apache2 : Cette variable définit le nom du package à installer. Dans ce cas, le package s’appelle apache2.

package_version: latest : Cette variable spécifie la version du package à installer. Ici, latest indique qu’Ansible doit installer la dernière version disponible du package apache2.

config_dest_file: /etc/apache2/apache2.conf : Cette variable spécifie le chemin du fichier de configuration d’Apache sur la machine cible.

Pour le nœud basé sur redhat : vars/RedHat.yml

				
					
 ---
package_name: httpd
package_version: latest
config_dest_file: /etc/httpd/httpd.conf

				
			

Cette variable fait la même chose comme la variable précédente mais juste pour le nœud basé sur redhat.

Maintenant, il nous reste le playbook, donc voici sontìcontenu : roles-playbook.yml

				
					
 ---
- hosts: servers
tasks:
- debug:
msg: "Before running role"
- include_role:
name: apache
- debug:
msg: "After running role"

				
			

Ce playbook exécute trois tâches sur les hôtes du groupe servers :

  • Affiche un message avant l’exécution du rôle apache.
  • Inclut et exécute le rôle apache.
  • Affiche un message après l’exécution du rôle apache.

Tout est prêt et disponible. Créons les fichiers à l’endroit désigné et copions le contenu de chacun. À la fin de la création des dossiers et fichiers, nous devrions obtenir une structure comme celle-ci :

Structure des fichiers de rôles Ansible Apache

Super, nous avons bien mis en place la structure des rôles. Pour cette étape pour la copie des contenus et création des dossiers, commencez par créer le dossier ‘demo-roles’ avec la commande ‘ mkdir demo-roles’ . Ensuite, à l’intérieur de ce dossier, créez les fichiers ‘apache2.conf’ , ‘httpd.conf’ et ‘roles-playbook.yml’ avec la commande ‘nano nom-fichier’ . Ensuite, créez également le dossier ‘roles’ et à l’intérieur de celui-ci, créez le dossier ‘apache’ . Dans le dossier ‘apache’ , créez les dossiers ‘tasks’ et ‘vars’ , puis enfin, créez les fichiers respectifs dans ces dossiers. »

Executons maintenant notre playbook avec la commande : ansible-playbook -v roles-playbook.yml –become, et il nous affiche le résultat comme ceci :

Sortie de terminal Ansible pour un rôle

Parfait, nous obtenons le résultat attendu et nous pouvons aussi vérifier la version d’apache installer avec la commande : apache2 –version et cela nous affiche sa version

Version serveur Apache sur Ubuntu

Voilà, nous avons terminé cette partie avec succès.

Utilisation des rôles

Dans ce dernier exercice, nous allons utiliser rôles pour créer un rôle mongodb avec l’arborescence suivante qui essaye d’installer, demarrer mongodb dans le nœud géré :

Mongodb :

Tasks  🡺 main.yml : pour les tâches à exécuter

Vars 🡺 main.yml: pour les variables relatives aux compte utilisateurs

Templates 🡺 mongo.conf.j2

Donc avant de traiter l’exercice, créons maintenant l’arborescence de notre dossier : Voila l’architecture de notre projet.

Terminal montrant la création de dossiers Ansible

Ensuite, developper le contenu du fichier main.yml des tâches (tasks) : tasks/main. yml

– name: Update reporitory

command: sudo apt-get Update

become: yes

– name: install mongoDB

apt:

name: mongodb

state: present

update_cache: yes

become: yes

– name: install pymongo

pip: name=pymongo

– name: update mongodb config

template:

src: ../template/mongo.conf.j2

dest: /etc/mongod.conf

owner: root

group: root

mode: 0644

become: yes

– name: Ensure mongodb is restarted

service:

name: mongodb

state: restarted

become: yes

– mongodb_user:

database: « {{mongo_admin_db}} »

name: « {{mongodb_root_login}} »

password: « {{mongodb_root_password}} »

roles: root

state: present

Copions le dans le fichier tasks/main.yml pour pouvoir l’executer après.

Fichier YAML Ansible pour configurer MongoDB

Le contenu du fichier main de vars : vars/main.yml qui contient juste les variables d’un compte.

—

mongodb_admin_db: admin

mongodb_root_login: root

mongodb_root_password: formation123

default_mongodb_port: 27017

Éditeur Nano montrant des variables Ansible MongoDB

Pour le template. Voici le contenu : template / mongo.conf.j2

storage:

dbPath: /var/lib/mongodb

journal:

enabled: true

systemLog:

destination: file

logAppend : true

path: /var/log/mongodb/mongo.log

net:

port: {{default_mongodb_port}}

setParameter:

enableLocalhostAuthBypass: false

Après avoir créé l’arborescence de l’exercice et copié le contenu de chaque fichier, voilà la structure de nos fichier et dossier. Nous pouvons l’afficher avec la commande : tree

Arborescence des fichiers de rôles Ansible

Maintenant, copions le contenu du playbook dans le fichier exercice5-playbook.yml comme ceci.

Exemple de playbook Ansible avec MongoDB

Tout est prêt à être exécuté. Positionnons-nous dans le dossier exercice5 et lançons la commande suivante pour exécuter le playbook : ansible-playbook -v exercice5-playbook.yml –become

Exécution d'un playbook Ansible incluant MongoDB

Parfait, comme indiqué sur le visuel, le playbook a été exécuté avec succès. Nous avons donc terminé cet exercice avec succès. Nous avons les connaissances nécessaires pour débuter avec Ansible maintenant.

Formez-vous gratuitement avec Alphorm !

Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.

Démarrer gratuitement
illustration processus de paiement en ligne avec étapes claires et convivialité

FAQ

Qu'est-ce qu'un rôle en Ansible?
Un rôle en Ansible est un ensemble structuré de tâches qui forment des composants réutilisables. Il regroupe et ordonne des actions, gère des templates pour les inventaires, et attribue des variables de manière organisée. Cela permet de simplifier la gestion des configurations en séparant clairement les différentes parties fonctionnelles d’un playbook.
Comment organiser la structure des rôles?
La structure des rôles en Ansible est organisée en répertoires spécifiques comme tasks, handlers, vars, etc. Chaque répertoire contient des fichiers qui définissent les tâches, les gestionnaires d’événements, les variables, et plus. Cette organisation aide à la réutilisation et la maintenance des configurations d’infrastructure, facilitant ainsi la gestion de l’infrastructure.
Comment fonctionne le stockage et la recherche des rôles?
Le stockage et la recherche des rôles se font via le paramétrage des chemins roles_path. Ansible recherche les rôles dans les répertoires spécifiés par roles_path, et vous pouvez aussi spécifier d’autres répertoires dans le fichier de configuration ansible.cfg. Cela facilite la réutilisation et la gestion centralisée des rôles dans vos environnements Ansible.
Quelle est la différence entre import_role et include_role?
La directive import_role charge les tâches du rôle statiquement avant l’exécution du playbook, tandis qu’include_role inclut les rôles dynamiquement durant l’exécution, permettant une plus grande modularité. Import_role est plus performant mais moins flexible, tandis qu’include_role est utilisé pour des rôles conditionnels ou basés sur des variables dynamiques.
Comment exécuter un rôle plusieurs fois dans un playbook?
Pour exécuter un rôle plusieurs fois, Ansible utilise la directive allow_duplicates dans les méta-données du rôle. Cela permet d’appliquer le même rôle avec des configurations différentes dans un même playbook, assurant que les conditions préalables sont remplies pour chaque rôle exécuté.

Conclusion

En maîtrisant les rôles Ansible, vous simplifiez la gestion de vos infrastructures. Comment envisagez-vous d’appliquer ces connaissances dans vos projets Ansible?

ÉTIQUETÉ : Ansible
Facebook
Twitter
LinkedIn
Email
WhatsApp
Par L'Équipe Alphorm
Démocratiser la Connaissance Informatique pour Tous !
Suivre :
L'Équipe Alphorm, c'est la démocratisation de la connaissance informatique. Passionnés et dévoués, nous sommes là pour vous guider vers le succès en rendant la technologie accessible à tous. Rejoignez notre aventure d'apprentissage et de partage. Avec nous, le savoir IT devient une ressource inspirante et ouverte à tous dans un monde numérique en constante évolution.

Derniers Articles

  • Techniques pour gérer les fichiers texte en C#
  • Créer et lire un fichier CSV avec C#
  • JSON : Comprendre et Utiliser Efficacement
  • Créer une Base SQLite dans C#
  • Lecture des données SQLite simplifiée
Laisser un commentaire Laisser un commentaire

Laisser un commentaire Annuler la réponse

Vous devez vous connecter pour publier un commentaire.

Blog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Comprendre les rôles Ansible et leur utilisation

© Alphorm - Tous droits réservés