Introduction à Ansible : Automatiser la gestion de l’infrastructure informatique
Table of Contents
Ansible est un outil d’automatisation open-source qui permet aux administrateurs système d’automatiser la gestion de l’infrastructure informatique. Il fournit un langage simple pour décrire l’état souhaité de l’infrastructure, et applique automatiquement cet état. Cela permet de réduire le temps et les efforts nécessaires à la gestion de systèmes complexes à grande échelle.
Si vous ne connaissez pas Ansible, cet article vous fournira une introduction à l’outil, y compris ses concepts de base et la manière de commencer à l’utiliser.
Introduction à Ansible
Ansible a été développé par Michael DeHaan en 2012 et acquis par Red Hat en 2015. Depuis, il est devenu l’un des outils d’automatisation les plus populaires de l’industrie.
Ansible utilise un langage simple et déclaratif appelé YAML (abréviation de “YAML Ain’t Markup Language”) pour définir l’état souhaité de l’infrastructure. Cela le rend facile à lire et à comprendre, même pour les non-programmeurs.
Ansible peut être utilisé pour automatiser un large éventail de tâches, notamment :
- Gestion de la configuration
- Déploiement d’applications
- Livraison continue
- Le provisionnement
- Conformité à la sécurité
- Orchestration
Démarrer avec Ansible
Pour commencer à utiliser Ansible, vous devez l’installer sur votre système. Ansible peut être installé sur un large éventail de systèmes d’exploitation, notamment Linux, macOS et Windows.
Pour installer Ansible sur Linux, en l’occurrence Ubuntu, vous pouvez utiliser les commandes suivantes :
sudo apt-get update
sudo apt-get install ansible -y
Sinon, vous pouvez utiliser les guides suivants pour installer ansible :
Une fois Ansible installé, vous pouvez vérifier qu’il fonctionne en exécutant la commande suivante :
ansible --version
Cela devrait afficher la version d’Ansible que vous avez installée.
Inventaire Ansible
La première étape de l’utilisation d’Ansible consiste à définir un inventaire. Un inventaire est une liste de serveurs qu’Ansible va gérer. Un inventaire peut être défini dans différents formats, notamment INI, YAML et JSON.
Voici un exemple de fichier d’inventaire au format INI :
[webservers]
webserver1.example.com
webserver2.example.com
[databases]
dbserver1.example.com
dbserver2.example.com
Ce fichier d’inventaire définit deux groupes de serveurs, les “serveurs web” et les “bases de données”, et énumère les noms d’hôte des serveurs de chaque groupe.
Manuels Ansible
Une fois que vous avez défini un inventaire, l’étape suivante consiste à définir un livre de jeu. Un playbook est un fichier YAML qui décrit un ensemble de tâches qu’Ansible doit exécuter sur les serveurs de l’inventaire.
Voici un exemple de playbook simple :
name: Install Nginx
hosts: webservers
become: yes
tasks:
- name: Install Nginx package
apt:
name: nginx
state: present
Ce playbook installe le serveur web Nginx sur tous les serveurs du groupe “webservers”.
Le playbook hosts
spécifie le groupe de serveurs sur lequel le playbook doit être exécuté. Le paramètre become
spécifie que les tâches doivent être exécutées avec des privilèges élevés (en utilisant le paramètre sudo
ou su
Les tasks
énumère les tâches individuelles que le playbook doit exécuter. Dans ce cas, il n’y a qu’une seule tâche, qui installe le paquetage Nginx à l’aide de la commande apt
module.
Modules Ansible
Les modules Ansible sont des unités de code réutilisables qui peuvent être utilisées pour effectuer des tâches spécifiques. Ansible est livré avec un large éventail de modules intégrés, et de nombreux modules tiers sont également disponibles.
Voici quelques exemples de modules intégrés :
apt
- Gérer les paquets sur les systèmes basés sur Debianyum
- Gérer les paquets sur les systèmes basés sur Red Hatfile
- Gérer les fichiersservice
- Gérer les services du systèmeuser
- Gérer les utilisateurs et les groupescopy
- Copier les fichiers de la machine de contrôle vers les serveurs gérés
Vous trouverez une liste complète des modules intégrés dans la section Ansible documentation
Rôles et structure des dossiers Ansible
Un rôle Ansible est un moyen d’organiser et de réutiliser des tâches et des configurations communes. Il s’agit d’une structure de répertoire qui contient des tâches, des gestionnaires, des modèles, des fichiers et d’autres ressources.
Voici un exemple de rôle Ansible simple pour l’installation et la configuration de Nginx :
roles/
└── nginx/
├── tasks/
│ ├── main.yml
├── handlers/
│ ├── main.yml
├── templates/
│ ├── nginx.conf.j2
├── files/
├── vars/
├── defaults/
├── meta/
Dans cet exemple, le rôle nginx est un répertoire qui contient plusieurs sous-répertoires, chacun d’entre eux ayant une fonction spécifique :
- tasks : contient les tâches qui seront exécutées par le rôle.
- handlers : contient les gestionnaires que les tâches peuvent notifier.
- templates : contient les modèles Jinja2 qui seront utilisés pour générer les fichiers de configuration pour Nginx.
- files : contient tous les fichiers statiques nécessaires au rôle.
- vars : contient les variables spécifiques au rôle.
- defaults : contient les variables par défaut pour le rôle.
- meta : contient des métadonnées sur le rôle, telles que ses dépendances.
Les rôles peuvent être facilement partagés et réutilisés dans plusieurs playbooks et projets.
Voici un exemple de fichier main.yml dans le répertoire tasks :
---
- name: Install Nginx
apt:
name: nginx
state: present
notify: restart nginx
- name: Enable Nginx
systemd:
name: nginx
enabled: yes
state: started
Cette tâche installe Nginx à l’aide du module apt et active et démarre le service Nginx à l’aide du module systemd. Elle notifie également le gestionnaire restart nginx, qui redémarre Nginx si des modifications ont été apportées à la configuration.
L’utilisation d’un rôle Ansible comme celui-ci peut simplifier le processus de gestion et de configuration de logiciels sur plusieurs serveurs ou environnements. En séparant les tâches, les gestionnaires, les modèles et les autres ressources dans une structure de répertoire unique, vous pouvez plus facilement gérer et réutiliser ces composants dans différents playbooks et projets.
Meilleures pratiques pour Ansible
Voici quelques bonnes pratiques à suivre lors de l’utilisation d’Ansible :
1. Utiliser le contrôle de version
Le stockage de vos playbooks et rôles Ansible dans un système de contrôle de version tel que Git est une bonne pratique qui peut vous aider à suivre les modifications et à collaborer avec d’autres personnes. Le contrôle de version fournit un historique des modifications apportées à votre base de code, ce qui vous permet de revenir aux versions précédentes si nécessaire. Il facilite également la collaboration avec d’autres personnes en partageant le code et en gérant les conflits.
2. Utilisez les rôles pour organiser vos playbooks
Les rôles sont un moyen puissant d’organiser vos playbooks et vos tâches Ansible. En regroupant les tâches connexes dans des rôles, vous pouvez rendre vos playbooks plus modulaires et réutilisables. Les rôles facilitent également le partage du code entre différents projets.
Voici un exemple de livre de jeu qui utilise un rôle pour installer et configurer Nginx :
name: Install and configure Nginx
hosts: webservers
become: yes
roles:
- nginx
Ce playbook utilise un rôle appelé “nginx” pour installer et configurer Nginx sur le groupe d’hôtes “webservers”.
3. Utiliser des balises pour regrouper les tâches
Les balises peuvent être utilisées pour regrouper des tâches connexes dans vos playbooks Ansible. Cela facilite l’exécution de parties spécifiques d’un playbook, en particulier lorsque vous travaillez avec des playbooks complexes et volumineux.
Voici un exemple d’utilisation des balises dans un livre de jeu Ansible :
name: Install and configure Nginx
hosts: webservers
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
tags: nginx_install
- name: Configure Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
tags: nginx_config
Ce playbook comporte deux tâches, l’une pour l’installation de Nginx et l’autre pour la configuration de Nginx. Chaque tâche est associée à une balise, ce qui permet de n’exécuter que les tâches nécessaires.
4. Utiliser des variables pour rendre les playbooks plus flexibles
Les variables peuvent être utilisées pour rendre vos playbooks Ansible plus flexibles et réutilisables. En utilisant des variables, vous pouvez rendre vos playbooks plus génériques et les adapter à différents environnements.
Voici un exemple d’utilisation de variables dans un playbook Ansible :
name: Install and configure Nginx
hosts: webservers
become: yes
vars:
nginx_port: 80
nginx_user: www-data
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Configure Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
Ce playbook utilise des variables pour spécifier le port sur lequel Nginx doit écouter et l’utilisateur qui doit exécuter Nginx. Cela rend le playbook plus flexible et adaptable à différents environnements.
5. Testez vos playbooks
Tester vos playbooks Ansible est une bonne pratique qui peut vous aider à détecter les erreurs et à vous assurer que vos playbooks fonctionnent comme prévu. Un outil populaire pour tester les playbooks Ansible est Molecule.
Molecule est un cadre de test qui vous permet de tester vos playbooks de manière cohérente et automatisée. Molecule peut créer des machines virtuelles, appliquer votre playbook, puis vérifier que tout fonctionne comme prévu. Cela peut vous aider à détecter les erreurs et à vous assurer que vos playbooks fonctionnent correctement avant de les déployer en production.
Voici un exemple d’utilisation de Molecule pour tester un rôle Ansible :
molecule init role myrole
cd myrole
molecule test
Conclusion
Dans cet article, nous avons présenté Ansible, un puissant outil d’automatisation qui peut vous aider à gérer une infrastructure informatique complexe. Nous avons abordé les concepts de base d’Ansible, notamment les inventaires, les playbooks, les modules et les rôles.
Nous avons également abordé les meilleures pratiques d’utilisation d’Ansible, notamment l’utilisation du contrôle de version, l’organisation des playbooks avec des rôles, l’utilisation de balises et de variables, et le test de vos playbooks.
Si vous débutez avec Ansible, nous vous recommandons de commencer par expérimenter quelques playbooks simples et de développer progressivement vos compétences et vos connaissances au fil du temps. Avec de la pratique, vous serez en mesure d’automatiser les tâches d’infrastructure les plus complexes avec facilité !